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/core_validation.cpp | |
| parent | dd642605b9a8cff0de2c575d327c9952799b8cd0 (diff) | |
| download | usermoji-36c21d094bf432258fc4e6b8acc049ba0afcb9e9.tar.xz | |
layers: Refactor CmdCopyBuffer for pre-post style
Change-Id: Ic0004cad00ba04295e8c05a703a085e07d3ad56e
Diffstat (limited to 'layers/core_validation.cpp')
| -rw-r--r-- | layers/core_validation.cpp | 48 |
1 files changed, 14 insertions, 34 deletions
diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp index 2f5ef4fb..3080c26d 100644 --- a/layers/core_validation.cpp +++ b/layers/core_validation.cpp @@ -519,7 +519,7 @@ bool ValidateImageMemoryIsValid(layer_data *dev_data, IMAGE_STATE *image_state, return false; } // For given buffer_state, verify that the range it's bound to is valid -static bool ValidateBufferMemoryIsValid(layer_data *dev_data, BUFFER_STATE *buffer_state, const char *functionName) { +bool ValidateBufferMemoryIsValid(layer_data *dev_data, BUFFER_STATE *buffer_state, const char *functionName) { return ValidateMemoryIsValid(dev_data, buffer_state->binding.mem, reinterpret_cast<uint64_t &>(buffer_state->buffer), VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, functionName); } @@ -541,7 +541,7 @@ void SetImageMemoryValid(layer_data *dev_data, IMAGE_STATE *image_state, bool va } } // For given buffer node set the buffer's bound memory range to valid param value -static void SetBufferMemoryValid(layer_data *dev_data, BUFFER_STATE *buffer_state, bool valid) { +void SetBufferMemoryValid(layer_data *dev_data, BUFFER_STATE *buffer_state, bool valid) { SetMemoryValid(dev_data, buffer_state->binding.mem, reinterpret_cast<uint64_t &>(buffer_state->buffer), valid); } // Find CB Info and add mem reference to list container @@ -7571,44 +7571,24 @@ VKAPI_ATTR void VKAPI_CALL CmdDispatchIndirect(VkCommandBuffer commandBuffer, Vk VKAPI_ATTR void VKAPI_CALL CmdCopyBuffer(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferCopy *pRegions) { - bool skip_call = false; - layer_data *dev_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map); + layer_data *device_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map); std::unique_lock<std::mutex> lock(global_lock); - auto cb_node = GetCBNode(dev_data, commandBuffer); - auto src_buff_state = GetBufferState(dev_data, srcBuffer); - auto dst_buff_state = GetBufferState(dev_data, dstBuffer); - if (cb_node && src_buff_state && dst_buff_state) { - skip_call |= ValidateMemoryIsBoundToBuffer(dev_data, src_buff_state, "vkCmdCopyBuffer()", VALIDATION_ERROR_02531); - skip_call |= ValidateMemoryIsBoundToBuffer(dev_data, dst_buff_state, "vkCmdCopyBuffer()", VALIDATION_ERROR_02532); - // Update bindings between buffers and cmd buffer - AddCommandBufferBindingBuffer(dev_data, cb_node, src_buff_state); - AddCommandBufferBindingBuffer(dev_data, cb_node, dst_buff_state); - // Validate that SRC & DST buffers have correct usage flags set - skip_call |= ValidateBufferUsageFlags(dev_data, src_buff_state, VK_BUFFER_USAGE_TRANSFER_SRC_BIT, true, - VALIDATION_ERROR_01164, "vkCmdCopyBuffer()", "VK_BUFFER_USAGE_TRANSFER_SRC_BIT"); - skip_call |= ValidateBufferUsageFlags(dev_data, dst_buff_state, VK_BUFFER_USAGE_TRANSFER_DST_BIT, true, - VALIDATION_ERROR_01165, "vkCmdCopyBuffer()", "VK_BUFFER_USAGE_TRANSFER_DST_BIT"); - - std::function<bool()> function = [=]() { - return ValidateBufferMemoryIsValid(dev_data, src_buff_state, "vkCmdCopyBuffer()"); - }; - cb_node->validate_functions.push_back(function); - function = [=]() { - SetBufferMemoryValid(dev_data, dst_buff_state, true); - return false; - }; - cb_node->validate_functions.push_back(function); + auto cb_node = GetCBNode(device_data, commandBuffer); + auto src_buffer_state = GetBufferState(device_data, srcBuffer); + auto dst_buffer_state = GetBufferState(device_data, dstBuffer); - skip_call |= ValidateCmd(dev_data, cb_node, CMD_COPYBUFFER, "vkCmdCopyBuffer()"); - UpdateCmdBufferLastCmd(cb_node, CMD_COPYBUFFER); - skip_call |= insideRenderPass(dev_data, cb_node, "vkCmdCopyBuffer()", VALIDATION_ERROR_01172); + if (cb_node && src_buffer_state && dst_buffer_state) { + bool skip = PreCallValidateCmdCopyBuffer(device_data, cb_node, src_buffer_state, dst_buffer_state); + if (!skip) { + PreCallRecordCmdCopyBuffer(device_data, cb_node, src_buffer_state, dst_buffer_state); + lock.unlock(); + device_data->dispatch_table.CmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions); + } } else { - // Param_checker will flag errors on invalid objects, just assert here as debugging aid + lock.unlock(); assert(0); } - lock.unlock(); - if (!skip_call) dev_data->dispatch_table.CmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions); } VKAPI_ATTR void VKAPI_CALL CmdCopyImage(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, |
