radv: split active_pipeline_gds_queries
authorQiang Yu <yuq825@gmail.com>
Mon, 10 Oct 2022 02:52:27 +0000 (10:52 +0800)
committerMarge Bot <emma+marge@anholt.net>
Tue, 25 Oct 2022 02:42:52 +0000 (02:42 +0000)
For different enabling of pipeline stat and prims gen.

Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Signed-off-by: Qiang Yu <yuq825@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19015>

src/amd/vulkan/radv_cmd_buffer.c
src/amd/vulkan/radv_meta.c
src/amd/vulkan/radv_meta.h
src/amd/vulkan/radv_nir_lower_abi.c
src/amd/vulkan/radv_private.h
src/amd/vulkan/radv_query.c

index eb64086..f7cbd2d 100644 (file)
@@ -4160,7 +4160,7 @@ radv_flush_ngg_query_state(struct radv_cmd_buffer *cmd_buffer)
    struct radv_graphics_pipeline *pipeline = cmd_buffer->state.graphics_pipeline;
    const unsigned stage = pipeline->last_vgt_api_stage;
    const struct radv_userdata_info *loc = &pipeline->last_vgt_api_stage_locs[AC_UD_NGG_QUERY_STATE];
-   uint32_t ngg_query_state = 0;
+   enum radv_ngg_query_state ngg_query_state = radv_ngg_query_none;
    uint32_t base_reg;
 
    if (loc->sgpr_idx == -1)
@@ -4175,7 +4175,10 @@ radv_flush_ngg_query_state(struct radv_cmd_buffer *cmd_buffer)
    if (cmd_buffer->state.active_pipeline_gds_queries ||
        (cmd_buffer->state.inherited_pipeline_statistics &
         VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT))
-      ngg_query_state = 1;
+      ngg_query_state |= radv_ngg_query_pipeline_stat;
+
+   if (cmd_buffer->state.active_prims_gen_gds_queries)
+      ngg_query_state |= radv_ngg_query_prim_gen;
 
    base_reg = pipeline->base.user_data_0[stage];
    assert(loc->sgpr_idx != -1);
index ed34023..f345e5c 100644 (file)
@@ -57,7 +57,9 @@ radv_suspend_queries(struct radv_meta_saved_state *state, struct radv_cmd_buffer
        * 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;
    }
 }
 
@@ -82,6 +84,7 @@ radv_resume_queries(const struct radv_meta_saved_state *state, struct radv_cmd_b
 
       /* 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;
    }
 }
 
index b62d671..c06ad68 100644 (file)
@@ -55,6 +55,7 @@ struct radv_meta_saved_state {
    struct radv_rendering_state render;
 
    unsigned active_pipeline_gds_queries;
+   unsigned active_prims_gen_gds_queries;
 
    bool predicating;
 };
index b1e6677..75cb036 100644 (file)
@@ -175,7 +175,8 @@ lower_abi_instr(nir_builder *b, nir_instr *instr, void *state)
       replacement = ac_nir_load_arg(b, &s->args->ac, s->args->ac.gs_vtx_offset[0]);
       break;
    case nir_intrinsic_load_shader_query_enabled_amd:
-      replacement = nir_ieq_imm(b, ac_nir_load_arg(b, &s->args->ac, s->args->ngg_query_state), 1);
+      replacement = nir_ine_imm(b, ac_nir_load_arg(b, &s->args->ac, s->args->ngg_query_state),
+                                radv_ngg_query_none);
       break;
    case nir_intrinsic_load_cull_any_enabled_amd:
       replacement = nggc_bool_setting(
index 10e5661..e0ce26a 100644 (file)
@@ -1212,6 +1212,12 @@ enum radv_nggc_settings {
    radv_nggc_small_primitives = 1 << 3,
 };
 
+enum radv_ngg_query_state {
+   radv_ngg_query_none = 0,
+   radv_ngg_query_pipeline_stat = 1 << 0,
+   radv_ngg_query_prim_gen = 1 << 1,
+};
+
 struct radv_vertex_binding {
    VkDeviceSize offset;
    VkDeviceSize size;
@@ -1530,6 +1536,7 @@ struct radv_cmd_state {
    unsigned active_pipeline_queries;
    unsigned active_pipeline_gds_queries;
    unsigned active_prims_gen_queries;
+   unsigned active_prims_gen_gds_queries;
    uint32_t trace_id;
    uint32_t last_ia_multi_vgt_param;
    uint32_t last_ge_cntl;
index fafdbb1..d0b20d9 100644 (file)
@@ -1857,7 +1857,7 @@ emit_begin_query(struct radv_cmd_buffer *cmd_buffer, struct radv_query_pool *poo
          /* Record that the command buffer needs GDS. */
          cmd_buffer->gds_needed = true;
 
-         cmd_buffer->state.active_pipeline_gds_queries++;
+         cmd_buffer->state.active_prims_gen_gds_queries++;
       }
       break;
    }
@@ -1952,7 +1952,7 @@ emit_end_query(struct radv_cmd_buffer *cmd_buffer, struct radv_query_pool *pool,
          gfx10_copy_gds_query(cmd_buffer, 0, va + 40); /* NGG GS */
          gfx10_copy_gds_query(cmd_buffer, 4, va + 56); /* NGG VS/TES */
 
-         cmd_buffer->state.active_pipeline_gds_queries--;
+         cmd_buffer->state.active_prims_gen_gds_queries--;
       }
       break;
    }