diff options
| author | Mark Lobodzinski <mark@lunarg.com> | 2017-02-10 14:01:27 -0700 |
|---|---|---|
| committer | Mark Lobodzinski <mark@lunarg.com> | 2017-02-13 10:00:42 -0700 |
| commit | 99a86825c8b22db7d9727678befffe8ab94a251c (patch) | |
| tree | 4fb2d20652a5572a9769dda9aa29e0ee7bc4ef0a /layers/buffer_validation.cpp | |
| parent | b2e72ae4b7d70e0853ae565587e077b62acf8ad7 (diff) | |
| download | usermoji-99a86825c8b22db7d9727678befffe8ab94a251c.tar.xz | |
layers: Refactor CmdFillBuffer
Separated validation from state updates, refactored for pre/post
and moved these functions out of core_validation. Also updated for
coding style.
Change-Id: I9b24bc8c951fd1df99a65db5fa8f1d0412488192
Diffstat (limited to 'layers/buffer_validation.cpp')
| -rw-r--r-- | layers/buffer_validation.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/layers/buffer_validation.cpp b/layers/buffer_validation.cpp index 695290da..bd65e47c 100644 --- a/layers/buffer_validation.cpp +++ b/layers/buffer_validation.cpp @@ -2384,3 +2384,25 @@ void PostCallRecordDestroyBufferView(layer_data *device_data, VkBufferView buffe invalidateCommandBuffers(device_data, buffer_view_state->cb_bindings, obj_struct); GetBufferViewMap(device_data)->erase(buffer_view); } + +bool PreCallValidateCmdFillBuffer(layer_data *device_data, GLOBAL_CB_NODE *cb_node, BUFFER_STATE *buffer_state) { + bool skip = false; + skip |= ValidateMemoryIsBoundToBuffer(device_data, buffer_state, "vkCmdFillBuffer()", VALIDATION_ERROR_02529); + skip |= ValidateCmd(device_data, cb_node, CMD_FILLBUFFER, "vkCmdFillBuffer()"); + // Validate that DST buffer has correct usage flags set + skip |= ValidateBufferUsageFlags(device_data, buffer_state, VK_BUFFER_USAGE_TRANSFER_DST_BIT, true, VALIDATION_ERROR_01137, + "vkCmdFillBuffer()", "VK_BUFFER_USAGE_TRANSFER_DST_BIT"); + skip |= insideRenderPass(device_data, cb_node, "vkCmdFillBuffer()", VALIDATION_ERROR_01142); + return skip; +} + +void PreCallRecordCmdFillBuffer(layer_data *device_data, GLOBAL_CB_NODE *cb_node, BUFFER_STATE *buffer_state) { + std::function<bool()> function = [=]() { + SetBufferMemoryValid(device_data, buffer_state, true); + return false; + }; + cb_node->validate_functions.push_back(function); + // Update bindings between buffer and cmd buffer + AddCommandBufferBindingBuffer(device_data, cb_node, buffer_state); + core_validation::UpdateCmdBufferLastCmd(cb_node, CMD_FILLBUFFER); +} |
