From 54bb24e424dfcc31f7c4cdd8945aa4b195a84fcf Mon Sep 17 00:00:00 2001 From: Katelyn Gadd Date: Sun, 12 Jan 2025 17:56:30 -0800 Subject: [PATCH 1/4] Assign debug names to command pools and command buffers identifying their SDL_GPU pointers and what thread they have affinity to --- src/gpu/vulkan/SDL_gpu_vulkan.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/gpu/vulkan/SDL_gpu_vulkan.c b/src/gpu/vulkan/SDL_gpu_vulkan.c index d04e89ec684f4..818098f1dd82d 100644 --- a/src/gpu/vulkan/SDL_gpu_vulkan.c +++ b/src/gpu/vulkan/SDL_gpu_vulkan.c @@ -1279,6 +1279,27 @@ static inline const char *VkErrorMessages(VkResult code) // Utility +static void VULKAN_INTERNAL_SetObjectNamePrintf( + VulkanRenderer *renderer, void *object, VkObjectType objectType, const char *format, ... +) { + if (!renderer->debugMode) + return; + + va_list args; + char buf[1024] = { 0 }; + va_start(args, format); + vsnprintf(buf, sizeof(buf), format, args); + va_end(args); + VkDebugUtilsObjectNameInfoEXT nameInfo = { + .objectHandle = object, + .objectType = objectType, + .pObjectName = buf, + .sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT, + .pNext = NULL, + }; + renderer->vkSetDebugUtilsObjectNameEXT(renderer->logicalDevice, &nameInfo); +} + static inline VkPolygonMode SDLToVK_PolygonMode( VulkanRenderer *renderer, SDL_GPUFillMode mode) @@ -9205,6 +9226,11 @@ static bool VULKAN_INTERNAL_AllocateCommandBuffer( // Pool it! + VULKAN_INTERNAL_SetObjectNamePrintf( + renderer, commandBuffer->commandBuffer, VK_OBJECT_TYPE_COMMAND_BUFFER, + "[Thread %d's Command pool %p] Command buffer %p", vulkanCommandPool->threadID, vulkanCommandPool, commandBuffer + ); + vulkanCommandPool->inactiveCommandBuffers[vulkanCommandPool->inactiveCommandBufferCount] = commandBuffer; vulkanCommandPool->inactiveCommandBufferCount += 1; @@ -9249,6 +9275,11 @@ static VulkanCommandPool *VULKAN_INTERNAL_FetchCommandPool( return NULL; } + VULKAN_INTERNAL_SetObjectNamePrintf( + renderer, vulkanCommandPool->commandPool, VK_OBJECT_TYPE_COMMAND_POOL, + "[Thread %d] Command pool %p", threadID, vulkanCommandPool + ); + vulkanCommandPool->threadID = threadID; vulkanCommandPool->inactiveCommandBufferCapacity = 0; From 94b6734a8441509788e9ad0fb0d0173d22fbfbb5 Mon Sep 17 00:00:00 2001 From: Katelyn Gadd Date: Sun, 12 Jan 2025 18:02:05 -0800 Subject: [PATCH 2/4] Object handles are uint64_t --- src/gpu/vulkan/SDL_gpu_vulkan.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gpu/vulkan/SDL_gpu_vulkan.c b/src/gpu/vulkan/SDL_gpu_vulkan.c index 818098f1dd82d..f3c097d7ea5fb 100644 --- a/src/gpu/vulkan/SDL_gpu_vulkan.c +++ b/src/gpu/vulkan/SDL_gpu_vulkan.c @@ -1280,7 +1280,7 @@ static inline const char *VkErrorMessages(VkResult code) // Utility static void VULKAN_INTERNAL_SetObjectNamePrintf( - VulkanRenderer *renderer, void *object, VkObjectType objectType, const char *format, ... + VulkanRenderer *renderer, uint64_t object, VkObjectType objectType, const char *format, ... ) { if (!renderer->debugMode) return; From 253b424cb417cb2700356c7f7c0b9dc6283c707f Mon Sep 17 00:00:00 2001 From: Katelyn Gadd Date: Sun, 12 Jan 2025 18:13:47 -0800 Subject: [PATCH 3/4] Okay, that didn't satisfy gcc either --- src/gpu/vulkan/SDL_gpu_vulkan.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gpu/vulkan/SDL_gpu_vulkan.c b/src/gpu/vulkan/SDL_gpu_vulkan.c index f3c097d7ea5fb..10b26bb304461 100644 --- a/src/gpu/vulkan/SDL_gpu_vulkan.c +++ b/src/gpu/vulkan/SDL_gpu_vulkan.c @@ -1280,7 +1280,7 @@ static inline const char *VkErrorMessages(VkResult code) // Utility static void VULKAN_INTERNAL_SetObjectNamePrintf( - VulkanRenderer *renderer, uint64_t object, VkObjectType objectType, const char *format, ... + VulkanRenderer *renderer, void *object, VkObjectType objectType, const char *format, ... ) { if (!renderer->debugMode) return; @@ -1291,7 +1291,7 @@ static void VULKAN_INTERNAL_SetObjectNamePrintf( vsnprintf(buf, sizeof(buf), format, args); va_end(args); VkDebugUtilsObjectNameInfoEXT nameInfo = { - .objectHandle = object, + .objectHandle = (uint64_t)object, .objectType = objectType, .pObjectName = buf, .sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT, From 90707c019c9e607b727a548d889f7594f165fadd Mon Sep 17 00:00:00 2001 From: Katelyn Gadd Date: Sun, 12 Jan 2025 18:25:49 -0800 Subject: [PATCH 4/4] Fix pointer-size mismatch --- src/gpu/vulkan/SDL_gpu_vulkan.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gpu/vulkan/SDL_gpu_vulkan.c b/src/gpu/vulkan/SDL_gpu_vulkan.c index 10b26bb304461..8fa6b72f03cfb 100644 --- a/src/gpu/vulkan/SDL_gpu_vulkan.c +++ b/src/gpu/vulkan/SDL_gpu_vulkan.c @@ -9228,7 +9228,7 @@ static bool VULKAN_INTERNAL_AllocateCommandBuffer( VULKAN_INTERNAL_SetObjectNamePrintf( renderer, commandBuffer->commandBuffer, VK_OBJECT_TYPE_COMMAND_BUFFER, - "[Thread %d's Command pool %p] Command buffer %p", vulkanCommandPool->threadID, vulkanCommandPool, commandBuffer + "[Thread %p's Command pool %p] Command buffer %p", vulkanCommandPool->threadID, vulkanCommandPool, commandBuffer ); vulkanCommandPool->inactiveCommandBuffers[vulkanCommandPool->inactiveCommandBufferCount] = commandBuffer; @@ -9277,7 +9277,7 @@ static VulkanCommandPool *VULKAN_INTERNAL_FetchCommandPool( VULKAN_INTERNAL_SetObjectNamePrintf( renderer, vulkanCommandPool->commandPool, VK_OBJECT_TYPE_COMMAND_POOL, - "[Thread %d] Command pool %p", threadID, vulkanCommandPool + "[Thread %p] Command pool %p", threadID, vulkanCommandPool ); vulkanCommandPool->threadID = threadID;