aboutsummaryrefslogtreecommitdiff
path: root/layers/core_validation.cpp
diff options
context:
space:
mode:
authorMark Lobodzinski <mark@lunarg.com>2017-02-06 10:22:26 -0700
committerMark Lobodzinski <mark@lunarg.com>2017-02-07 14:02:48 -0700
commitd2518b09656bca5200d8e020dfcdb3a6783d8ebe (patch)
treed96b80ab4da8c21f390c1c728ecec4a85a6ac981 /layers/core_validation.cpp
parenta6fe6f6b98dced9c1d43a048321fa79ad7fb0feb (diff)
downloadusermoji-d2518b09656bca5200d8e020dfcdb3a6783d8ebe.tar.xz
layers: Refactor CmdResolveImage for PreCalls
Moved validation and state updates into separate helper functions. Change-Id: I496d2e4e97f7c58372ebe51dcc4c4f10e456a5f2
Diffstat (limited to 'layers/core_validation.cpp')
-rw-r--r--layers/core_validation.cpp60
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);
}