Mesa (master): radv: fix waiting on the last enabled RB for occlusion queries

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Feb 3 19:50:45 UTC 2021


Module: Mesa
Branch: master
Commit: 7e47fe9a940f3989caf98024fdc584641601fa2e
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=7e47fe9a940f3989caf98024fdc584641601fa2e

Author: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Date:   Tue Feb  2 19:52:09 2021 +0100

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 <samuel.pitoiset at gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8836>

---

 src/amd/vulkan/radv_query.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/amd/vulkan/radv_query.c b/src/amd/vulkan/radv_query.c
index 3eca3c13ca5..a2c062c4c9e 100644
--- a/src/amd/vulkan/radv_query.c
+++ b/src/amd/vulkan/radv_query.c
@@ -1316,9 +1316,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);
 



More information about the mesa-commit mailing list