From d0018901f918a9b5cb4852e563515993c5c8201d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timur=20Krist=C3=B3f?= Date: Fri, 12 Apr 2024 00:22:07 +0200 Subject: [PATCH] ac/nir/ngg: Slightly refactor mesh shader cull flag stores. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit No functional changes, just improve code readability a little. Signed-off-by: Timur Kristóf Reviewed-by: Georg Lehmann Part-of: --- src/amd/common/ac_nir_lower_ngg.c | 37 ++++++++++++++----------------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/src/amd/common/ac_nir_lower_ngg.c b/src/amd/common/ac_nir_lower_ngg.c index dfdcce123d4..33661dc1dcf 100644 --- a/src/amd/common/ac_nir_lower_ngg.c +++ b/src/amd/common/ac_nir_lower_ngg.c @@ -3690,22 +3690,30 @@ ms_store_prim_indices(nir_builder *b, static void ms_store_cull_flag(nir_builder *b, - nir_def *val, - nir_def *offset_src, + nir_intrinsic_instr *intrin, lower_ngg_ms_state *s) { - assert(val->num_components == 1); - assert(val->bit_size == 1); + /* EXT_mesh_shader cull primitive: per-primitive bool. */ + assert(nir_src_is_const(*nir_get_io_offset_src(intrin))); + assert(nir_src_as_uint(*nir_get_io_offset_src(intrin)) == 0); + assert(nir_intrinsic_component(intrin) == 0); + assert(nir_intrinsic_write_mask(intrin) == 1); + + nir_def *store_val = intrin->src[0].ssa; + + assert(store_val->num_components == 1); + assert(store_val->bit_size == 1); if (s->layout.var.prm_attr.mask & BITFIELD64_BIT(VARYING_SLOT_CULL_PRIMITIVE)) { - nir_store_var(b, s->out_variables[VARYING_SLOT_CULL_PRIMITIVE * 4], nir_b2i32(b, val), 0x1); + nir_store_var(b, s->out_variables[VARYING_SLOT_CULL_PRIMITIVE * 4], nir_b2i32(b, store_val), 0x1); return; } - if (!offset_src) - offset_src = nir_imm_int(b, 0); + nir_def *arr_index = nir_get_io_arrayed_index_src(intrin)->ssa; + nir_def *offset = nir_imul_imm(b, arr_index, s->vertices_per_prim); - nir_store_shared(b, nir_b2i8(b, val), offset_src, .base = s->layout.lds.cull_flags_addr); + /* To reduce LDS use, store these as an array of 8-bit values. */ + nir_store_shared(b, nir_b2i8(b, store_val), offset, .base = s->layout.lds.cull_flags_addr); } static nir_def * @@ -3841,18 +3849,7 @@ ms_store_arrayed_output_intrin(nir_builder *b, ms_store_prim_indices(b, intrin, s); return; } else if (location == VARYING_SLOT_CULL_PRIMITIVE) { - /* EXT_mesh_shader cull primitive: per-primitive bool. - * To reduce LDS use, store these as an array of 8-bit values. - */ - assert(nir_src_is_const(*nir_get_io_offset_src(intrin))); - assert(nir_src_as_uint(*nir_get_io_offset_src(intrin)) == 0); - assert(nir_intrinsic_component(intrin) == 0); - assert(nir_intrinsic_write_mask(intrin) == 1); - - nir_def *store_val = intrin->src[0].ssa; - nir_def *arr_index = nir_get_io_arrayed_index_src(intrin)->ssa; - nir_def *offset = nir_imul_imm(b, arr_index, s->vertices_per_prim); - ms_store_cull_flag(b, store_val, offset, s); + ms_store_cull_flag(b, intrin, s); return; }