Mesa (master): intel/cs_intrinsics: Handle 64-bit intrinsics

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Aug 12 10:29:16 UTC 2020


Module: Mesa
Branch: master
Commit: 8e1de8e5ac90a9dd0a2fb9310cb36371a9d12dce
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=8e1de8e5ac90a9dd0a2fb9310cb36371a9d12dce

Author: Jason Ekstrand <jason.ekstrand at intel.com>
Date:   Wed Nov 14 21:57:59 2018 -0600

intel/cs_intrinsics: Handle 64-bit intrinsics

It's safe to do the math in 32 bits because they're all local workgroup
calculations.  We just need to do a conversion at the end.  For a couple
of intrinsics, we just turn them into 32-bit intrinsics and add a u2u64.

Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6280>

---

 src/intel/compiler/brw_nir_lower_cs_intrinsics.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/src/intel/compiler/brw_nir_lower_cs_intrinsics.c b/src/intel/compiler/brw_nir_lower_cs_intrinsics.c
index 7c08b36aab6..102bd29595a 100644
--- a/src/intel/compiler/brw_nir_lower_cs_intrinsics.c
+++ b/src/intel/compiler/brw_nir_lower_cs_intrinsics.c
@@ -53,6 +53,18 @@ lower_cs_intrinsics_convert_block(struct lower_intrinsics_state *state,
 
       nir_ssa_def *sysval;
       switch (intrinsic->intrinsic) {
+      case nir_intrinsic_load_local_group_size:
+      case nir_intrinsic_load_work_group_id:
+         /* Convert this to 32-bit if it's not */
+         if (intrinsic->dest.ssa.bit_size == 64) {
+            intrinsic->dest.ssa.bit_size = 32;
+            sysval = nir_u2u64(b, &intrinsic->dest.ssa);
+            nir_ssa_def_rewrite_uses_after(&intrinsic->dest.ssa,
+                                           nir_src_for_ssa(sysval),
+                                           sysval->parent_instr);
+         }
+         continue;
+
       case nir_intrinsic_load_local_invocation_index:
       case nir_intrinsic_load_local_invocation_id: {
          /* First time we are using those, so let's calculate them. */
@@ -171,6 +183,9 @@ lower_cs_intrinsics_convert_block(struct lower_intrinsics_state *state,
          continue;
       }
 
+      if (intrinsic->dest.ssa.bit_size == 64)
+         sysval = nir_u2u64(b, sysval);
+
       nir_ssa_def_rewrite_uses(&intrinsic->dest.ssa, nir_src_for_ssa(sysval));
       nir_instr_remove(&intrinsic->instr);
 



More information about the mesa-commit mailing list