From e9268b2c0651533dbc110a57f7bb8f23fdd77823 Mon Sep 17 00:00:00 2001 From: Qiang Yu Date: Mon, 19 Dec 2022 16:01:15 +0800 Subject: [PATCH] ac/nir: gs and nogs use ac_nir_export_primitive MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Mesh shader primitive export is left unchanged because it needs extra changes for per primitive output export when export primitive. Mesh shader will use second channel of primitive export. Reviewed-by: Timur Kristóf Reviewed-by: Marek Olšák Signed-off-by: Qiang Yu Part-of: --- src/amd/common/ac_nir.c | 12 ++++++++++++ src/amd/common/ac_nir.h | 3 +++ src/amd/common/ac_nir_lower_ngg.c | 4 ++-- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/amd/common/ac_nir.c b/src/amd/common/ac_nir.c index 2626ac6ab98..e147bde8f9f 100644 --- a/src/amd/common/ac_nir.c +++ b/src/amd/common/ac_nir.c @@ -22,6 +22,7 @@ */ #include "ac_nir.h" +#include "sid.h" #include "nir_builder.h" #include "nir_xfb_info.h" @@ -44,6 +45,17 @@ ac_nir_unpack_arg(nir_builder *b, const struct ac_shader_args *ac_args, struct a return nir_ubfe_imm(b, value, rshift, bitwidth); } +void +ac_nir_export_primitive(nir_builder *b, nir_ssa_def *prim) +{ + unsigned write_mask = BITFIELD_MASK(prim->num_components); + + nir_export_amd(b, nir_pad_vec4(b, prim), + .base = V_008DFC_SQ_EXP_PRIM, + .flags = AC_EXP_FLAG_DONE, + .write_mask = write_mask); +} + /** * This function takes an I/O intrinsic like load/store_input, * and emits a sequence that calculates the full offset of that instruction, diff --git a/src/amd/common/ac_nir.h b/src/amd/common/ac_nir.h index 971d0b45213..dacf4c5817f 100644 --- a/src/amd/common/ac_nir.h +++ b/src/amd/common/ac_nir.h @@ -73,6 +73,9 @@ nir_ssa_def * ac_nir_unpack_arg(nir_builder *b, const struct ac_shader_args *ac_args, struct ac_arg arg, unsigned rshift, unsigned bitwidth); +void +ac_nir_export_primitive(nir_builder *b, nir_ssa_def *prim); + nir_ssa_def * ac_nir_calc_io_offset(nir_builder *b, nir_intrinsic_instr *intrin, diff --git a/src/amd/common/ac_nir_lower_ngg.c b/src/amd/common/ac_nir_lower_ngg.c index 4a0f3bc5df1..1b72d550c5c 100644 --- a/src/amd/common/ac_nir_lower_ngg.c +++ b/src/amd/common/ac_nir_lower_ngg.c @@ -545,7 +545,7 @@ emit_ngg_nogs_prim_export(nir_builder *b, lower_ngg_nogs_state *st, nir_ssa_def nir_pop_if(b, if_shader_query); } - nir_export_primitive_amd(b, arg); + ac_nir_export_primitive(b, arg); } nir_pop_if(b, if_gs_thread); } @@ -2840,7 +2840,7 @@ ngg_gs_export_primitives(nir_builder *b, nir_ssa_def *max_num_out_prims, nir_ssa } nir_ssa_def *arg = emit_pack_ngg_prim_exp_arg(b, s->num_vertices_per_primitive, vtx_indices, is_null_prim, false); - nir_export_primitive_amd(b, arg); + ac_nir_export_primitive(b, arg); nir_pop_if(b, if_prim_export_thread); }