From 1cbd062aa75bd5fc1ce6fe04316f66bdc9a3a9fa Mon Sep 17 00:00:00 2001 From: baldurk Date: Tue, 6 Oct 2020 11:49:08 +0100 Subject: [PATCH] Protect against captures that try to allocate memory from invalid types --- renderdoc/driver/vulkan/wrappers/vk_resource_funcs.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/renderdoc/driver/vulkan/wrappers/vk_resource_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_resource_funcs.cpp index 3071b2a49..f4c7d9cd1 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_resource_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_resource_funcs.cpp @@ -289,6 +289,16 @@ bool WrappedVulkan::Serialise_vkAllocateMemory(SerialiserType &ser, VkDevice dev UnwrapNextChain(m_State, "VkMemoryAllocateInfo", tempMem, (VkBaseInStructure *)&patched); + if(patched.memoryTypeIndex >= m_PhysicalDeviceData.memProps.memoryTypeCount) + { + RDCERR( + "Tried to allocate memory from index %u, but on replay we only have %u memory types.\n" + "This is most likely caused by incompatible hardware or drivers between capture and " + "replay, causing a change in memory requirements.", + patched.memoryTypeIndex, m_PhysicalDeviceData.memProps.memoryTypeCount); + return false; + } + VkResult ret = ObjDisp(device)->AllocateMemory(Unwrap(device), &patched, NULL, &mem); if(ret != VK_SUCCESS)