From a293c5fad8543456023ef68b58acf41269c94714 Mon Sep 17 00:00:00 2001 From: baldurk Date: Fri, 21 Oct 2016 09:07:00 +0100 Subject: [PATCH] Unwrap objects before forwaring vkDebugMarkerSetObject* --- .../driver/vulkan/wrappers/vk_misc_funcs.cpp | 67 +++++++++++++++---- 1 file changed, 53 insertions(+), 14 deletions(-) diff --git a/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp index 0c2296ac6..43db04aa0 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp @@ -1019,20 +1019,44 @@ bool WrappedVulkan::Serialise_SetShaderDebugPath(Serialiser *localSerialiser, Vk VkResult WrappedVulkan::vkDebugMarkerSetObjectTagEXT(VkDevice device, VkDebugMarkerObjectTagInfoEXT *pTagInfo) { - if(pTagInfo && pTagInfo->tagName == RENDERDOC_ShaderDebugMagicValue_truncated && - pTagInfo->objectType == VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT) + if(m_State >= WRITING && pTagInfo) { VkResourceRecord *record = GetObjRecord(pTagInfo->objectType, pTagInfo->object); - CACHE_THREAD_SERIALISER(); + if(!record) + { + RDCERR("Unrecognised object %d %llu", pTagInfo->objectType, pTagInfo->object); + return VK_SUCCESS; + } - SCOPED_SERIALISE_CONTEXT(SET_SHADER_DEBUG_PATH); - Serialise_SetShaderDebugPath(localSerialiser, device, pTagInfo); - record->AddChunk(scope.Get()); - } - else if(ObjDisp(device)->DebugMarkerSetObjectTagEXT) - { - return ObjDisp(device)->DebugMarkerSetObjectTagEXT(device, pTagInfo); + if(pTagInfo->tagName == RENDERDOC_ShaderDebugMagicValue_truncated && + pTagInfo->objectType == VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT) + { + CACHE_THREAD_SERIALISER(); + + SCOPED_SERIALISE_CONTEXT(SET_SHADER_DEBUG_PATH); + Serialise_SetShaderDebugPath(localSerialiser, device, pTagInfo); + record->AddChunk(scope.Get()); + } + else if(ObjDisp(device)->DebugMarkerSetObjectTagEXT) + { + VkDebugMarkerObjectTagInfoEXT unwrapped = *pTagInfo; + + if(unwrapped.objectType == VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT || + unwrapped.objectType == VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT || + unwrapped.objectType == VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT) + { + WrappedVkDispRes *res = (WrappedVkDispRes *)record->Resource; + unwrapped.object = res->real.handle; + } + else + { + WrappedVkNonDispRes *res = (WrappedVkNonDispRes *)record->Resource; + unwrapped.object = res->real.handle; + } + + return ObjDisp(device)->DebugMarkerSetObjectTagEXT(device, &unwrapped); + } } return VK_SUCCESS; @@ -1060,10 +1084,7 @@ bool WrappedVulkan::Serialise_vkDebugMarkerSetObjectNameEXT(Serialiser *localSer VkResult WrappedVulkan::vkDebugMarkerSetObjectNameEXT(VkDevice device, VkDebugMarkerObjectNameInfoEXT *pNameInfo) { - if(ObjDisp(device)->DebugMarkerSetObjectNameEXT) - ObjDisp(device)->DebugMarkerSetObjectNameEXT(device, pNameInfo); - - if(m_State >= WRITING) + if(m_State >= WRITING && pNameInfo) { Chunk *chunk = NULL; @@ -1075,6 +1096,24 @@ VkResult WrappedVulkan::vkDebugMarkerSetObjectNameEXT(VkDevice device, return VK_SUCCESS; } + VkDebugMarkerObjectNameInfoEXT unwrapped = *pNameInfo; + + if(unwrapped.objectType == VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT || + unwrapped.objectType == VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT || + unwrapped.objectType == VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT) + { + WrappedVkDispRes *res = (WrappedVkDispRes *)record->Resource; + unwrapped.object = res->real.handle; + } + else + { + WrappedVkNonDispRes *res = (WrappedVkNonDispRes *)record->Resource; + unwrapped.object = res->real.handle; + } + + if(ObjDisp(device)->DebugMarkerSetObjectNameEXT) + ObjDisp(device)->DebugMarkerSetObjectNameEXT(device, &unwrapped); + { CACHE_THREAD_SERIALISER();