From 90272af19703f172072ab3a9a5c42e802de5266e Mon Sep 17 00:00:00 2001 From: redstrate <54911369+redstrate@users.noreply.github.com> Date: Sun, 7 Feb 2021 15:48:09 -0500 Subject: [PATCH] Only enable validation if found on system Works with the new Vulkan configurator method of enabling validation. Also only enables debug printing if the extension is found. --- engine/gfx/vulkan/src/gfx_vulkan.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/engine/gfx/vulkan/src/gfx_vulkan.cpp b/engine/gfx/vulkan/src/gfx_vulkan.cpp index afb3547..8c8d322 100755 --- a/engine/gfx/vulkan/src/gfx_vulkan.cpp +++ b/engine/gfx/vulkan/src/gfx_vulkan.cpp @@ -121,7 +121,19 @@ bool GFXVulkan::initialize(const GFXCreateInfo& info) { const char* surface_name = VK_KHR_XCB_SURFACE_EXTENSION_NAME; #endif - createInstance({ "VK_LAYER_KHRONOS_validation" }, { "VK_EXT_debug_utils", "VK_KHR_surface", surface_name }); + uint32_t extensionPropertyCount = 0; + vkEnumerateInstanceExtensionProperties(nullptr, &extensionPropertyCount, nullptr); + + std::vector extensionProperties(extensionPropertyCount); + vkEnumerateInstanceExtensionProperties(nullptr, &extensionPropertyCount, extensionProperties.data()); + + std::vector enabledExtensions = { "VK_KHR_surface", surface_name }; + for (auto prop : extensionProperties) { + if (!strcmp(prop.extensionName, "VK_EXT_debug_utils")) + enabledExtensions.push_back("VK_EXT_debug_utils"); + } + + createInstance({}, enabledExtensions); createLogicalDevice({ VK_KHR_SWAPCHAIN_EXTENSION_NAME }); createDescriptorPool(); createSyncPrimitives();