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=utf8 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 2626ac6..e147bde 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 971d0b4..dacf4c5 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 4a0f3bc..1b72d55 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); } -- 2.7.4