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.
This commit is contained in:
baldurk
2019-05-27 17:44:52 +01:00
parent 395fb3ed50
commit cf4ddc3434
3 changed files with 25 additions and 0 deletions
+22
View File
@@ -502,4 +502,26 @@ struct VulkanCreationInfo
// just contains the queueFamilyIndex (after remapping)
std::map<ResourceId, uint32_t> 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);
}
};
@@ -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); \
}
@@ -512,6 +512,7 @@ void WrappedVulkan::vkFreeMemory(VkDevice device, VkDeviceMemory memory,
}
m_ForcedReferences.erase(GetResID(memory));
m_CreationInfo.erase(GetResID(memory));
GetResourceManager()->ReleaseWrappedResource(memory);