From 556d424dcdb39e76d8e5038e1256482df345b18a Mon Sep 17 00:00:00 2001 From: Tobin Ehlis Date: Tue, 28 Jun 2016 16:36:47 -0600 Subject: [PATCH] layers: Invalidate Cmd Buffers on DestroyBuffer When buffer is destroyed, any command buffers that it's bound to must be invalidated. --- layers/core_validation.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp index a32c0f4..a711b96 100644 --- a/layers/core_validation.cpp +++ b/layers/core_validation.cpp @@ -5177,9 +5177,8 @@ static void remove_memory_ranges(uint64_t handle, VkDeviceMemory mem, vector lock(global_lock); - if (!validateIdleBuffer(dev_data, buffer) && !skip_call) { + if (!validateIdleBuffer(dev_data, buffer)) { lock.unlock(); dev_data->device_dispatch_table->DestroyBuffer(device, buffer, pAllocator); lock.lock(); @@ -5187,6 +5186,9 @@ VKAPI_ATTR void VKAPI_CALL DestroyBuffer(VkDevice device, VkBuffer buffer, // Clean up memory binding and range information for buffer auto buff_node = getBufferNode(dev_data, buffer); if (buff_node) { + // Any bound cmd buffers are now invalid + invalidateCommandBuffers(buff_node->cb_bindings, + {reinterpret_cast(buff_node->buffer), VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT}); auto mem_info = getMemObjInfo(dev_data, buff_node->mem); if (mem_info) { remove_memory_ranges(reinterpret_cast(buffer), buff_node->mem, mem_info->bufferRanges); -- 2.7.4