diff --git a/renderdoc/driver/vulkan/vk_core.cpp b/renderdoc/driver/vulkan/vk_core.cpp index 942a986e2..dc3dab7d7 100644 --- a/renderdoc/driver/vulkan/vk_core.cpp +++ b/renderdoc/driver/vulkan/vk_core.cpp @@ -619,6 +619,12 @@ void WrappedVulkan::FinishCapture() //m_SuccessfulCapture = false; ObjDisp(GetDev())->DeviceWaitIdle(Unwrap(GetDev())); + + { + SCOPED_LOCK(m_CurrentMapsLock); + for(auto it = m_CurrentMaps.begin(); it != m_CurrentMaps.end(); ++it) + SAFE_DELETE_ARRAY(it->second.refData); + } } void WrappedVulkan::StartFrameCapture(void *dev, void *wnd) diff --git a/renderdoc/driver/vulkan/wrappers/vk_queue_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_queue_funcs.cpp index 8ea7dde05..f1b73cb3d 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_queue_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_queue_funcs.cpp @@ -457,10 +457,18 @@ VkResult WrappedVulkan::vkQueueSubmit( vkFlushMappedMemoryRanges(it->second.device, 1, &range); } + GetResourceManager()->MarkPendingDirty(it->first); + // allocate ref data so we can compare next time to minimise serialised data if(it->second.refData == NULL) it->second.refData = new byte[(size_t)it->second.mapSize]; memcpy(it->second.refData, it->second.mappedPtr, (size_t)it->second.mapSize); + + { + SCOPED_LOCK(m_CurrentMapsLock); + m_CurrentMaps[it->first].mapFlushed = false; + m_CurrentMaps[it->first].refData = it->second.refData; + } } } }