diff --git a/renderdoc/driver/vulkan/vk_initstate.cpp b/renderdoc/driver/vulkan/vk_initstate.cpp index 48c6c06dc..554c65d6f 100644 --- a/renderdoc/driver/vulkan/vk_initstate.cpp +++ b/renderdoc/driver/vulkan/vk_initstate.cpp @@ -740,10 +740,14 @@ bool WrappedVulkan::Apply_SparseInitialState(WrappedVkBuffer *buf, // unbind the entire buffer so that any new areas that are bound are unbound again - VkSparseMemoryBind unbind = {0, m_CreationInfo.m_Buffer[buf->id].size, VK_NULL_HANDLE, 0, 0}; - VkQueue q = GetQ(); + VkMemoryRequirements mrq = {}; + ObjDisp(q)->GetBufferMemoryRequirements(Unwrap(GetDev()), buf->real.As(), &mrq); + + VkSparseMemoryBind unbind = {0, RDCMAX(mrq.size, m_CreationInfo.m_Buffer[buf->id].size), + VK_NULL_HANDLE, 0, 0}; + VkSparseBufferMemoryBindInfo bufBind = {buf->real.As(), 1, &unbind}; // this semaphore separates the unbind and bind, as there isn't an ordering guarantee