From: Tobin Ehlis Date: Thu, 7 Jul 2016 22:47:10 +0000 (-0600) Subject: layers: Set cmd buffer invalid on event destroy X-Git-Tag: upstream/1.1.92~2856 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4f43c5957650e7a8d9f93c0a629e0a97f9043d55;p=platform%2Fupstream%2FVulkan-Tools.git layers: Set cmd buffer invalid on event destroy When an event is destroyed, set any cmd buffers that it was bound to to the CB_INVALID state. Also added getEventNode() helper and made use of it where appropriate. --- diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp index 0ac409a..7ac018f 100644 --- a/layers/core_validation.cpp +++ b/layers/core_validation.cpp @@ -5048,10 +5048,10 @@ VKAPI_ATTR void VKAPI_CALL DestroyEvent(VkDevice device, VkEvent event, const Vk auto event_node = getEventNode(dev_data, event); if (event_node) { if (event_node->in_use.load()) { - skip_call |= - log_msg(dev_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT, - reinterpret_cast(event), __LINE__, DRAWSTATE_INVALID_EVENT, "DS", - "Cannot delete event 0x%" PRIx64 " which is in use by a command buffer.", reinterpret_cast(event)); + skip_call |= log_msg( + dev_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT, + reinterpret_cast(event), __LINE__, DRAWSTATE_INVALID_EVENT, "DS", + "Cannot delete event 0x%" PRIx64 " which is in use by a command buffer.", reinterpret_cast(event)); } // Any bound cmd buffers are now invalid invalidateCommandBuffers(event_node->cb_bindings, @@ -7713,8 +7713,12 @@ CmdSetEvent(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags s if (pCB) { skip_call |= addCmd(dev_data, pCB, CMD_SETEVENT, "vkCmdSetEvent()"); skip_call |= insideRenderPass(dev_data, pCB, "vkCmdSetEvent"); - addCommandBufferBinding(&getEventNode(dev_data, event)->cb_bindings, - {reinterpret_cast(event), VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT}, pCB); + auto event_node = getEventNode(dev_data, event); + if (event_node) { + addCommandBufferBinding(&event_node->cb_bindings, + {reinterpret_cast(event), VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT}, pCB); + event_node->cb_bindings.insert(pCB); + } pCB->events.push_back(event); if (!pCB->waitedEvents.count(event)) { pCB->writeEventsBeforeWait.push_back(event); @@ -7737,8 +7741,12 @@ CmdResetEvent(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags if (pCB) { skip_call |= addCmd(dev_data, pCB, CMD_RESETEVENT, "vkCmdResetEvent()"); skip_call |= insideRenderPass(dev_data, pCB, "vkCmdResetEvent"); - addCommandBufferBinding(&getEventNode(dev_data, event)->cb_bindings, - {reinterpret_cast(event), VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT}, pCB); + auto event_node = getEventNode(dev_data, event); + if (event_node) { + addCommandBufferBinding(&event_node->cb_bindings, + {reinterpret_cast(event), VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT}, pCB); + event_node->cb_bindings.insert(pCB); + } pCB->events.push_back(event); if (!pCB->waitedEvents.count(event)) { pCB->writeEventsBeforeWait.push_back(event); @@ -8132,8 +8140,13 @@ CmdWaitEvents(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent if (pCB) { auto firstEventIndex = pCB->events.size(); for (uint32_t i = 0; i < eventCount; ++i) { - addCommandBufferBinding(&getEventNode(dev_data, pEvents[i])->cb_bindings, - {reinterpret_cast(pEvents[i]), VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT}, pCB); + auto event_node = getEventNode(dev_data, pEvents[i]); + if (event_node) { + addCommandBufferBinding(&event_node->cb_bindings, + {reinterpret_cast(pEvents[i]), VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT}, + pCB); + event_node->cb_bindings.insert(pCB); + } pCB->waitedEvents.insert(pEvents[i]); pCB->events.push_back(pEvents[i]); }