From 225d157cfecb698ed6fc3c7e4c3e190ceb0ee0c1 Mon Sep 17 00:00:00 2001 From: Johannes Schneider Date: Thu, 11 Jul 2024 17:47:15 +0200 Subject: [PATCH] Add requested changes to SetDebugUtilsObjectName --- src/Tests.cpp | 2 +- src/VulkanSample.cpp | 18 ++---------------- 2 files changed, 3 insertions(+), 17 deletions(-) diff --git a/src/Tests.cpp b/src/Tests.cpp index a18d544..796b84d 100644 --- a/src/Tests.cpp +++ b/src/Tests.cpp @@ -42,7 +42,7 @@ extern bool VK_KHR_maintenance5_enabled; extern PFN_vkGetBufferDeviceAddressKHR g_vkGetBufferDeviceAddressKHR; void BeginSingleTimeCommands(); void EndSingleTimeCommands(); -void SetDebugUtilsObjectName(VkObjectType type, uint64_t handle, std::string); +void SetDebugUtilsObjectName(VkObjectType type, uint64_t handle, const std::string&); #ifndef VMA_DEBUG_MARGIN #define VMA_DEBUG_MARGIN 0 diff --git a/src/VulkanSample.cpp b/src/VulkanSample.cpp index 890d3ec..1a2ebf1 100644 --- a/src/VulkanSample.cpp +++ b/src/VulkanSample.cpp @@ -262,29 +262,15 @@ struct CommandLineParameters } } g_CommandLineParameters; -void SetDebugUtilsObjectName(VkObjectType type, uint64_t handle, std::string name) +void SetDebugUtilsObjectName(VkObjectType type, uint64_t handle, const std::string &name) { - TEST(!name.empty()); - - // We must make sure the std::string we pass as name is still valid memory until the program ends. - // Since Vulkan is a C-Style API, it only accepts const char* as pObjectName parameter. - // Naming objects with unformatted names like "g_hTemporaryCommandBuffer" is no problem because - // this string ends up in the read-only data section of the program. However, if we for example want to - // name every item in a dynamic array of items (swapchain images for example), we can only use a std::string, - // and we must make sure the object lifetime of that string does not end before it's read as pObjectName. - // Therefore, we store the strings as a static unordered_set here just to be sure. - // Do not use a std::vector because it would continue to grow, eventually running out of memory. - static std::unordered_set debug_names; - auto result = debug_names.insert(name); - const char* pObjectName = result.first->c_str(); - if (vkSetDebugUtilsObjectNameEXT_Func == nullptr) return; VkDebugUtilsObjectNameInfoEXT info = { VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT }; info.objectType = type; info.objectHandle = handle; - info.pObjectName = pObjectName; + info.pObjectName = name.c_str(); ERR_GUARD_VULKAN( vkSetDebugUtilsObjectNameEXT_Func(g_hDevice, &info) ); }