Wait on query being available, not !active.
These are not quite equivalent -- it is possible that we will start waiting before the query begins.
Tests: dEQP-VK.query_pool.occlusion_query.get_results_conservative*
Change-Id: I66fbe389b5329fbf34ff78cf3cea1078339b2b10
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/30728
Tested-by: Chris Forbes <chrisforbes@google.com>
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
diff --git a/src/Vulkan/VkQueryPool.cpp b/src/Vulkan/VkQueryPool.cpp
index 864ddb2..cd1041b 100644
--- a/src/Vulkan/VkQueryPool.cpp
+++ b/src/Vulkan/VkQueryPool.cpp
@@ -75,7 +75,7 @@
std::unique_lock<std::mutex> mutexLock(query.mutex);
if(flags & VK_QUERY_RESULT_WAIT_BIT) // Must wait for query to finish
{
- query.condition.wait(mutexLock, [&query] { return query.state != Query::ACTIVE; });
+ query.condition.wait(mutexLock, [&query] { return query.state == Query::FINISHED; });
}
bool writeResult = true;
@@ -158,8 +158,6 @@
{
std::unique_lock<std::mutex> mutexLock(pool[i].mutex);
- ASSERT(pool[i].state != Query::ACTIVE);
-
pool[i].state = Query::UNAVAILABLE;
pool[i].data = 0;
}