Refactor dispatcher code
This commit is contained in:
@@ -50,7 +50,7 @@ namespace OpenVulkano::Vulkan
|
|||||||
vkDestroySurfaceKHR(static_cast<VkInstance>(instance), surface, nullptr);
|
vkDestroySurfaceKHR(static_cast<VkInstance>(instance), surface, nullptr);
|
||||||
//TODO
|
//TODO
|
||||||
|
|
||||||
if (enableValidationLayer) Debug::CloseValidationLayers(instance);
|
if (enableValidationLayer) Debug::CloseValidationLayers(instance, dynamicDispatch);
|
||||||
|
|
||||||
instance.destroy();
|
instance.destroy();
|
||||||
initialized = false;
|
initialized = false;
|
||||||
@@ -77,9 +77,9 @@ namespace OpenVulkano::Vulkan
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
instance = vk::createInstance(createInfo);
|
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);
|
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()
|
void Context::CreateDevice()
|
||||||
|
|||||||
@@ -72,24 +72,23 @@ namespace OpenVulkano::Vulkan
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static std::once_flag dispatcherInitFlag;
|
namespace
|
||||||
vk::DispatchLoaderDynamic dispatcher;
|
{
|
||||||
vk::DebugReportCallbackEXT msgCallback;
|
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");
|
Logger::RENDER->info("Setting up Vulkan Validation Layer");
|
||||||
std::call_once(dispatcherInitFlag, [&] { dispatcher.init(instance, &vkGetInstanceProcAddr); });
|
|
||||||
vk::DebugReportCallbackCreateInfoEXT dbgCreateInfo = {};
|
vk::DebugReportCallbackCreateInfoEXT dbgCreateInfo = {};
|
||||||
dbgCreateInfo.pfnCallback = (PFN_vkDebugReportCallbackEXT)ValidationLayerCallback;
|
dbgCreateInfo.pfnCallback = (PFN_vkDebugReportCallbackEXT)ValidationLayerCallback;
|
||||||
dbgCreateInfo.flags = flags;
|
dbgCreateInfo.flags = flags;
|
||||||
msgCallback = instance.createDebugReportCallbackEXT(dbgCreateInfo, nullptr, dispatcher);
|
msgCallback = instance.createDebugReportCallbackEXT(dbgCreateInfo, nullptr, dispatchLoaderDynamic);
|
||||||
Logger::RENDER->info("Vulkan Validation Layer setup");
|
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, dispatchLoaderDynamic);
|
||||||
instance.destroyDebugReportCallbackEXT(msgCallback, nullptr, dispatcher);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -20,8 +20,8 @@ namespace OpenVulkano::Vulkan
|
|||||||
|
|
||||||
static std::vector<const char*> GetValidationLayers();
|
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