วัลแคน: debugPrintfEXT ไม่พิมพ์อะไรเลย

ฉันไม่สามารถ debugPrintfEXT ไปทำงานได้ ฉันไม่เห็นว่าฉันกำลังขาดอะไรไป

ขั้นตอนที่ฉันได้ดำเนินการ:

  • เปิดใช้งานส่วนขยายอินสแตนซ์ VK_EXT_debug_utils; ตรวจสอบโดยใช้ Nvidia Nsight
  • ใช้การพิมพ์ DebugUtils เพื่อส่งออกข้อความ พิมพ์ข้อความทั้งหมด รวมถึง DEBUG และ INFO
  • เพิ่ม #extension GL_EXT_debug_printf : enable ให้กับจุดยอดเชดเดอร์
  • ใช้ debugPrintfEXT("Foo") ในจุดยอดเชดเดอร์
  • เรียกใช้โค้ดจาก Vulkan Configurator โดยเปิดใช้งานเลเยอร์การพิมพ์
  • เปิดใช้งานคุณสมบัติการตรวจสอบในอินสแตนซ์

รหัส:

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);

รายละเอียด:

  • วินโดวส์ 10
  • GTX1080Ti
  • วิชวลสตูดิโอ 2019
  • วัลแคน 1.2

person Dess    schedule 31.10.2020    source แหล่งที่มา


คำตอบ (1)


สิ่งที่คุณทำอยู่ควรจะได้ผล

ฉันได้ทำให้มันใช้งานได้โดยทำการเปลี่ยนแปลงเล็กๆ น้อยๆ กับตัวอย่าง Hello Triangle ใน Khronos Vulkan-Samples.

บังคับใช้เลเยอร์การตรวจสอบสำหรับทั้งรุ่น Debug และ Release โดยการสร้างด้วยตัวเลือก CMake -DVKB_VALIDATION_LAYERS=ON หรือโดยการเพิ่มการกำหนดที่ด้านบนของ hello_triangle.cpp เนื่องจากโปรเจ็กต์เปิดใช้งานเลเยอร์การตรวจสอบความถูกต้องในบิลด์ Debug คุณจึงสามารถข้ามขั้นตอนนี้ได้หากคุณใช้บิลด์ Debug ต่อไป

#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