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>
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)
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);
* 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;
}
}
/* 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;
}
}
struct radv_rendering_state render;
unsigned active_pipeline_gds_queries;
+ unsigned active_prims_gen_gds_queries;
bool predicating;
};
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(
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;
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;
/* 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;
}
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;
}