From b38f8b8378535616d71b8c7eca9293db85a281ee Mon Sep 17 00:00:00 2001 From: baldurk Date: Tue, 8 Feb 2022 17:46:49 +0000 Subject: [PATCH] Fix some cases where buffer memory requirements were assumed to be tight * It's possible for a buffer to require more memory than its size (e.g. up to some alignment) --- renderdoc/driver/vulkan/vk_initstate.cpp | 7 ------- renderdoc/driver/vulkan/vk_outputwindow.cpp | 2 +- renderdoc/driver/vulkan/vk_replay.cpp | 2 +- 3 files changed, 2 insertions(+), 9 deletions(-) diff --git a/renderdoc/driver/vulkan/vk_initstate.cpp b/renderdoc/driver/vulkan/vk_initstate.cpp index 58ad96bf0..0fb5ce445 100644 --- a/renderdoc/driver/vulkan/vk_initstate.cpp +++ b/renderdoc/driver/vulkan/vk_initstate.cpp @@ -506,13 +506,6 @@ bool WrappedVulkan::Prepare_InitialState(WrappedVkRes *res) if(readbackmem.mem == VK_NULL_HANDLE) return false; - // dummy request to keep the validation layers happy - the buffers are identical so the - // requirements must be identical - { - VkMemoryRequirements mrq = {0}; - ObjDisp(d)->GetBufferMemoryRequirements(Unwrap(d), Unwrap(dstBuf), &mrq); - } - CheckVkResult(vkr); vkr = ObjDisp(d)->BindBufferMemory(Unwrap(d), Unwrap(dstBuf), Unwrap(readbackmem.mem), readbackmem.offs); diff --git a/renderdoc/driver/vulkan/vk_outputwindow.cpp b/renderdoc/driver/vulkan/vk_outputwindow.cpp index 959bdff76..df199aedc 100644 --- a/renderdoc/driver/vulkan/vk_outputwindow.cpp +++ b/renderdoc/driver/vulkan/vk_outputwindow.cpp @@ -693,7 +693,7 @@ void VulkanReplay::GetOutputWindowData(uint64_t id, bytebuf &retData) vt->GetBufferMemoryRequirements(Unwrap(device), readbackBuf, &mrq); VkMemoryAllocateInfo allocInfo = { - VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO, NULL, bufInfo.size, + VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO, NULL, mrq.size, m_pDriver->GetReadbackMemoryIndex(mrq.memoryTypeBits), }; diff --git a/renderdoc/driver/vulkan/vk_replay.cpp b/renderdoc/driver/vulkan/vk_replay.cpp index 3a66b7495..6b9937a2d 100644 --- a/renderdoc/driver/vulkan/vk_replay.cpp +++ b/renderdoc/driver/vulkan/vk_replay.cpp @@ -3861,7 +3861,7 @@ void VulkanReplay::GetTextureData(ResourceId tex, const Subresource &sub, vt->GetBufferMemoryRequirements(Unwrap(dev), readbackBuf, &mrq); VkMemoryAllocateInfo allocInfo = { - VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO, NULL, dataSize, + VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO, NULL, mrq.size, m_pDriver->GetReadbackMemoryIndex(mrq.memoryTypeBits), };