diff options
| author | Mark Lobodzinski <mark@lunarg.com> | 2017-02-09 13:06:56 -0700 |
|---|---|---|
| committer | Mark Lobodzinski <mark@lunarg.com> | 2017-02-10 12:15:31 -0700 |
| commit | 36c21d094bf432258fc4e6b8acc049ba0afcb9e9 (patch) | |
| tree | 596ec830c7196d6614147e88f1badc4814e4c1de /layers/buffer_validation.cpp | |
| parent | dd642605b9a8cff0de2c575d327c9952799b8cd0 (diff) | |
| download | usermoji-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.cpp | 31 |
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); +} |
