Mesa (main): nir: Add upper bound for AMD shader arg intrinsics.

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue May 10 18:04:35 UTC 2022


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

Author: Timur Kristóf <timur.kristof at gmail.com>
Date:   Wed Mar 23 18:44:57 2022 +0100

nir: Add upper bound for AMD shader arg intrinsics.

Signed-off-by: Timur Kristóf <timur.kristof at gmail.com>
Reviewed-by: Daniel Schürmann <daniel at schuermann.dev>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13155>

---

 src/compiler/nir/nir_intrinsics.py    | 7 +++++--
 src/compiler/nir/nir_range_analysis.c | 7 +++++++
 2 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/src/compiler/nir/nir_intrinsics.py b/src/compiler/nir/nir_intrinsics.py
index f3b4a739054..7bf257f2f03 100644
--- a/src/compiler/nir/nir_intrinsics.py
+++ b/src/compiler/nir/nir_intrinsics.py
@@ -234,6 +234,9 @@ index("uint8_t", "offset1")
 # in hardware, instead of 4).
 index("bool", "st64")
 
+# When set, range analysis will use it for nir_unsigned_upper_bound
+index("unsigned", "arg_upper_bound_u32_amd")
+
 # Separate source/dest access flags for copies
 index("enum gl_access_qualifier", "dst_access")
 index("enum gl_access_qualifier", "src_access")
@@ -1346,8 +1349,8 @@ system_value("intersection_opaque_amd", 1, bit_sizes=[1])
 # Load forced VRS rates.
 intrinsic("load_force_vrs_rates_amd", dest_comp=1, bit_sizes=[32], flags=[CAN_ELIMINATE, CAN_REORDER])
 
-intrinsic("load_scalar_arg_amd", dest_comp=0, bit_sizes=[32], indices=[BASE], flags=[CAN_ELIMINATE, CAN_REORDER])
-intrinsic("load_vector_arg_amd", dest_comp=0, bit_sizes=[32], indices=[BASE], flags=[CAN_ELIMINATE, CAN_REORDER])
+intrinsic("load_scalar_arg_amd", dest_comp=0, bit_sizes=[32], indices=[BASE, ARG_UPPER_BOUND_U32_AMD], flags=[CAN_ELIMINATE, CAN_REORDER])
+intrinsic("load_vector_arg_amd", dest_comp=0, bit_sizes=[32], indices=[BASE, ARG_UPPER_BOUND_U32_AMD], flags=[CAN_ELIMINATE, CAN_REORDER])
 
 # src[] = { 64-bit base address, 32-bit offset }.
 intrinsic("load_smem_amd", src_comp=[1, 1], dest_comp=0, bit_sizes=[32],
diff --git a/src/compiler/nir/nir_range_analysis.c b/src/compiler/nir/nir_range_analysis.c
index 29b2903ca54..46a7dc8b469 100644
--- a/src/compiler/nir/nir_range_analysis.c
+++ b/src/compiler/nir/nir_range_analysis.c
@@ -1416,6 +1416,13 @@ nir_unsigned_upper_bound(nir_shader *shader, struct hash_table *range_ht,
          /* Very generous maximum: TCS/TES executed by largest possible workgroup */
          res = config->max_workgroup_invocations / MAX2(shader->info.tess.tcs_vertices_out, 1u);
          break;
+      case nir_intrinsic_load_scalar_arg_amd:
+      case nir_intrinsic_load_vector_arg_amd: {
+         uint32_t upper_bound = nir_intrinsic_arg_upper_bound_u32_amd(intrin);
+         if (upper_bound)
+            res = upper_bound;
+         break;
+      }
       default:
          break;
       }



More information about the mesa-commit mailing list