aboutsummaryrefslogtreecommitdiff
path: root/layers/core_validation.cpp
diff options
context:
space:
mode:
authorChris Forbes <chrisforbes@google.com>2017-06-12 11:30:24 -0700
committerChris Forbes <chrisf@ijw.co.nz>2017-06-12 14:38:54 -0700
commit7aea87425498874492c664a9cb77140c3827b081 (patch)
treebc7d7c2ab4e9821f4ea1c60a2a2520f3a9632e96 /layers/core_validation.cpp
parent70899db351f40ae0b4d2cc1229f34a355ba9e729 (diff)
downloadusermoji-7aea87425498874492c664a9cb77140c3827b081.tar.xz
layers: Untangle validateQuery some
Diffstat (limited to 'layers/core_validation.cpp')
-rw-r--r--layers/core_validation.cpp39
1 files changed, 18 insertions, 21 deletions
diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp
index f63eb9ab..c484bcec 100644
--- a/layers/core_validation.cpp
+++ b/layers/core_validation.cpp
@@ -6604,30 +6604,27 @@ VKAPI_ATTR void VKAPI_CALL CmdResetQueryPool(VkCommandBuffer commandBuffer, VkQu
{HandleToUint64(queryPool), kVulkanObjectTypeQueryPool}, cb_state);
}
-bool validateQuery(VkQueue queue, GLOBAL_CB_NODE *pCB, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount) {
+static bool IsQueryInvalid(layer_data *dev_data, QUEUE_STATE *queue_data, VkQueryPool queryPool, uint32_t queryIndex) {
+ QueryObject query = {queryPool, queryIndex};
+ auto query_data = queue_data->queryToStateMap.find(query);
+ if (query_data != queue_data->queryToStateMap.end()) {
+ if (!query_data->second) return true;
+ } else {
+ auto it = dev_data->queryToStateMap.find(query);
+ if (it == dev_data->queryToStateMap.end() || !it->second)
+ return true;
+ }
+
+ return false;
+}
+
+static bool validateQuery(VkQueue queue, GLOBAL_CB_NODE *pCB, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount) {
bool skip = false;
layer_data *dev_data = GetLayerDataPtr(get_dispatch_key(pCB->commandBuffer), layer_data_map);
- auto queue_data = dev_data->queueMap.find(queue);
- if (queue_data == dev_data->queueMap.end()) return false;
+ auto queue_data = GetQueueState(dev_data, queue);
+ if (!queue_data) return false;
for (uint32_t i = 0; i < queryCount; i++) {
- QueryObject query = {queryPool, firstQuery + i};
- auto query_data = queue_data->second.queryToStateMap.find(query);
- bool fail = false;
- if (query_data != queue_data->second.queryToStateMap.end()) {
- if (!query_data->second) {
- fail = true;
- }
- } else {
- auto global_query_data = dev_data->queryToStateMap.find(query);
- if (global_query_data != dev_data->queryToStateMap.end()) {
- if (!global_query_data->second) {
- fail = true;
- }
- } else {
- fail = true;
- }
- }
- if (fail) {
+ if (IsQueryInvalid(dev_data, queue_data, queryPool, firstQuery + i)) {
skip |= log_msg(dev_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT,
HandleToUint64(pCB->commandBuffer), __LINE__, DRAWSTATE_INVALID_QUERY, "DS",
"Requesting a copy from query to buffer with invalid query: queryPool 0x%" PRIx64 ", index %d",