aboutsummaryrefslogtreecommitdiff
path: root/layers/buffer_validation.cpp
diff options
context:
space:
mode:
authorMark Lobodzinski <mark@lunarg.com>2017-02-09 13:06:56 -0700
committerMark Lobodzinski <mark@lunarg.com>2017-02-10 12:15:31 -0700
commit36c21d094bf432258fc4e6b8acc049ba0afcb9e9 (patch)
tree596ec830c7196d6614147e88f1badc4814e4c1de /layers/buffer_validation.cpp
parentdd642605b9a8cff0de2c575d327c9952799b8cd0 (diff)
downloadusermoji-36c21d094bf432258fc4e6b8acc049ba0afcb9e9.tar.xz
layers: Refactor CmdCopyBuffer for pre-post style
Change-Id: Ic0004cad00ba04295e8c05a703a085e07d3ad56e
Diffstat (limited to 'layers/buffer_validation.cpp')
-rw-r--r--layers/buffer_validation.cpp31
1 files changed, 31 insertions, 0 deletions
diff --git a/layers/buffer_validation.cpp b/layers/buffer_validation.cpp
index 9e882b66..bb13fe8a 100644
--- a/layers/buffer_validation.cpp
+++ b/layers/buffer_validation.cpp
@@ -2275,4 +2275,35 @@ void PostCallRecordCreateImageView(layer_data *device_data, const VkImageViewCre
GetImageState(device_data, create_info->image));
}
+bool PreCallValidateCmdCopyBuffer(layer_data *device_data, GLOBAL_CB_NODE *cb_node, BUFFER_STATE *src_buffer_state,
+ BUFFER_STATE *dst_buffer_state) {
+ bool skip = false;
+ skip |= ValidateMemoryIsBoundToBuffer(device_data, src_buffer_state, "vkCmdCopyBuffer()", VALIDATION_ERROR_02531);
+ skip |= ValidateMemoryIsBoundToBuffer(device_data, dst_buffer_state, "vkCmdCopyBuffer()", VALIDATION_ERROR_02532);
+ // Validate that SRC & DST buffers have correct usage flags set
+ skip |= ValidateBufferUsageFlags(device_data, src_buffer_state, VK_BUFFER_USAGE_TRANSFER_SRC_BIT, true, VALIDATION_ERROR_01164,
+ "vkCmdCopyBuffer()", "VK_BUFFER_USAGE_TRANSFER_SRC_BIT");
+ skip |= ValidateBufferUsageFlags(device_data, dst_buffer_state, VK_BUFFER_USAGE_TRANSFER_DST_BIT, true, VALIDATION_ERROR_01165,
+ "vkCmdCopyBuffer()", "VK_BUFFER_USAGE_TRANSFER_DST_BIT");
+ skip |= ValidateCmd(device_data, cb_node, CMD_COPYBUFFER, "vkCmdCopyBuffer()");
+ skip |= insideRenderPass(device_data, cb_node, "vkCmdCopyBuffer()", VALIDATION_ERROR_01172);
+ return skip;
+}
+void PreCallRecordCmdCopyBuffer(layer_data *device_data, GLOBAL_CB_NODE *cb_node, BUFFER_STATE *src_buffer_state,
+ BUFFER_STATE *dst_buffer_state) {
+ // Update bindings between buffers and cmd buffer
+ AddCommandBufferBindingBuffer(device_data, cb_node, src_buffer_state);
+ AddCommandBufferBindingBuffer(device_data, cb_node, dst_buffer_state);
+
+ std::function<bool()> function = [=]() {
+ return ValidateBufferMemoryIsValid(device_data, src_buffer_state, "vkCmdCopyBuffer()");
+ };
+ cb_node->validate_functions.push_back(function);
+ function = [=]() {
+ SetBufferMemoryValid(device_data, dst_buffer_state, true);
+ return false;
+ };
+ cb_node->validate_functions.push_back(function);
+ core_validation::UpdateCmdBufferLastCmd(cb_node, CMD_COPYBUFFER);
+}