diff options
| author | Mark Lobodzinski <mark@lunarg.com> | 2017-02-06 10:22:26 -0700 |
|---|---|---|
| committer | Mark Lobodzinski <mark@lunarg.com> | 2017-02-07 14:02:48 -0700 |
| commit | d2518b09656bca5200d8e020dfcdb3a6783d8ebe (patch) | |
| tree | d96b80ab4da8c21f390c1c728ecec4a85a6ac981 /layers | |
| parent | a6fe6f6b98dced9c1d43a048321fa79ad7fb0feb (diff) | |
| download | usermoji-d2518b09656bca5200d8e020dfcdb3a6783d8ebe.tar.xz | |
layers: Refactor CmdResolveImage for PreCalls
Moved validation and state updates into separate helper functions.
Change-Id: I496d2e4e97f7c58372ebe51dcc4c4f10e456a5f2
Diffstat (limited to 'layers')
| -rw-r--r-- | layers/core_validation.cpp | 60 |
1 files changed, 35 insertions, 25 deletions
diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp index 12194cb6..52431c25 100644 --- a/layers/core_validation.cpp +++ b/layers/core_validation.cpp @@ -8436,10 +8436,41 @@ VKAPI_ATTR void VKAPI_CALL CmdClearDepthStencilImage(VkCommandBuffer commandBuff } } +bool PreCallValidateCmdResolveImage(layer_data *device_data, GLOBAL_CB_NODE *cb_node, IMAGE_STATE *src_image_state, + IMAGE_STATE *dst_image_state) { + bool skip = false; + if (cb_node && src_image_state && dst_image_state) { + skip |= ValidateMemoryIsBoundToImage(device_data, src_image_state, "vkCmdResolveImage()", VALIDATION_ERROR_02541); + skip |= ValidateMemoryIsBoundToImage(device_data, dst_image_state, "vkCmdResolveImage()", VALIDATION_ERROR_02542); + skip |= ValidateCmd(device_data, cb_node, CMD_RESOLVEIMAGE, "vkCmdResolveImage()"); + skip |= insideRenderPass(device_data, cb_node, "vkCmdResolveImage()", VALIDATION_ERROR_01335); + } else { + assert(0); + } + return skip; +} + +void PreCallRecordCmdResolveImage(layer_data *device_data, GLOBAL_CB_NODE *cb_node, IMAGE_STATE *src_image_state, + IMAGE_STATE *dst_image_state) { + // Update bindings between images and cmd buffer + AddCommandBufferBindingImage(device_data, cb_node, src_image_state); + AddCommandBufferBindingImage(device_data, cb_node, dst_image_state); + + std::function<bool()> function = [=]() { + return ValidateImageMemoryIsValid(device_data, src_image_state, "vkCmdResolveImage()"); + }; + cb_node->validate_functions.push_back(function); + function = [=]() { + SetImageMemoryValid(device_data, dst_image_state, true); + return false; + }; + cb_node->validate_functions.push_back(function); + UpdateCmdBufferLastCmd(device_data, cb_node, CMD_RESOLVEIMAGE); +} + VKAPI_ATTR void VKAPI_CALL CmdResolveImage(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageResolve *pRegions) { - bool skip = false; layer_data *dev_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); std::unique_lock<std::mutex> lock(global_lock); @@ -8447,32 +8478,11 @@ VKAPI_ATTR void VKAPI_CALL CmdResolveImage(VkCommandBuffer commandBuffer, VkImag 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); - skip |= ValidateCmd(dev_data, cb_node, CMD_RESOLVEIMAGE, "vkCmdResolveImage()"); - skip |= insideRenderPass(dev_data, cb_node, "vkCmdResolveImage()", VALIDATION_ERROR_01335); + bool skip = PreCallValidateCmdResolveImage(dev_data, cb_node, src_image_state, dst_image_state); - 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) { + PreCallRecordCmdResolveImage(dev_data, cb_node, src_image_state, dst_image_state); + lock.unlock(); dev_data->dispatch_table.CmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions); } |
