diff options
| author | Mark Lobodzinski <mark@lunarg.com> | 2016-02-04 16:09:12 -0700 |
|---|---|---|
| committer | Mark Lobodzinski <mark@lunarg.com> | 2016-02-04 16:09:12 -0700 |
| commit | 54def46e3669be514d85da2e0847d87414dfb777 (patch) | |
| tree | 23f91328621d633dfeb344babf5a866548f081a2 | |
| parent | 13cc3e7254bad900fd430c2c853af6163fe9ac23 (diff) | |
| download | usermoji-54def46e3669be514d85da2e0847d87414dfb777.tar.xz | |
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.
| -rw-r--r-- | layers/mem_tracker.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
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")) |
