From 152d130d1925642665e38a77deae8eb78706723c Mon Sep 17 00:00:00 2001 From: Chris Forbes Date: Tue, 8 Aug 2017 17:35:51 -0700 Subject: layers: Untangle side effects in CmdWaitEvents --- layers/core_validation.cpp | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp index 2446033b..2e33a9e5 100644 --- a/layers/core_validation.cpp +++ b/layers/core_validation.cpp @@ -6739,29 +6739,29 @@ VKAPI_ATTR void VKAPI_CALL CmdWaitEvents(VkCommandBuffer commandBuffer, uint32_t VALIDATION_ERROR_1e600912); skip |= ValidateStageMaskGsTsEnables(dev_data, dstStageMask, "vkCmdWaitEvents()", VALIDATION_ERROR_1e600910, VALIDATION_ERROR_1e600914); - auto first_event_index = cb_state->events.size(); - for (uint32_t i = 0; i < eventCount; ++i) { - auto event_state = GetEventNode(dev_data, pEvents[i]); - if (event_state) { - addCommandBufferBinding(&event_state->cb_bindings, {HandleToUint64(pEvents[i]), kVulkanObjectTypeEvent}, cb_state); - event_state->cb_bindings.insert(cb_state); - } - cb_state->waitedEvents.insert(pEvents[i]); - cb_state->events.push_back(pEvents[i]); - } - cb_state->eventUpdates.emplace_back([=](VkQueue q){ - return validateEventStageMask(q, cb_state, eventCount, first_event_index, sourceStageMask); - }); skip |= ValidateCmdQueueFlags(dev_data, cb_state, "vkCmdWaitEvents()", VK_QUEUE_GRAPHICS_BIT | VK_QUEUE_COMPUTE_BIT, VALIDATION_ERROR_1e602415); skip |= ValidateCmd(dev_data, cb_state, CMD_WAITEVENTS, "vkCmdWaitEvents()"); skip |= ValidateBarriersToImages(dev_data, cb_state, imageMemoryBarrierCount, pImageMemoryBarriers, "vkCmdWaitEvents()"); - if (!skip) { - TransitionImageLayouts(dev_data, commandBuffer, imageMemoryBarrierCount, pImageMemoryBarriers); - } skip |= ValidateBarriers(dev_data, "vkCmdWaitEvents()", cb_state, sourceStageMask, dstStageMask, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers); + if (!skip) { + auto first_event_index = cb_state->events.size(); + for (uint32_t i = 0; i < eventCount; ++i) { + auto event_state = GetEventNode(dev_data, pEvents[i]); + if (event_state) { + addCommandBufferBinding(&event_state->cb_bindings, {HandleToUint64(pEvents[i]), kVulkanObjectTypeEvent}, cb_state); + event_state->cb_bindings.insert(cb_state); + } + cb_state->waitedEvents.insert(pEvents[i]); + cb_state->events.push_back(pEvents[i]); + } + cb_state->eventUpdates.emplace_back([=](VkQueue q){ + return validateEventStageMask(q, cb_state, eventCount, first_event_index, sourceStageMask); + }); + TransitionImageLayouts(dev_data, commandBuffer, imageMemoryBarrierCount, pImageMemoryBarriers); + } } lock.unlock(); if (!skip) -- cgit v1.2.3