From 2be3b5f78d0d78223b62683645bc0a7bcac8d2be Mon Sep 17 00:00:00 2001 From: Yiwei Zhang Date: Mon, 1 May 2023 16:58:11 +0000 Subject: [PATCH] radv: respect VK_QUERY_RESULT_WAIT_BIT in GetQueryPoolResults The flag was ignored for VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT and VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT. Cc: mesa-stable Signed-off-by: Yiwei Zhang Reviewed-by: Bas Nieuwenhuizen Part-of: (cherry picked from commit 34cc37910f362dd8d51ef47de0ca592f0e42571a) --- .pick_status.json | 2 +- src/amd/vulkan/radv_query.c | 24 ++++++++++++++---------- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 97fe66e04cb..c52560576cf 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -481,7 +481,7 @@ "description": "radv: respect VK_QUERY_RESULT_WAIT_BIT in GetQueryPoolResults", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null }, diff --git a/src/amd/vulkan/radv_query.c b/src/amd/vulkan/radv_query.c index 34261c90e89..0dc394904d9 100644 --- a/src/amd/vulkan/radv_query.c +++ b/src/amd/vulkan/radv_query.c @@ -1384,11 +1384,13 @@ radv_GetQueryPoolResults(VkDevice _device, VkQueryPool queryPool, uint32_t first * u64 PrimitiveStorageNeeded; * } */ - available = 1; - for (int j = 0; j < 4; j++) { - if (!(p_atomic_read(src64 + j) & 0x8000000000000000UL)) - available = 0; - } + do { + available = 1; + for (int j = 0; j < 4; j++) { + if (!(p_atomic_read(src64 + j) & 0x8000000000000000UL)) + available = 0; + } + } while (!available && (flags & VK_QUERY_RESULT_WAIT_BIT)); if (!available && !(flags & VK_QUERY_RESULT_PARTIAL_BIT)) result = VK_NOT_READY; @@ -1423,11 +1425,13 @@ radv_GetQueryPoolResults(VkDevice _device, VkQueryPool queryPool, uint32_t first * u64 PrimitiveStorageNeeded; * } */ - available = 1; - if (!(p_atomic_read(src64 + 0) & 0x8000000000000000UL) || - !(p_atomic_read(src64 + 2) & 0x8000000000000000UL)) { - available = 0; - } + do { + available = 1; + if (!(p_atomic_read(src64 + 0) & 0x8000000000000000UL) || + !(p_atomic_read(src64 + 2) & 0x8000000000000000UL)) { + available = 0; + } + } while (!available && (flags & VK_QUERY_RESULT_WAIT_BIT)); if (!available && !(flags & VK_QUERY_RESULT_PARTIAL_BIT)) result = VK_NOT_READY;