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;