diff --git a/renderdoc/driver/vulkan/vk_manager.h b/renderdoc/driver/vulkan/vk_manager.h index 0692c68f7..156ac5b1e 100644 --- a/renderdoc/driver/vulkan/vk_manager.h +++ b/renderdoc/driver/vulkan/vk_manager.h @@ -296,6 +296,12 @@ public: return (WrappedVkNonDispRes *)GetWrapper(ToTypedHandle(real)); } + template + WrappedVkDispRes *GetDispWrapper(realtype real) + { + return (WrappedVkDispRes *)GetWrapper(ToTypedHandle(real)); + } + template ResourceId WrapResource(parenttype parentObj, realtype &obj) { diff --git a/renderdoc/driver/vulkan/wrappers/vk_queue_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_queue_funcs.cpp index 70c8bad6c..a2436203e 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_queue_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_queue_funcs.cpp @@ -50,8 +50,18 @@ bool WrappedVulkan::Serialise_vkGetDeviceQueue(SerialiserType &ser, VkDevice dev ObjDisp(device)->GetDeviceQueue(Unwrap(device), remapFamily, remapIndex, &queue); - GetResourceManager()->WrapResource(Unwrap(device), queue); - GetResourceManager()->AddLiveResource(Queue, queue); + if(GetResourceManager()->HasWrapper(ToTypedHandle(queue))) + { + ResourceId live = GetResourceManager()->GetDispWrapper(queue)->id; + + // whenever the new ID is requested, return the old ID, via replacements. + GetResourceManager()->ReplaceResource(Queue, GetResourceManager()->GetOriginalID(live)); + } + else + { + GetResourceManager()->WrapResource(Unwrap(device), queue); + GetResourceManager()->AddLiveResource(Queue, queue); + } if(remapFamily == m_QueueFamilyIdx && m_Queue == VK_NULL_HANDLE) {