#vulkan
#vulkan
Вопрос:
Я не могу приступить debugPrintfEXT
к работе. Я не вижу, чего мне не хватает.
Шаги, которые я предпринял:
- Включено расширение экземпляра
VK_EXT_debug_utils
; Проверено с помощью Nvidia Nsight. - Используйте DebugUtils print для вывода сообщений. Печать всех сообщений, включая DEBUG и INFO.
- Добавлено
#extension GL_EXT_debug_printf : enable
в вершинный шейдер. - Используется
debugPrintfEXT("Foo")
в вершинном шейдере. - Запустите код из конфигуратора Vulkan с включенным уровнем печати.
- Включена функция проверки в экземпляре.
Код:
vk::InstanceCreateInfo createInfo;
std::vector valFeaturesEnabled = {vk::ValidationFeatureEnableEXT::eDebugPrintf};
vk::ValidationFeaturesEXT valFeatures;
valFeatures.enabledValidationFeatureCount = (uint32_t) valFeaturesEnabled.size();
valFeatures.pEnabledValidationFeatures = valFeaturesEnabled.data();
createInfo.setPNext(amp;valFeatures);
Подробные сведения:
- Windows 10
- GTX 1080Ti
- Visual Studio 2019
- Vulkan 1.2
Ответ №1:
То, что вы делаете, должно работать.
Я заставил его работать, внеся некоторые небольшие изменения в образец «привет, треугольник» в Khronos Vulkan-Samples.
Принудительно используйте уровень проверки как для сборки Debug, так и для сборки Release, используя опцию CMake -DVKB_VALIDATION_LAYERS=ON
или добавив define в верхней части hello_triangle.cpp
. Поскольку проект активирует уровень проверки в отладочной сборке, вы можете пропустить этот шаг, если придерживаетесь отладочной сборки.
#define VKB_VALIDATION_LAYERS
Добавьте VK_DEBUG_REPORT_INFORMATION_BIT_EXT
флаг в debug_report_create_info.flags
. Документация по этому требованию неясна, но скоро будет исправлена. Вы уже делали это.
Добавьте следующий код непосредственно перед вызовом vkCreateInstance
. По сути, это то же самое, что и вставленный вами код.
VkValidationFeatureEnableEXT enabled[] = {VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT};
VkValidationFeaturesEXT features{VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT};
features.disabledValidationFeatureCount = 0;
features.enabledValidationFeatureCount = 1;
features.pDisabledValidationFeatures = nullptr;
features.pEnabledValidationFeatures = enabled;
features.pNext = instance_info.pNext;
instance_info.pNext = amp;features;
И внесите те же изменения в вершинный шейдер, что и вы.
Если вы сможете заставить его работать с этим примером, возможно, вы увидите, что вы делаете по-другому в своем приложении.
Комментарии:
1. Теперь это работает! Я думаю , что он устанавливал бит info, но я думал, что делал это и раньше. Странно. В любом случае, спасибо. Второстепенный момент: это вызывает бесконечный цикл, и он не нужен:
features.pNext=instance_info.pNext;