diff options
| author | Mark Lobodzinski <mark@lunarg.com> | 2017-02-06 10:07:21 -0700 |
|---|---|---|
| committer | Mark Lobodzinski <mark@lunarg.com> | 2017-02-07 14:02:48 -0700 |
| commit | a6fe6f6b98dced9c1d43a048321fa79ad7fb0feb (patch) | |
| tree | c6127548dd3a78c2795e3b8da321c79c5e080b04 /layers | |
| parent | 0a1845cb1116abfbe726c1d3007148373eb9b80b (diff) | |
| download | usermoji-a6fe6f6b98dced9c1d43a048321fa79ad7fb0feb.tar.xz | |
layers: Split CmdResolveImage val/state updates
Change-Id: I60b593da5f2863d7d0ac9c1d1785ff43d3179c6f
Diffstat (limited to 'layers')
| -rw-r--r-- | layers/core_validation.cpp | 34 |
1 files changed, 19 insertions, 15 deletions
diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp index ce66c54a..12194cb6 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<bool()> 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<bool()> 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) { |
