Module: Mesa
Branch: main
Commit: 62356e71f431684008efc7e471bddb1ada9801a3
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=62356e71f431684008efc7e471bddb1ada9801a3

Author: Samuel Pitoiset <[email protected]>
Date:   Wed Nov 16 15:49:24 2022 +0100

radv: suspend/resume XFB queries with NGG for meta operations

XFB queries enable primitives generated queries with NGG and meta
operations shouldn't be counted.

Reproduced on GFX10.3 by forcing NGG streamout.

Cc: 22.3 mesa-stable
Signed-off-by: Samuel Pitoiset <[email protected]>
Reviewed-by: Bas Nieuwenhuizen <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19785>

---

 src/amd/vulkan/radv_meta.c | 12 ++++++++++++
 src/amd/vulkan/radv_meta.h |  1 +
 2 files changed, 13 insertions(+)

diff --git a/src/amd/vulkan/radv_meta.c b/src/amd/vulkan/radv_meta.c
index 95c3386280f..6c7969ea34b 100644
--- a/src/amd/vulkan/radv_meta.c
+++ b/src/amd/vulkan/radv_meta.c
@@ -62,6 +62,12 @@ radv_suspend_queries(struct radv_meta_saved_state *state, 
struct radv_cmd_buffer
       state->active_prims_gen_gds_queries = 
cmd_buffer->state.active_prims_gen_gds_queries;
       cmd_buffer->state.active_prims_gen_gds_queries = 0;
    }
+
+   /* Transform feedback queries (NGG). */
+   if (cmd_buffer->state.active_prims_xfb_gds_queries) {
+      state->active_prims_xfb_gds_queries = 
cmd_buffer->state.active_prims_xfb_gds_queries;
+      cmd_buffer->state.active_prims_xfb_gds_queries = 0;
+   }
 }
 
 static void
@@ -90,6 +96,11 @@ radv_resume_queries(const struct radv_meta_saved_state 
*state, struct radv_cmd_b
    if (state->active_prims_gen_gds_queries) {
       cmd_buffer->state.active_prims_gen_gds_queries = 
state->active_prims_gen_gds_queries;
    }
+
+   /* Transform feedback queries (NGG). */
+   if (state->active_prims_xfb_gds_queries) {
+      cmd_buffer->state.active_prims_xfb_gds_queries = 
state->active_prims_xfb_gds_queries;
+   }
 }
 
 void
@@ -106,6 +117,7 @@ radv_meta_save(struct radv_meta_saved_state *state, struct 
radv_cmd_buffer *cmd_
 
    state->flags = flags;
    state->active_prims_gen_gds_queries = 0;
+   state->active_prims_xfb_gds_queries = 0;
 
    if (state->flags & RADV_META_SAVE_GRAPHICS_PIPELINE) {
       assert(!(state->flags & RADV_META_SAVE_COMPUTE_PIPELINE));
diff --git a/src/amd/vulkan/radv_meta.h b/src/amd/vulkan/radv_meta.h
index 8f555a7f871..8f00e8a9e09 100644
--- a/src/amd/vulkan/radv_meta.h
+++ b/src/amd/vulkan/radv_meta.h
@@ -56,6 +56,7 @@ struct radv_meta_saved_state {
 
    unsigned active_pipeline_gds_queries;
    unsigned active_prims_gen_gds_queries;
+   unsigned active_prims_xfb_gds_queries;
 
    bool predicating;
 };

Reply via email to