Вулкан: debugPrintfEXT ничего не печатает

Я не могу заставить debugPrintfEXT работать. Я не понимаю, что мне не хватает.

Шаги, которые я предпринял:

  • Включенное расширение экземпляра VK_EXT_debug_utils; Проверено с помощью Nvidia Nsight.
  • Используйте печать DebugUtils для вывода сообщений. Печать всех сообщений, включая 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(&valFeatures);

Подробности:

  • Windows 10
  • GTX 1080Ti
  • Visual Studio 2019
  • Вулкан 1.2

person Dess    schedule 31.10.2020    source источник


Ответы (1)


То, что вы делаете, должно работать.

Я заставил его работать, внеся небольшие изменения в образец приветственного треугольника в Vulkan-Samples .

Принудительное использование уровня проверки для сборок отладки и выпуска путем сборки с параметром CMake -DVKB_VALIDATION_LAYERS=ON или путем добавления определения в верхней части 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                     = &features;

И внесите те же изменения в вершинный шейдер, что и вы.

Если вы сможете заставить его работать с этим образцом, возможно, вы увидите, что вы делаете по-другому в своем приложении.

person Karl Schultz    schedule 04.11.2020
comment
Теперь работает! Я думаю, что он устанавливал информационный бит, но я думал, что делал это и раньше. Странный. В любом случае спасибо. Незначительный момент: это вызывает бесконечный цикл, и он не нужен: features.pNext=instance_info.pNext; - person Dess; 04.11.2020