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; }