radv: fix queries with WAIT_BIT returning VK_NOT_READY
authorAndres Rodriguez <andresx7@gmail.com>
Sat, 27 Jul 2019 13:44:44 +0000 (09:44 -0400)
committerAndres Rodriguez <andresx7@gmail.com>
Sat, 27 Jul 2019 14:19:19 +0000 (10:19 -0400)
When vkGetQueryPoolResults() is called with VK_QUERY_RESULT_WAIT_BIT
set, the driver is supposed to wait for the query to become available
before returning.

Currently, radv returns once the query is indeed ready, but it returns
VK_NOT_READY. It also fails to populate the results.

The problem is a missing volatile in the secondary check for query
availability. This patch removes the secondary check altogether since it
is redundant with the preceding loop.

This bug was found with an unreleased version of SteamVR.

Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
src/amd/vulkan/radv_query.c

index 3add078e978cbee04adc816cce0ea86e54cfc54a..1bdcc998c65570bedb0c9f4c69e7a8c210c93b7d 100644 (file)
@@ -1129,7 +1129,7 @@ VkResult radv_GetQueryPoolResults(
                        if (flags & VK_QUERY_RESULT_WAIT_BIT) {
                                while (*(volatile uint64_t *)src == TIMESTAMP_NOT_READY)
                                        ;
-                               available = *(uint64_t *)src != TIMESTAMP_NOT_READY;
+                               available = true;
                        }
 
                        if (!available && !(flags & VK_QUERY_RESULT_PARTIAL_BIT))