From cf4ddc3434ba3637b6093adb83755b7f44088610 Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 27 May 2019 17:44:52 +0100 Subject: [PATCH] Clean up vulkan creation info when destroying objects * Otherwise internal resources like pipelines for mesh-output fetch can lurk around in the creation info structures and cause problems when e.g. editing shaders. --- renderdoc/driver/vulkan/vk_info.h | 22 +++++++++++++++++++ .../driver/vulkan/wrappers/vk_misc_funcs.cpp | 2 ++ .../vulkan/wrappers/vk_resource_funcs.cpp | 1 + 3 files changed, 25 insertions(+) diff --git a/renderdoc/driver/vulkan/vk_info.h b/renderdoc/driver/vulkan/vk_info.h index dff693511..44882c1ee 100644 --- a/renderdoc/driver/vulkan/vk_info.h +++ b/renderdoc/driver/vulkan/vk_info.h @@ -502,4 +502,26 @@ struct VulkanCreationInfo // just contains the queueFamilyIndex (after remapping) std::map m_Queue; + + void erase(ResourceId id) + { + m_Pipeline.erase(id); + m_PipelineLayout.erase(id); + m_RenderPass.erase(id); + m_Framebuffer.erase(id); + m_Memory.erase(id); + m_Buffer.erase(id); + m_BufferView.erase(id); + m_Image.erase(id); + m_Sampler.erase(id); + m_YCbCrSampler.erase(id); + m_ImageView.erase(id); + m_ShaderModule.erase(id); + m_DescSetPool.erase(id); + m_Names.erase(id); + m_SwapChain.erase(id); + m_DescSetLayout.erase(id); + m_DescUpdateTemplate.erase(id); + m_Queue.erase(id); + } }; diff --git a/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp index ef48f5546..64f70000c 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp @@ -96,6 +96,8 @@ VkFramebufferCreateInfo WrappedVulkan::UnwrapInfo(const VkFramebufferCreateInfo return; \ type unwrappedObj = Unwrap(obj); \ m_ForcedReferences.erase(GetResID(obj)); \ + if(IsReplayMode(m_State)) \ + m_CreationInfo.erase(GetResID(obj)); \ GetResourceManager()->ReleaseWrappedResource(obj, true); \ ObjDisp(device)->func(Unwrap(device), unwrappedObj, pAllocator); \ } diff --git a/renderdoc/driver/vulkan/wrappers/vk_resource_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_resource_funcs.cpp index b18992216..585707d2d 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_resource_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_resource_funcs.cpp @@ -512,6 +512,7 @@ void WrappedVulkan::vkFreeMemory(VkDevice device, VkDeviceMemory memory, } m_ForcedReferences.erase(GetResID(memory)); + m_CreationInfo.erase(GetResID(memory)); GetResourceManager()->ReleaseWrappedResource(memory);