aboutsummaryrefslogtreecommitdiff
path: root/layers/buffer_validation.cpp
diff options
context:
space:
mode:
authorMark Lobodzinski <mark@lunarg.com>2017-02-15 13:58:23 -0700
committerMark Lobodzinski <mark@lunarg.com>2017-02-16 13:40:19 -0700
commitb8387e8d8ab1d86d6c7830614e3f265e4f7153e2 (patch)
tree20e895554e708672505a342ad007c587d183ef12 /layers/buffer_validation.cpp
parente0d8f6d133d3ce72483d3cc6a31aa6adbb97cb23 (diff)
downloadusermoji-b8387e8d8ab1d86d6c7830614e3f265e4f7153e2.tar.xz
layers: Separate val/state updates in buff-img copy
Moved state updates out of precallvalidate routines into precallrecord routines. Change-Id: If13e8a14cabc2b63a53f5369c33b1e632b15ff3a
Diffstat (limited to 'layers/buffer_validation.cpp')
-rw-r--r--layers/buffer_validation.cpp52
1 files changed, 31 insertions, 21 deletions
diff --git a/layers/buffer_validation.cpp b/layers/buffer_validation.cpp
index 9bec0381..cb8bc2a7 100644
--- a/layers/buffer_validation.cpp
+++ b/layers/buffer_validation.cpp
@@ -2742,14 +2742,28 @@ bool PreCallValidateCmdCopyImageToBuffer(layer_data *device_data, VkImageLayout
VALIDATION_ERROR_01249);
skip |= ValidateMemoryIsBoundToImage(device_data, src_image_state, "vkCmdCopyImageToBuffer()", VALIDATION_ERROR_02537);
skip |= ValidateMemoryIsBoundToBuffer(device_data, dst_buff_state, "vkCmdCopyImageToBuffer()", VALIDATION_ERROR_02538);
- // Update bindings between buffer/image and cmd buffer
- AddCommandBufferBindingImage(device_data, cb_node, src_image_state);
- AddCommandBufferBindingBuffer(device_data, cb_node, dst_buff_state);
+
// Validate that SRC image & DST buffer have correct usage flags set
skip |= ValidateImageUsageFlags(device_data, src_image_state, VK_IMAGE_USAGE_TRANSFER_SRC_BIT, true, VALIDATION_ERROR_01248,
"vkCmdCopyImageToBuffer()", "VK_IMAGE_USAGE_TRANSFER_SRC_BIT");
skip |= ValidateBufferUsageFlags(device_data, dst_buff_state, VK_BUFFER_USAGE_TRANSFER_DST_BIT, true, VALIDATION_ERROR_01252,
"vkCmdCopyImageToBuffer()", "VK_BUFFER_USAGE_TRANSFER_DST_BIT");
+ skip |= insideRenderPass(device_data, cb_node, "vkCmdCopyImageToBuffer()", VALIDATION_ERROR_01260);
+ for (uint32_t i = 0; i < regionCount; ++i) {
+ skip |= VerifySourceImageLayout(device_data, cb_node, src_image_state->image, pRegions[i].imageSubresource, srcImageLayout,
+ VALIDATION_ERROR_01251);
+ skip |= ValidateCopyBufferImageTransferGranularityRequirements(device_data, cb_node, src_image_state, &pRegions[i], i,
+ "CmdCopyImageToBuffer");
+ }
+ return skip;
+}
+
+void PreCallRecordCmdCopyImageToBuffer(layer_data *device_data, GLOBAL_CB_NODE *cb_node, IMAGE_STATE *src_image_state,
+ BUFFER_STATE *dst_buff_state) {
+ // Update bindings between buffer/image and cmd buffer
+ AddCommandBufferBindingImage(device_data, cb_node, src_image_state);
+ AddCommandBufferBindingBuffer(device_data, cb_node, dst_buff_state);
+
std::function<bool()> function = [=]() {
return ValidateImageMemoryIsValid(device_data, src_image_state, "vkCmdCopyImageToBuffer()");
};
@@ -2761,14 +2775,6 @@ bool PreCallValidateCmdCopyImageToBuffer(layer_data *device_data, VkImageLayout
cb_node->validate_functions.push_back(function);
core_validation::UpdateCmdBufferLastCmd(cb_node, CMD_COPYIMAGETOBUFFER);
- skip |= insideRenderPass(device_data, cb_node, "vkCmdCopyImageToBuffer()", VALIDATION_ERROR_01260);
- for (uint32_t i = 0; i < regionCount; ++i) {
- skip |= VerifySourceImageLayout(device_data, cb_node, src_image_state->image, pRegions[i].imageSubresource, srcImageLayout,
- VALIDATION_ERROR_01251);
- skip |= ValidateCopyBufferImageTransferGranularityRequirements(device_data, cb_node, src_image_state, &pRegions[i], i,
- "CmdCopyImageToBuffer");
- }
- return skip;
}
bool PreCallValidateCmdCopyBufferToImage(layer_data *device_data, VkImageLayout dstImageLayout, GLOBAL_CB_NODE *cb_node,
@@ -2805,12 +2811,24 @@ bool PreCallValidateCmdCopyBufferToImage(layer_data *device_data, VkImageLayout
VALIDATION_ERROR_01232);
skip |= ValidateMemoryIsBoundToBuffer(device_data, src_buff_state, "vkCmdCopyBufferToImage()", VALIDATION_ERROR_02535);
skip |= ValidateMemoryIsBoundToImage(device_data, dst_image_state, "vkCmdCopyBufferToImage()", VALIDATION_ERROR_02536);
- AddCommandBufferBindingBuffer(device_data, cb_node, src_buff_state);
- AddCommandBufferBindingImage(device_data, cb_node, dst_image_state);
skip |= ValidateBufferUsageFlags(device_data, src_buff_state, VK_BUFFER_USAGE_TRANSFER_SRC_BIT, true, VALIDATION_ERROR_01230,
"vkCmdCopyBufferToImage()", "VK_BUFFER_USAGE_TRANSFER_SRC_BIT");
skip |= ValidateImageUsageFlags(device_data, dst_image_state, VK_IMAGE_USAGE_TRANSFER_DST_BIT, true, VALIDATION_ERROR_01231,
"vkCmdCopyBufferToImage()", "VK_IMAGE_USAGE_TRANSFER_DST_BIT");
+ skip |= insideRenderPass(device_data, cb_node, "vkCmdCopyBufferToImage()", VALIDATION_ERROR_01242);
+ for (uint32_t i = 0; i < regionCount; ++i) {
+ skip |= VerifyDestImageLayout(device_data, cb_node, dst_image_state->image, pRegions[i].imageSubresource, dstImageLayout,
+ VALIDATION_ERROR_01234);
+ skip |= ValidateCopyBufferImageTransferGranularityRequirements(device_data, cb_node, dst_image_state, &pRegions[i], i,
+ "vkCmdCopyBufferToImage()");
+ }
+ return skip;
+}
+
+void PreCallRecordCmdCopyBufferToImage(layer_data *device_data, GLOBAL_CB_NODE *cb_node, BUFFER_STATE *src_buff_state,
+ IMAGE_STATE *dst_image_state) {
+ AddCommandBufferBindingBuffer(device_data, cb_node, src_buff_state);
+ AddCommandBufferBindingImage(device_data, cb_node, dst_image_state);
std::function<bool()> function = [=]() {
SetImageMemoryValid(device_data, dst_image_state, true);
return false;
@@ -2820,12 +2838,4 @@ bool PreCallValidateCmdCopyBufferToImage(layer_data *device_data, VkImageLayout
cb_node->validate_functions.push_back(function);
core_validation::UpdateCmdBufferLastCmd(cb_node, CMD_COPYBUFFERTOIMAGE);
- skip |= insideRenderPass(device_data, cb_node, "vkCmdCopyBufferToImage()", VALIDATION_ERROR_01242);
- for (uint32_t i = 0; i < regionCount; ++i) {
- skip |= VerifyDestImageLayout(device_data, cb_node, dst_image_state->image, pRegions[i].imageSubresource, dstImageLayout,
- VALIDATION_ERROR_01234);
- skip |= ValidateCopyBufferImageTransferGranularityRequirements(device_data, cb_node, dst_image_state, &pRegions[i], i,
- "vkCmdCopyBufferToImage()");
- }
- return skip;
}