aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Lobodzinski <mark@lunarg.com>2016-02-04 16:09:12 -0700
committerMark Lobodzinski <mark@lunarg.com>2016-02-04 16:09:12 -0700
commit54def46e3669be514d85da2e0847d87414dfb777 (patch)
tree23f91328621d633dfeb344babf5a866548f081a2
parent13cc3e7254bad900fd430c2c853af6163fe9ac23 (diff)
downloadusermoji-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.cpp15
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"))