From 7832b888e612d1599be11fdebc062a0c87da42cf Mon Sep 17 00:00:00 2001 From: Tobin Ehlis Date: Fri, 22 Jul 2016 16:55:19 -0600 Subject: layers: Fix bug in cmd buffer framebuffer binding If cmd buffers were freed via DestroyCommandPool, then the framebuffer links to the individual cb_nodes were not getting cleared. Fix that issue. This is initial, simple solution to avoid crash, need smarter solution long-term. --- layers/core_validation.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp index d034d4d4..6a07f71b 100644 --- a/layers/core_validation.cpp +++ b/layers/core_validation.cpp @@ -5643,9 +5643,16 @@ DestroyCommandPool(VkDevice device, VkCommandPool commandPool, const VkAllocatio for (auto cb : pPool->commandBuffers) { clear_cmd_buf_and_mem_references(dev_data, cb); auto cb_node = getCBNode(dev_data, cb); + // Remove references to this cb_node prior to delete + // TODO : Need better solution here, resetCB? for (auto obj : cb_node->object_bindings) { removeCommandBufferBinding(dev_data, &obj, cb_node); } + for (auto framebuffer : cb_node->framebuffers) { + auto fb_node = getFramebuffer(dev_data, framebuffer); + if (fb_node) + fb_node->cb_bindings.erase(cb_node); + } dev_data->commandBufferMap.erase(cb); // Remove this command buffer delete cb_node; // delete CB info structure } -- cgit v1.2.3