From 9d2f5a4adae0cf75bcb5646892433e4658b58d1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timur=20Krist=C3=B3f?= Date: Fri, 17 Feb 2023 13:55:38 +0100 Subject: [PATCH] ac/nir/ngg: Split legacy workgroup index function. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Timur Kristóf Reviewed-by: Samuel Pitoiset Part-of: --- src/amd/common/ac_nir_lower_ngg.c | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/src/amd/common/ac_nir_lower_ngg.c b/src/amd/common/ac_nir_lower_ngg.c index 9d5c374b605..39fffc07740 100644 --- a/src/amd/common/ac_nir_lower_ngg.c +++ b/src/amd/common/ac_nir_lower_ngg.c @@ -4048,10 +4048,8 @@ ms_emit_arrayed_outputs(nir_builder *b, } static void -emit_ms_prelude(nir_builder *b, lower_ngg_ms_state *s) +ms_create_same_invocation_vars(nir_builder *b, lower_ngg_ms_state *s) { - b->cursor = nir_before_cf_list(&b->impl->body); - /* Initialize NIR variables for same-invocation outputs. */ uint64_t same_invocation_output_mask = s->layout.var.prm_attr.mask | s->layout.var.vtx_attr.mask; @@ -4061,15 +4059,23 @@ emit_ms_prelude(nir_builder *b, lower_ngg_ms_state *s) s->out_variables[idx] = nir_local_variable_create(b->impl, glsl_uint_type(), "ms_var_output"); } } +} - bool uses_workgroup_id = - BITSET_TEST(b->shader->info.system_values_read, SYSTEM_VALUE_WORKGROUP_ID) || - BITSET_TEST(b->shader->info.system_values_read, SYSTEM_VALUE_WORKGROUP_INDEX); +static void +ms_emit_legacy_workgroup_index(nir_builder *b, lower_ngg_ms_state *s) +{ + /* Workgroup ID should have been lowered to workgroup index. */ + assert(!BITSET_TEST(b->shader->info.system_values_read, SYSTEM_VALUE_WORKGROUP_ID)); - if (!uses_workgroup_id) + /* No need to do anything if the shader doesn't use the workgroup index. */ + if (!BITSET_TEST(b->shader->info.system_values_read, SYSTEM_VALUE_WORKGROUP_INDEX)) return; - /* The HW doesn't support a proper workgroup index for vertex processing stages, + b->cursor = nir_before_cf_list(&b->impl->body); + + /* Legacy fast launch mode (FAST_LAUNCH=1): + * + * The HW doesn't support a proper workgroup index for vertex processing stages, * so we use the vertex ID which is equivalent to the index of the current workgroup * within the current dispatch. * @@ -4745,7 +4751,8 @@ ac_nir_lower_ngg_ms(nir_shader *shader, b->cursor = nir_before_cf_list(&impl->body); handle_smaller_ms_api_workgroup(b, &state); - emit_ms_prelude(b, &state); + ms_emit_legacy_workgroup_index(b, &state); + ms_create_same_invocation_vars(b, &state); nir_metadata_preserve(impl, nir_metadata_none); lower_ms_intrinsics(shader, &state);