From d5541307fd6827d5ddf404d6308569ff6512ca1e Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Wed, 17 May 2023 15:55:12 +0200 Subject: [PATCH] radv: fix a sync issue with primitives generated query and NGG/legacy On RDNA1&2, the driver needs to support both NGG and legacy for primitives generated query because we can't know that before starting queries. To get the query pool results, we check the availability bit wrote by the SAMPLE_STREAMOUTSTATS packet but the GDS copy was emitted after, which means the availability bit might be TRUE before the GDS copy is actually done. Fix this by emitting the GDS copy before to ensure the availability is TRUE for both results. This fixes recent updates in dEQP-VK.transform_feedback.primitives_generated_query.* because the tests no longer wait for the fence. Cc: mesa-stable Signed-off-by: Samuel Pitoiset Part-of: (cherry picked from commit 9ba41ed70af4a9f4a29088f100df08868ecea0e7) --- .pick_status.json | 2 +- src/amd/vulkan/radv_query.c | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 0fd80443a08..84ab0b6f815 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -1363,7 +1363,7 @@ "description": "radv: fix a sync issue with primitives generated query and NGG/legacy", "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 aa98c371eb4..5be9a0e1716 100644 --- a/src/amd/vulkan/radv_query.c +++ b/src/amd/vulkan/radv_query.c @@ -1913,8 +1913,6 @@ emit_begin_query(struct radv_cmd_buffer *cmd_buffer, struct radv_query_pool *poo cmd_buffer->state.active_prims_gen_queries++; } - emit_sample_streamout(cmd_buffer, va, index); - if (pool->uses_gds) { /* generated prim counter */ gfx10_copy_gds_query(cmd_buffer, RADV_NGG_QUERY_PRIM_GEN_OFFSET(index), va + 32); @@ -1927,6 +1925,8 @@ emit_begin_query(struct radv_cmd_buffer *cmd_buffer, struct radv_query_pool *poo cmd_buffer->state.active_prims_gen_gds_queries++; } + + emit_sample_streamout(cmd_buffer, va, index); } break; } @@ -2049,8 +2049,6 @@ emit_end_query(struct radv_cmd_buffer *cmd_buffer, struct radv_query_pool *pool, cmd_buffer->state.active_prims_gen_queries--; } - emit_sample_streamout(cmd_buffer, va + 16, index); - if (pool->uses_gds) { /* generated prim counter */ gfx10_copy_gds_query(cmd_buffer, RADV_NGG_QUERY_PRIM_GEN_OFFSET(index), va + 36); @@ -2060,6 +2058,8 @@ emit_end_query(struct radv_cmd_buffer *cmd_buffer, struct radv_query_pool *pool, if (!cmd_buffer->state.active_prims_gen_gds_queries) cmd_buffer->state.dirty |= RADV_CMD_DIRTY_NGG_QUERY; } + + emit_sample_streamout(cmd_buffer, va + 16, index); } break; }