Mesa (main): ac/nir/ngg: Add mesh shader workgroup index.

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Jun 15 19:09:23 UTC 2022


Module: Mesa
Branch: main
Commit: e05f63f56c1563b6ac85e5158f90040572c229ad
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=e05f63f56c1563b6ac85e5158f90040572c229ad

Author: Timur Kristóf <timur.kristof at gmail.com>
Date:   Mon Feb 28 14:24:17 2022 +0100

ac/nir/ngg: Add mesh shader workgroup index.

This will allow lowering 3D workgroup ID to a 1D index.

Signed-off-by: Timur Kristóf <timur.kristof at gmail.com>
Reviewed-by: Rhys Perry <pendingchaos02 at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17023>

---

 src/amd/common/ac_nir_lower_ngg.c | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/src/amd/common/ac_nir_lower_ngg.c b/src/amd/common/ac_nir_lower_ngg.c
index 69caffe203d..e3ac655eb91 100644
--- a/src/amd/common/ac_nir_lower_ngg.c
+++ b/src/amd/common/ac_nir_lower_ngg.c
@@ -2402,6 +2402,14 @@ lower_ms_load_workgroup_id(nir_builder *b,
    return nir_vec3(b, s->workgroup_index, nir_imm_int(b, 0), nir_imm_int(b, 0));
 }
 
+static nir_ssa_def *
+lower_ms_load_workgroup_index(nir_builder *b,
+                              UNUSED nir_intrinsic_instr *intrin,
+                              lower_ngg_ms_state *s)
+{
+   return s->workgroup_index;
+}
+
 static nir_ssa_def *
 update_ms_scoped_barrier(nir_builder *b,
                          nir_intrinsic_instr *intrin,
@@ -2447,6 +2455,8 @@ lower_ms_intrinsic(nir_builder *b, nir_instr *instr, void *state)
       return lower_ms_load_workgroup_id(b, intrin, s);
    case nir_intrinsic_scoped_barrier:
       return update_ms_scoped_barrier(b, intrin, s);
+   case nir_intrinsic_load_workgroup_index:
+      return lower_ms_load_workgroup_index(b, intrin, s);
    default:
       unreachable("Not a lowerable mesh shader intrinsic.");
    }
@@ -2467,7 +2477,8 @@ filter_ms_intrinsic(const nir_instr *instr,
           intrin->intrinsic == nir_intrinsic_store_per_primitive_output ||
           intrin->intrinsic == nir_intrinsic_load_per_primitive_output ||
           intrin->intrinsic == nir_intrinsic_scoped_barrier ||
-          intrin->intrinsic == nir_intrinsic_load_workgroup_id;
+          intrin->intrinsic == nir_intrinsic_load_workgroup_id ||
+          intrin->intrinsic == nir_intrinsic_load_workgroup_index;
 }
 
 static void
@@ -2522,7 +2533,8 @@ emit_ms_prelude(nir_builder *b, lower_ngg_ms_state *s)
    }
 
    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_ID) ||
+      BITSET_TEST(b->shader->info.system_values_read, SYSTEM_VALUE_WORKGROUP_INDEX);
 
    if (!uses_workgroup_id)
       return;



More information about the mesa-commit mailing list