From 078542e44b501f9784155a8961a8642d1ea38cc8 Mon Sep 17 00:00:00 2001 From: SirLynix Date: Sun, 8 Oct 2023 13:25:42 +0200 Subject: [PATCH] VulkanRenderer: Improve performance of validation message filtering --- .../VulkanRenderer/Wrapper/Instance.hpp | 2 +- .../VulkanRenderer/Wrapper/Instance.cpp | 31 +++++++++---------- 2 files changed, 15 insertions(+), 18 deletions(-) diff --git a/include/Nazara/VulkanRenderer/Wrapper/Instance.hpp b/include/Nazara/VulkanRenderer/Wrapper/Instance.hpp index 44126c91b..5cf3ac157 100644 --- a/include/Nazara/VulkanRenderer/Wrapper/Instance.hpp +++ b/include/Nazara/VulkanRenderer/Wrapper/Instance.hpp @@ -86,7 +86,7 @@ namespace Nz::Vk inline PFN_vkVoidFunction GetProcAddr(const char* name) const; inline RenderAPIValidationLevel GetValidationLevel() const; - void InstallDebugMessageCallback(); + void InstallDebugMessageCallback(RenderAPIValidationLevel validationLevel); inline bool IsExtensionLoaded(const std::string& extensionName) const; inline bool IsLayerLoaded(const std::string& layerName) const; diff --git a/src/Nazara/VulkanRenderer/Wrapper/Instance.cpp b/src/Nazara/VulkanRenderer/Wrapper/Instance.cpp index dd161bab8..08070d8e7 100644 --- a/src/Nazara/VulkanRenderer/Wrapper/Instance.cpp +++ b/src/Nazara/VulkanRenderer/Wrapper/Instance.cpp @@ -20,21 +20,8 @@ namespace Nz::Vk VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, VkDebugUtilsMessageTypeFlagsEXT messageTypes, const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData, - void* pUserData) + void* /*pUserData*/) { - Instance& instance = *static_cast(pUserData); - if (messageTypes & VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT) - { - RenderAPIValidationLevel validationLevel = instance.GetValidationLevel(); - if ((messageSeverity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT) && validationLevel < RenderAPIValidationLevel::Debug) - return VK_FALSE; - - if ((messageSeverity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT) && validationLevel < RenderAPIValidationLevel::Verbose) - return VK_FALSE; - - if ((messageSeverity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT) && validationLevel < RenderAPIValidationLevel::Warnings) - return VK_FALSE; - } std::stringstream ss; ss << "Vulkan log: "; @@ -191,7 +178,7 @@ namespace Nz::Vk } m_internalData = std::make_unique(); - InstallDebugMessageCallback(); + InstallDebugMessageCallback(validationLevel); return true; } @@ -269,7 +256,7 @@ namespace Nz::Vk return true; } - void Instance::InstallDebugMessageCallback() + void Instance::InstallDebugMessageCallback(RenderAPIValidationLevel validationLevel) { NazaraAssert(m_internalData, "Instance must be created before callbacks are installed"); @@ -277,7 +264,17 @@ namespace Nz::Vk { VkDebugUtilsMessengerCreateInfoEXT callbackCreateInfo = {}; callbackCreateInfo.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT; - callbackCreateInfo.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT; + + callbackCreateInfo.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT; + if (validationLevel >= RenderAPIValidationLevel::Debug) + callbackCreateInfo.messageSeverity |= VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT; + + if (validationLevel >= RenderAPIValidationLevel::Verbose) + callbackCreateInfo.messageSeverity |= VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT; + + if (validationLevel >= RenderAPIValidationLevel::Warnings) + callbackCreateInfo.messageSeverity |= VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT; + callbackCreateInfo.messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT; callbackCreateInfo.pfnUserCallback = &DebugMessengerCallback; callbackCreateInfo.pUserData = this;