Vulkan: debugPrintfEXT tidak mencetak apa pun

Saya tidak bisa membuat debugPrintfEXT bekerja. Saya tidak melihat apa yang saya lewatkan.

Langkah-langkah yang saya ambil:

  • Ekstensi instans yang diaktifkan VK_EXT_debug_utils; Diverifikasi menggunakan Nvidia Nsight.
  • Gunakan DebugUtils print untuk menampilkan pesan. Mencetak semua pesan, termasuk DEBUG dan INFO.
  • Menambahkan #extension GL_EXT_debug_printf : enable ke vertex shader.
  • Digunakan debugPrintfEXT("Foo") di vertex shader.
  • Jalankan kode dari Vulkan Configurator, dengan lapisan Cetak diaktifkan.
  • Mengaktifkan fitur validasi di Instance.

Kode:

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

Detail:

  • Windows 10
  • GTX 1080Ti
  • Visual Studio 2019
  • Vulkan 1.2

person Dess    schedule 31.10.2020    source sumber


Jawaban (1)


Apa yang Anda lakukan seharusnya berhasil.

Saya membuatnya berfungsi dengan membuat beberapa perubahan kecil pada contoh segitiga halo di Khronos Vulkan-Samples.

Paksa penggunaan lapisan validasi untuk versi Debug dan Rilis dengan membuat opsi CMake -DVKB_VALIDATION_LAYERS=ON atau dengan menambahkan definisi di bagian atas hello_triangle.cpp. Karena proyek mengaktifkan lapisan validasi dalam build Debug, Anda dapat melewati langkah ini jika tetap menggunakan build Debug.

#define VKB_VALIDATION_LAYERS

Tambahkan bendera VK_DEBUG_REPORT_INFORMATION_BIT_EXT ke debug_report_create_info.flags. dokumentasi untuk persyaratan ini tidak jelas tetapi akan segera diperbaiki. Anda sudah melakukan ini.

Tambahkan kode berikut tepat sebelum panggilan ke vkCreateInstance. Ini pada dasarnya sama dengan kode yang Anda tempel.

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;

Dan buat perubahan yang sama pada vertex shader seperti yang Anda lakukan.

Jika Anda bisa membuatnya berfungsi dengan sampel ini, mungkin Anda akan melihat apa yang Anda lakukan secara berbeda di aplikasi Anda.

person Karl Schultz    schedule 04.11.2020
comment
Ini berfungsi sekarang! Saya pikir itu mengatur bagian info, tapi saya pikir saya juga pernah melakukan itu sebelumnya. Aneh. Bagaimanapun, terima kasih. Poin kecil: Ini menyebabkan loop tak terbatas dan tidak diperlukan: features.pNext=instance_info.pNext; - person Dess; 04.11.2020