From: Mark Lobodzinski Date: Mon, 6 Feb 2017 17:07:21 +0000 (-0700) Subject: layers: Split CmdResolveImage val/state updates X-Git-Tag: upstream/1.1.92~1633 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a6fe6f6b98dced9c1d43a048321fa79ad7fb0feb;p=platform%2Fupstream%2FVulkan-Tools.git layers: Split CmdResolveImage val/state updates Change-Id: I60b593da5f2863d7d0ac9c1d1785ff43d3179c6f --- diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp index ce66c54..12194cb 100644 --- a/layers/core_validation.cpp +++ b/layers/core_validation.cpp @@ -8446,32 +8446,36 @@ VKAPI_ATTR void VKAPI_CALL CmdResolveImage(VkCommandBuffer commandBuffer, VkImag auto cb_node = getCBNode(dev_data, commandBuffer); auto src_image_state = getImageState(dev_data, srcImage); auto dst_image_state = getImageState(dev_data, dstImage); + if (cb_node && src_image_state && dst_image_state) { skip |= ValidateMemoryIsBoundToImage(dev_data, src_image_state, "vkCmdResolveImage()", VALIDATION_ERROR_02541); skip |= ValidateMemoryIsBoundToImage(dev_data, dst_image_state, "vkCmdResolveImage()", VALIDATION_ERROR_02542); - // Update bindings between images and cmd buffer - AddCommandBufferBindingImage(dev_data, cb_node, src_image_state); - AddCommandBufferBindingImage(dev_data, cb_node, dst_image_state); - std::function function = [=]() { - return ValidateImageMemoryIsValid(dev_data, src_image_state, "vkCmdResolveImage()"); - }; - cb_node->validate_functions.push_back(function); - function = [=]() { - SetImageMemoryValid(dev_data, dst_image_state, true); - return false; - }; - cb_node->validate_functions.push_back(function); - skip |= ValidateCmd(dev_data, cb_node, CMD_RESOLVEIMAGE, "vkCmdResolveImage()"); - UpdateCmdBufferLastCmd(dev_data, cb_node, CMD_RESOLVEIMAGE); skip |= insideRenderPass(dev_data, cb_node, "vkCmdResolveImage()", VALIDATION_ERROR_01335); + + if (!skip) { + // Update bindings between images and cmd buffer + AddCommandBufferBindingImage(dev_data, cb_node, src_image_state); + AddCommandBufferBindingImage(dev_data, cb_node, dst_image_state); + std::function function = [=]() { + return ValidateImageMemoryIsValid(dev_data, src_image_state, "vkCmdResolveImage()"); + }; + cb_node->validate_functions.push_back(function); + function = [=]() { + SetImageMemoryValid(dev_data, dst_image_state, true); + return false; + }; + cb_node->validate_functions.push_back(function); + UpdateCmdBufferLastCmd(dev_data, cb_node, CMD_RESOLVEIMAGE); + } } else { assert(0); } lock.unlock(); - if (!skip) + if (!skip) { dev_data->dispatch_table.CmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions); + } } bool setEventStageMask(VkQueue queue, VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask) {