#glsl #vulkan #validation-layers
Вопрос:
Я пытаюсь понять, как использовать debugPrintfEXT, но безуспешно. Сначала я включил расширение в своем шейдере вершин
#version 450
#extension GL_EXT_debug_printf : enable
void main()
{
debugPrintfEXT("Test");
// ... some more stuff here ...
}
Затем я указываю необходимые расширения для экземпляра Vulkan
VkValidationFeatureEnableEXT enables[] = {VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT};
VkValidationFeaturesEXT features = {};
features.sType = VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT;
features.enabledValidationFeatureCount = 1;
features.pEnabledValidationFeatures = enables;
VkInstanceCreateInfo info = {};
info.pNext = amp;features;
В info.ppEnabledExtensionNames
поле я указал VK_EXT_validation_features
и VK_EXT_debug_utils
среди прочего.
Когда я запускаю свое приложение, я получаю следующие журналы
VUID_Undefined(ERROR / SPEC): msgNum: 2044605652 - Validation Error: [ VUID_Undefined ] Object 0: VK_NULL_HANDLE, type = VK_OBJECT_TYPE_DEVICE; | MessageID = 0x79de34d4 | vkCreateDebugUtilsMessengerEXT: value of pCreateInfo->pNext must be NULL. This error is based on the Valid Usage documentation for version 182 of the Vulkan header. It is possible that you are using a struct from a private extension or an extension that was added to a later version of the Vulkan header, in which case the use of pCreateInfo->pNext is undefined and may not work correctly with validation enabled
Objects: 1
[0] 0, type: 3, name: NULL
[Debug][Error][Validation]"Validation Error: [ VUID-VkShaderModuleCreateInfo-pCode-04147 ] Object 0: handle = 0x5651b647e828, type = VK_OBJECT_TYPE_DEVICE; | MessageID = 0x3d492883 | vkCreateShaderModule(): The SPIR-V Extension (SPV_KHR_non_semantic_info) was declared, but none of the requirements were met to use it. The Vulkan spec states: If pCode declares any of the SPIR-V extensions listed in the SPIR-V Environment appendix, one of the corresponding requirements must be satisfied (https://vulkan.lunarg.com/doc/view/1.2.182.0/linux/1.2-extensions/vkspec.html#VUID-VkShaderModuleCreateInfo-pCode-04147)"
Что еще я должен сделать? И что делает
одно из соответствующих требований должно быть выполнено
в смысле? Есть ли что-то, чего мне не хватает?
Редактировать:
Как предложил Карл Шульц, необходимо добавить VK_KHR_shader_non_semantic_info
к info.ppEnabledExtensionNames
.
Кроме того, не забудьте установить уровень журнала на INFO с VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT
помощью in VkDebugUtilsMessengerCreateInfoEXT::messageSeverity
. По умолчанию все выходные данные, полученные с помощью debugPrintfEXT
, имеют информационный уровень.
Вы также можете увидеть
Printf message was truncated, likely due to a buffer size that was too small for the message
если вы создадите слишком много потоков, каждый из них напечатает свои собственные длинные журналы.
Ответ №1:
Вам также необходимо включить расширение VK_KHR_shader_non_semantic_info
устройства в коде приложения при создании устройства.
LunarG также недавно опубликовала белую книгу о debugPrintfEXT
.
Комментарии:
1. ваша ссылка на белую книгу мертва
2. @ElectRocnic Спасибо, исправлено.