From f12ae2d9fa8503f8404f42ff0ad570146559b7cb Mon Sep 17 00:00:00 2001 From: Benson Joeris Date: Fri, 10 Jan 2020 14:06:30 -0500 Subject: [PATCH] Fix alignment for mapped memory when loading initial contents Change-Id: If40878b6b7a190237c3686463c7358bb033c8b06 --- renderdoc/driver/vulkan/vk_initstate.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/renderdoc/driver/vulkan/vk_initstate.cpp b/renderdoc/driver/vulkan/vk_initstate.cpp index 8ddab99bd..94b3283d2 100644 --- a/renderdoc/driver/vulkan/vk_initstate.cpp +++ b/renderdoc/driver/vulkan/vk_initstate.cpp @@ -904,6 +904,8 @@ bool WrappedVulkan::Serialise_InitialState(SerialiserType &ser, ResourceId id, // Serialise this separately so that it can be used on reading to prepare the upload memory SERIALISE_ELEMENT(ContentsSize); + const VkDeviceSize nonCoherentAtomSize = GetDeviceProps().limits.nonCoherentAtomSize; + // the memory/buffer that we allocated on read, to upload the initial contents. MemoryAllocation uploadMemory; VkBuffer uploadBuf = VK_NULL_HANDLE; @@ -953,8 +955,8 @@ bool WrappedVulkan::Serialise_InitialState(SerialiserType &ser, ResourceId id, mappedMem = uploadMemory; - ObjDisp(d)->MapMemory(Unwrap(d), Unwrap(mappedMem.mem), mappedMem.offs, mappedMem.size, 0, - (void **)&Contents); + ObjDisp(d)->MapMemory(Unwrap(d), Unwrap(mappedMem.mem), mappedMem.offs, + AlignUp(mappedMem.size, nonCoherentAtomSize), 0, (void **)&Contents); } // not using SERIALISE_ELEMENT_ARRAY so we can deliberately avoid allocation - we serialise @@ -972,7 +974,7 @@ bool WrappedVulkan::Serialise_InitialState(SerialiserType &ser, ResourceId id, NULL, Unwrap(mappedMem.mem), mappedMem.offs, - mappedMem.size, + AlignUp(mappedMem.size, nonCoherentAtomSize), }; vkr = ObjDisp(d)->FlushMappedMemoryRanges(Unwrap(d), 1, &range);