From 459883550dc78810a06be934812bc34f97478340 Mon Sep 17 00:00:00 2001 From: baldurk Date: Sun, 24 Jan 2016 20:57:11 +0100 Subject: [PATCH] Also be sure to update refData whenever flushing a second time --- renderdoc/driver/vulkan/vk_core.cpp | 1 + .../driver/vulkan/wrappers/vk_resource_funcs.cpp | 16 ++++++++++------ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/renderdoc/driver/vulkan/vk_core.cpp b/renderdoc/driver/vulkan/vk_core.cpp index a787f93f1..f8a3fb27b 100644 --- a/renderdoc/driver/vulkan/vk_core.cpp +++ b/renderdoc/driver/vulkan/vk_core.cpp @@ -714,6 +714,7 @@ void WrappedVulkan::FinishCapture() { Serialiser::FreeAlignedBuffer((*it)->memMapState->refData); (*it)->memMapState->refData = NULL; + (*it)->memMapState->needRefData = false; } } } diff --git a/renderdoc/driver/vulkan/wrappers/vk_resource_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_resource_funcs.cpp index a76a22464..2754635e1 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_resource_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_resource_funcs.cpp @@ -489,11 +489,17 @@ bool WrappedVulkan::Serialise_vkFlushMappedMemoryRanges( // if we need to save off this serialised buffer as reference for future comparison, // do so now. See the call to vkFlushMappedMemoryRanges in WrappedVulkan::vkQueueSubmit() - if(m_State >= WRITING && state->needRefData && !state->refData) + if(m_State >= WRITING && state->needRefData) { - // if we're in this case, the range should be for the whole memory region. - RDCASSERT(memOffset == 0 && memSize == state->mapSize); + if(!state->refData) + { + // if we're in this case, the range should be for the whole memory region. + RDCASSERT(memOffset == 0 && memSize == state->mapSize); + // allocate ref data so we can compare next time to minimise serialised data + state->refData = Serialiser::AllocAlignedBuffer((size_t)state->mapSize); + } + // it's no longer safe to use state->mappedPtr, we need to save *precisely* what // was serialised. We do this by copying out of the serialiser since we know this // memory is not changing @@ -501,9 +507,7 @@ bool WrappedVulkan::Serialise_vkFlushMappedMemoryRanges( byte *serialisedData = localSerialiser->GetRawPtr(offs); - // allocate ref data so we can compare next time to minimise serialised data - state->refData = Serialiser::AllocAlignedBuffer((size_t)state->mapSize); - memcpy(state->refData, serialisedData, (size_t)state->mapSize); + memcpy(state->refData, serialisedData + (size_t)memOffset, (size_t)memSize); } if(m_State < WRITING)