layers: Fix subscript-out-of-range crash in mem_tracker
Render pass map was not being updated for destroyed renderPasses. When a
renderPass handle was reused by the driver its data became invalid causing
crashes in Windows.
diff --git a/layers/mem_tracker.cpp b/layers/mem_tracker.cpp
index debcc05..acb2775 100644
--- a/layers/mem_tracker.cpp
+++ b/layers/mem_tracker.cpp
@@ -3167,6 +3167,19 @@
return result;
}
+VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyRenderPass(
+ VkDevice device,
+ VkRenderPass renderPass,
+ const VkAllocationCallbacks *pAllocator)
+{
+ layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map);
+ my_data->device_dispatch_table->DestroyRenderPass(device, renderPass, pAllocator);
+
+ loader_platform_thread_lock_mutex(&globalLock);
+ my_data->passMap.erase(renderPass);
+ loader_platform_thread_unlock_mutex(&globalLock);
+}
+
VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass(
VkCommandBuffer cmdBuffer,
const VkRenderPassBeginInfo *pRenderPassBegin,
@@ -3373,6 +3386,8 @@
return (PFN_vkVoidFunction) vkCmdResetQueryPool;
if (!strcmp(funcName, "vkCreateRenderPass"))
return (PFN_vkVoidFunction) vkCreateRenderPass;
+ if (!strcmp(funcName, "vkDestroyRenderPass"))
+ return (PFN_vkVoidFunction) vkDestroyRenderPass;
if (!strcmp(funcName, "vkCmdBeginRenderPass"))
return (PFN_vkVoidFunction) vkCmdBeginRenderPass;
if (!strcmp(funcName, "vkCmdEndRenderPass"))