From 603e68ba36e63d75d69deb46e2abd82ba349d959 Mon Sep 17 00:00:00 2001 From: Qiang Yu Date: Wed, 30 Nov 2022 21:43:59 +0800 Subject: [PATCH] ac/nir,radeonsi: replace llvm ngg gs invocation query with nir MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Reviewed-by: Marek Olšák Signed-off-by: Qiang Yu Part-of: --- src/amd/common/ac_nir_lower_ngg.c | 2 ++ src/gallium/drivers/radeonsi/gfx10_shader_ngg.c | 29 ----------------------- src/gallium/drivers/radeonsi/si_shader_internal.h | 1 - src/gallium/drivers/radeonsi/si_shader_llvm.c | 4 ---- 4 files changed, 2 insertions(+), 34 deletions(-) diff --git a/src/amd/common/ac_nir_lower_ngg.c b/src/amd/common/ac_nir_lower_ngg.c index a3e2658..bf075a3 100644 --- a/src/amd/common/ac_nir_lower_ngg.c +++ b/src/amd/common/ac_nir_lower_ngg.c @@ -2469,6 +2469,8 @@ ngg_gs_shader_query(nir_builder *b, lower_ngg_gs_state *s) if (count) nir_atomic_add_gs_emit_prim_count_amd(b, count); + + nir_atomic_add_gs_invocation_count_amd(b, num_active_threads); } nir_pop_if(b, if_pipeline_query); } diff --git a/src/gallium/drivers/radeonsi/gfx10_shader_ngg.c b/src/gallium/drivers/radeonsi/gfx10_shader_ngg.c index 17d0bea..2392e73 100644 --- a/src/gallium/drivers/radeonsi/gfx10_shader_ngg.c +++ b/src/gallium/drivers/radeonsi/gfx10_shader_ngg.c @@ -124,35 +124,6 @@ void gfx10_ngg_export_vertex(struct ac_shader_abi *abi) si_llvm_build_vs_exports(ctx, outputs, num_outputs); } -void gfx10_ngg_gs_emit_begin(struct si_shader_context *ctx) -{ - LLVMBuilderRef builder = ctx->ac.builder; - LLVMValueRef tmp; - - if (ctx->screen->info.gfx_level < GFX11) { - tmp = si_is_gs_thread(ctx); - ac_build_ifcc(&ctx->ac, tmp, 15090); - { - tmp = GET_FIELD(ctx, GS_STATE_PIPELINE_STATS_EMU); - tmp = LLVMBuildTrunc(builder, tmp, ctx->ac.i1, ""); - ac_build_ifcc(&ctx->ac, tmp, 5109); /* if (GS_PIPELINE_STATS_EMU) */ - LLVMValueRef args[] = { - ctx->ac.i32_1, - ngg_get_emulated_counters_buf(ctx), - LLVMConstInt(ctx->ac.i32, - si_query_pipestat_end_dw_offset(ctx->screen, PIPE_STAT_QUERY_GS_INVOCATIONS) * 4, - false), - ctx->ac.i32_0, /* soffset */ - ctx->ac.i32_0, /* cachepolicy */ - }; - - ac_build_intrinsic(&ctx->ac, "llvm.amdgcn.raw.buffer.atomic.add.i32", ctx->ac.i32, args, 5, 0); - ac_build_endif(&ctx->ac, 5109); - } - ac_build_endif(&ctx->ac, 15090); - } -} - static void clamp_gsprims_to_esverts(unsigned *max_gsprims, unsigned max_esverts, unsigned min_verts_per_prim, bool use_adjacency) { diff --git a/src/gallium/drivers/radeonsi/si_shader_internal.h b/src/gallium/drivers/radeonsi/si_shader_internal.h index 93e3925..e258371 100644 --- a/src/gallium/drivers/radeonsi/si_shader_internal.h +++ b/src/gallium/drivers/radeonsi/si_shader_internal.h @@ -183,7 +183,6 @@ LLVMValueRef gfx10_get_thread_id_in_tg(struct si_shader_context *ctx); unsigned gfx10_ngg_get_vertices_per_prim(struct si_shader *shader); bool gfx10_ngg_export_prim_early(struct si_shader *shader); void gfx10_ngg_export_vertex(struct ac_shader_abi *abi); -void gfx10_ngg_gs_emit_begin(struct si_shader_context *ctx); unsigned gfx10_ngg_get_scratch_dw_size(struct si_shader *shader); bool gfx10_ngg_calculate_subgroup_info(struct si_shader *shader); diff --git a/src/gallium/drivers/radeonsi/si_shader_llvm.c b/src/gallium/drivers/radeonsi/si_shader_llvm.c index 5a241c8..6605495 100644 --- a/src/gallium/drivers/radeonsi/si_shader_llvm.c +++ b/src/gallium/drivers/radeonsi/si_shader_llvm.c @@ -902,10 +902,6 @@ bool si_llvm_translate_nir(struct si_shader_context *ctx, struct si_shader *shad shader->key.ge.as_ngg && !shader->key.ge.as_es && !shader->key.ge.opt.ngg_culling) ac_build_s_barrier(&ctx->ac, ctx->stage); - /* NGG GS: handle GS_STATE_PIPELINE_STATS_EMU */ - if (ctx->stage == MESA_SHADER_GEOMETRY && shader->key.ge.as_ngg) - gfx10_ngg_gs_emit_begin(ctx); - LLVMValueRef thread_enabled = NULL; if ((ctx->stage == MESA_SHADER_GEOMETRY && !shader->key.ge.as_ngg) || -- 2.7.4