From 60f12ee177241db316bd140e7eec547979ad2830 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Tue, 2 Feb 2021 19:52:09 +0100 Subject: [PATCH] radv: fix waiting on the last enabled RB for occlusion queries Wait on the last enabled RB, not the last RB. This fixes GPU hangs because the GPU was waiting forever. Cc: mesa-stable Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/4212 Signed-off-by: Samuel Pitoiset Reviewed-by: Bas Nieuwenhuizen Part-of: (cherry picked from commit 7e47fe9a940f3989caf98024fdc584641601fa2e) --- .pick_status.json | 2 +- src/amd/vulkan/radv_query.c | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 737a81da4e3..75df56d5dee 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -2794,7 +2794,7 @@ "description": "radv: fix waiting on the last enabled RB for occlusion queries", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "master_sha": null, "because_sha": null }, diff --git a/src/amd/vulkan/radv_query.c b/src/amd/vulkan/radv_query.c index b4298c9f477..0a2853a6f57 100644 --- a/src/amd/vulkan/radv_query.c +++ b/src/amd/vulkan/radv_query.c @@ -1317,9 +1317,11 @@ void radv_CmdCopyQueryPoolResults( switch (pool->type) { case VK_QUERY_TYPE_OCCLUSION: if (flags & VK_QUERY_RESULT_WAIT_BIT) { + unsigned enabled_rb_mask = cmd_buffer->device->physical_device->rad_info.enabled_rb_mask; + uint32_t rb_avail_offset = 16 * util_last_bit(enabled_rb_mask) - 4; for(unsigned i = 0; i < queryCount; ++i, dest_va += stride) { unsigned query = firstQuery + i; - uint64_t src_va = va + query * pool->stride + pool->stride - 4; + uint64_t src_va = va + query * pool->stride + rb_avail_offset; radeon_check_space(cmd_buffer->device->ws, cs, 7);