aboutsummaryrefslogtreecommitdiff
path: root/layers/core_validation.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'layers/core_validation.cpp')
-rw-r--r--layers/core_validation.cpp32
1 files changed, 17 insertions, 15 deletions
diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp
index f50e6b72..439158be 100644
--- a/layers/core_validation.cpp
+++ b/layers/core_validation.cpp
@@ -6649,34 +6649,36 @@ VKAPI_ATTR void VKAPI_CALL CmdCopyQueryPoolResults(VkCommandBuffer commandBuffer
auto dst_buff_state = GetBufferState(dev_data, dstBuffer);
if (cb_node && dst_buff_state) {
skip |= ValidateMemoryIsBoundToBuffer(dev_data, dst_buff_state, "vkCmdCopyQueryPoolResults()", VALIDATION_ERROR_19400674);
- // Update bindings between buffer and cmd buffer
- AddCommandBufferBindingBuffer(dev_data, cb_node, dst_buff_state);
// Validate that DST buffer has correct usage flags set
skip |=
ValidateBufferUsageFlags(dev_data, dst_buff_state, VK_BUFFER_USAGE_TRANSFER_DST_BIT, true, VALIDATION_ERROR_19400672,
"vkCmdCopyQueryPoolResults()", "VK_BUFFER_USAGE_TRANSFER_DST_BIT");
- std::function<bool()> function = [=]() {
+ skip |= ValidateCmdQueueFlags(dev_data, cb_node, "vkCmdCopyQueryPoolResults()",
+ VK_QUEUE_GRAPHICS_BIT | VK_QUEUE_COMPUTE_BIT, VALIDATION_ERROR_19402415);
+ skip |= ValidateCmd(dev_data, cb_node, CMD_COPYQUERYPOOLRESULTS, "vkCmdCopyQueryPoolResults()");
+ skip |= insideRenderPass(dev_data, cb_node, "vkCmdCopyQueryPoolResults()", VALIDATION_ERROR_19400017);
+ }
+ lock.unlock();
+
+ if (skip) return;
+
+ dev_data->dispatch_table.CmdCopyQueryPoolResults(commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset,
+ stride, flags);
+
+ lock.lock();
+ if (cb_node && dst_buff_state) {
+ AddCommandBufferBindingBuffer(dev_data, cb_node, dst_buff_state);
+ cb_node->validate_functions.emplace_back([=]() {
SetBufferMemoryValid(dev_data, dst_buff_state, true);
return false;
- };
- cb_node->validate_functions.push_back(function);
+ });
cb_node->queryUpdates.emplace_back([=](VkQueue q) {
return validateQuery(q, cb_node, queryPool, firstQuery, queryCount);
});
- skip |= ValidateCmdQueueFlags(dev_data, cb_node, "vkCmdCopyQueryPoolResults()",
- VK_QUEUE_GRAPHICS_BIT | VK_QUEUE_COMPUTE_BIT, VALIDATION_ERROR_19402415);
- skip |= ValidateCmd(dev_data, cb_node, CMD_COPYQUERYPOOLRESULTS, "vkCmdCopyQueryPoolResults()");
UpdateCmdBufferLastCmd(cb_node, CMD_COPYQUERYPOOLRESULTS);
- skip |= insideRenderPass(dev_data, cb_node, "vkCmdCopyQueryPoolResults()", VALIDATION_ERROR_19400017);
addCommandBufferBinding(&GetQueryPoolNode(dev_data, queryPool)->cb_bindings,
{HandleToUint64(queryPool), kVulkanObjectTypeQueryPool}, cb_node);
- } else {
- assert(0);
}
- lock.unlock();
- if (!skip)
- dev_data->dispatch_table.CmdCopyQueryPoolResults(commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset,
- stride, flags);
}
VKAPI_ATTR void VKAPI_CALL CmdPushConstants(VkCommandBuffer commandBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags,