From 54def46e3669be514d85da2e0847d87414dfb777 Mon Sep 17 00:00:00 2001 From: Mark Lobodzinski Date: Thu, 4 Feb 2016 16:09:12 -0700 Subject: 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. --- layers/mem_tracker.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/layers/mem_tracker.cpp b/layers/mem_tracker.cpp index debcc05d..acb2775d 100644 --- a/layers/mem_tracker.cpp +++ b/layers/mem_tracker.cpp @@ -3167,6 +3167,19 @@ VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass( 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 @@ VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetDeviceProcAddr( 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")) -- cgit v1.2.3