diff --git a/openVulkanoCpp/Vulkan/Context.cpp b/openVulkanoCpp/Vulkan/Context.cpp index b34f8b7..10c0cf1 100644 --- a/openVulkanoCpp/Vulkan/Context.cpp +++ b/openVulkanoCpp/Vulkan/Context.cpp @@ -50,7 +50,7 @@ namespace OpenVulkano::Vulkan vkDestroySurfaceKHR(static_cast(instance), surface, nullptr); //TODO - if (enableValidationLayer) Debug::CloseValidationLayers(instance); + if (enableValidationLayer) Debug::CloseValidationLayers(instance, dynamicDispatch); instance.destroy(); initialized = false; @@ -77,9 +77,9 @@ namespace OpenVulkano::Vulkan #endif instance = vk::createInstance(createInfo); - - if (enableValidationLayer) Debug::SetupValidationLayers(instance, vk::DebugReportFlagBitsEXT::eError | vk::DebugReportFlagBitsEXT::eWarning | vk::DebugReportFlagBitsEXT::ePerformanceWarning /*| vk::DebugReportFlagBitsEXT::eInformation | vk::DebugReportFlagBitsEXT::eDebug*/); dynamicDispatch.init(instance, &vkGetInstanceProcAddr); + + if (enableValidationLayer) Debug::SetupValidationLayers(instance, vk::DebugReportFlagBitsEXT::eError | vk::DebugReportFlagBitsEXT::eWarning | vk::DebugReportFlagBitsEXT::ePerformanceWarning /*| vk::DebugReportFlagBitsEXT::eInformation | vk::DebugReportFlagBitsEXT::eDebug*/, dynamicDispatch); } void Context::CreateDevice() diff --git a/openVulkanoCpp/Vulkan/Debuging/ValidationLayer.cpp b/openVulkanoCpp/Vulkan/Debuging/ValidationLayer.cpp index bcedf26..5bcf423 100644 --- a/openVulkanoCpp/Vulkan/Debuging/ValidationLayer.cpp +++ b/openVulkanoCpp/Vulkan/Debuging/ValidationLayer.cpp @@ -72,24 +72,23 @@ namespace OpenVulkano::Vulkan return false; } - static std::once_flag dispatcherInitFlag; - vk::DispatchLoaderDynamic dispatcher; - vk::DebugReportCallbackEXT msgCallback; + namespace + { + vk::DebugReportCallbackEXT msgCallback; + } - void Debug::SetupValidationLayers(const vk::Instance& instance, const vk::DebugReportFlagsEXT& flags) + void Debug::SetupValidationLayers(const vk::Instance& instance, const vk::DebugReportFlagsEXT& flags, vk::DispatchLoaderDynamic& dispatchLoaderDynamic) { Logger::RENDER->info("Setting up Vulkan Validation Layer"); - std::call_once(dispatcherInitFlag, [&] { dispatcher.init(instance, &vkGetInstanceProcAddr); }); vk::DebugReportCallbackCreateInfoEXT dbgCreateInfo = {}; dbgCreateInfo.pfnCallback = (PFN_vkDebugReportCallbackEXT)ValidationLayerCallback; dbgCreateInfo.flags = flags; - msgCallback = instance.createDebugReportCallbackEXT(dbgCreateInfo, nullptr, dispatcher); + msgCallback = instance.createDebugReportCallbackEXT(dbgCreateInfo, nullptr, dispatchLoaderDynamic); Logger::RENDER->info("Vulkan Validation Layer setup"); } - void Debug::CloseValidationLayers(const vk::Instance& instance) + void Debug::CloseValidationLayers(const vk::Instance& instance, vk::DispatchLoaderDynamic& dispatchLoaderDynamic) { - std::call_once(dispatcherInitFlag, [&] { dispatcher.init(instance, &vkGetInstanceProcAddr); }); - instance.destroyDebugReportCallbackEXT(msgCallback, nullptr, dispatcher); + instance.destroyDebugReportCallbackEXT(msgCallback, nullptr, dispatchLoaderDynamic); } } \ No newline at end of file diff --git a/openVulkanoCpp/Vulkan/Debuging/ValidationLayer.hpp b/openVulkanoCpp/Vulkan/Debuging/ValidationLayer.hpp index f195ee5..7167137 100644 --- a/openVulkanoCpp/Vulkan/Debuging/ValidationLayer.hpp +++ b/openVulkanoCpp/Vulkan/Debuging/ValidationLayer.hpp @@ -20,8 +20,8 @@ namespace OpenVulkano::Vulkan static std::vector GetValidationLayers(); - static void SetupValidationLayers(const vk::Instance& instance, const vk::DebugReportFlagsEXT& flags); + static void SetupValidationLayers(const vk::Instance& instance, const vk::DebugReportFlagsEXT& flags, vk::DispatchLoaderDynamic& dispatchLoaderDynamic); - static void CloseValidationLayers(const vk::Instance& instance); + static void CloseValidationLayers(const vk::Instance& instance, vk::DispatchLoaderDynamic& dispatchLoaderDynamic); }; }