aboutsummaryrefslogtreecommitdiff
path: root/layers/core_validation.cpp
diff options
context:
space:
mode:
authorChris Forbes <chrisforbes@google.com>2017-06-12 12:41:47 -0700
committerChris Forbes <chrisf@ijw.co.nz>2017-06-12 14:38:54 -0700
commitd9fd531293806b6a9c4b2437cfad4ff0cd0fc72e (patch)
treed3fcc848288b133e67c4693c6130a72ff21ed8cc /layers/core_validation.cpp
parent391903a90b384770ab0038a733b801b69e8cb121 (diff)
downloadusermoji-d9fd531293806b6a9c4b2437cfad4ff0cd0fc72e.tar.xz
layers: Untangle validate & update of CmdBeginQuery
Diffstat (limited to 'layers/core_validation.cpp')
-rw-r--r--layers/core_validation.cpp21
1 files changed, 13 insertions, 8 deletions
diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp
index 0d178599..41c03ed8 100644
--- a/layers/core_validation.cpp
+++ b/layers/core_validation.cpp
@@ -6508,7 +6508,7 @@ VKAPI_ATTR void VKAPI_CALL CmdPipelineBarrier(VkCommandBuffer commandBuffer, VkP
}
}
-bool setQueryState(VkQueue queue, VkCommandBuffer commandBuffer, QueryObject object, bool value) {
+static bool setQueryState(VkQueue queue, VkCommandBuffer commandBuffer, QueryObject object, bool value) {
layer_data *dev_data = GetLayerDataPtr(get_dispatch_key(commandBuffer), layer_data_map);
GLOBAL_CB_NODE *pCB = GetCBNode(dev_data, commandBuffer);
if (pCB) {
@@ -6527,20 +6527,25 @@ VKAPI_ATTR void VKAPI_CALL CmdBeginQuery(VkCommandBuffer commandBuffer, VkQueryP
std::unique_lock<std::mutex> lock(global_lock);
GLOBAL_CB_NODE *pCB = GetCBNode(dev_data, commandBuffer);
if (pCB) {
- QueryObject query = {queryPool, slot};
- pCB->activeQueries.insert(query);
- if (!pCB->startedQueries.count(query)) {
- pCB->startedQueries.insert(query);
- }
skip |= ValidateCmdQueueFlags(dev_data, pCB, "vkCmdBeginQuery()", VK_QUEUE_GRAPHICS_BIT | VK_QUEUE_COMPUTE_BIT,
VALIDATION_ERROR_17802415);
skip |= ValidateCmd(dev_data, pCB, CMD_BEGINQUERY, "vkCmdBeginQuery()");
+ }
+ lock.unlock();
+
+ if (skip) return;
+
+ dev_data->dispatch_table.CmdBeginQuery(commandBuffer, queryPool, slot, flags);
+
+ lock.lock();
+ if (pCB) {
+ QueryObject query = {queryPool, slot};
+ pCB->activeQueries.insert(query);
+ pCB->startedQueries.insert(query);
UpdateCmdBufferLastCmd(pCB, CMD_BEGINQUERY);
addCommandBufferBinding(&GetQueryPoolNode(dev_data, queryPool)->cb_bindings,
{HandleToUint64(queryPool), kVulkanObjectTypeQueryPool}, pCB);
}
- lock.unlock();
- if (!skip) dev_data->dispatch_table.CmdBeginQuery(commandBuffer, queryPool, slot, flags);
}
VKAPI_ATTR void VKAPI_CALL CmdEndQuery(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t slot) {