Refactor dispatcher code
This commit is contained in:
@@ -50,7 +50,7 @@ namespace OpenVulkano::Vulkan
|
||||
vkDestroySurfaceKHR(static_cast<VkInstance>(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()
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -20,8 +20,8 @@ namespace OpenVulkano::Vulkan
|
||||
|
||||
static std::vector<const char*> 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);
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user