radv: fix suspending/resuming pipeline statistics queries with GDS
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Wed, 26 Oct 2022 15:59:31 +0000 (17:59 +0200)
committerMarge Bot <emma+marge@anholt.net>
Fri, 28 Oct 2022 08:12:30 +0000 (08:12 +0000)
This probably doesn't fix anything in practice because GDS is only
used for the number of generated primitives by GS and meta operations
don't use GS.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19348>

src/amd/vulkan/radv_meta.c

index f345e5c..610b089 100644 (file)
@@ -41,6 +41,9 @@ radv_suspend_queries(struct radv_meta_saved_state *state, struct radv_cmd_buffer
    if (cmd_buffer->state.active_pipeline_queries > 0) {
       cmd_buffer->state.flush_bits &= ~RADV_CMD_FLAG_START_PIPELINE_STATS;
       cmd_buffer->state.flush_bits |= RADV_CMD_FLAG_STOP_PIPELINE_STATS;
+
+      state->active_pipeline_gds_queries = cmd_buffer->state.active_pipeline_gds_queries;
+      cmd_buffer->state.active_pipeline_gds_queries = 0;
    }
 
    /* Occlusion queries. */
@@ -56,9 +59,7 @@ radv_suspend_queries(struct radv_meta_saved_state *state, struct radv_cmd_buffer
       /* Save the number of active GDS queries and reset it to make sure internal operations won't
        * increment the counters via GDS.
        */
-      state->active_pipeline_gds_queries = cmd_buffer->state.active_pipeline_gds_queries;
       state->active_prims_gen_gds_queries = cmd_buffer->state.active_prims_gen_gds_queries;
-      cmd_buffer->state.active_pipeline_gds_queries = 0;
       cmd_buffer->state.active_prims_gen_gds_queries = 0;
    }
 }
@@ -70,6 +71,8 @@ radv_resume_queries(const struct radv_meta_saved_state *state, struct radv_cmd_b
    if (cmd_buffer->state.active_pipeline_queries > 0) {
       cmd_buffer->state.flush_bits &= ~RADV_CMD_FLAG_STOP_PIPELINE_STATS;
       cmd_buffer->state.flush_bits |= RADV_CMD_FLAG_START_PIPELINE_STATS;
+
+      cmd_buffer->state.active_pipeline_gds_queries = state->active_pipeline_gds_queries;
    }
 
    /* Occlusion queries. */
@@ -83,7 +86,6 @@ radv_resume_queries(const struct radv_meta_saved_state *state, struct radv_cmd_b
       radv_emit_streamout_enable(cmd_buffer);
 
       /* Restore the number of active GDS queries to resume counting. */
-      cmd_buffer->state.active_pipeline_gds_queries = state->active_pipeline_gds_queries;
       cmd_buffer->state.active_prims_gen_gds_queries = state->active_prims_gen_gds_queries;
    }
 }