From 64ef0d93a8de7a77c03b23de2990049acda88c58 Mon Sep 17 00:00:00 2001 From: baldurk Date: Tue, 23 Feb 2016 00:49:33 +0100 Subject: [PATCH] Create an implicit vkUnmapMemory() in vkFreeMemory() (Refs #179) * It's legal to free memory while still mapped and this should be handled, so here we clean up any mapped state that's present when destroying a memory resource record. --- .../driver/vulkan/wrappers/vk_resource_funcs.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/renderdoc/driver/vulkan/wrappers/vk_resource_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_resource_funcs.cpp index b05d68e08..8e728d398 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_resource_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_resource_funcs.cpp @@ -288,6 +288,18 @@ void WrappedVulkan::vkFreeMemory( VkDeviceMemory unwrappedMem = wrapped->real.As(); + // there is an implicit unmap on free, so make sure to tidy up + if(wrapped->record->memMapState && wrapped->record->memMapState->refData) + Serialiser::FreeAlignedBuffer(wrapped->record->memMapState->refData); + + { + SCOPED_LOCK(m_CoherentMapsLock); + + auto it = std::find(m_CoherentMaps.begin(), m_CoherentMaps.end(), wrapped->record); + if(it != m_CoherentMaps.end()) + m_CoherentMaps.erase(it); + } + GetResourceManager()->ReleaseWrappedResource(memory); ObjDisp(device)->FreeMemory(Unwrap(device), unwrappedMem, pAllocator);