nir/lower_non_uniform_access: add get_ssbo_size handling
authorLionel Landwerlin <lionel.g.landwerlin@intel.com>
Tue, 2 May 2023 09:06:59 +0000 (12:06 +0300)
committerMarge Bot <emma+marge@anholt.net>
Tue, 2 May 2023 16:27:15 +0000 (16:27 +0000)
Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Rhys Perry <pendingchaos02@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22793>

src/compiler/nir/nir.h
src/compiler/nir/nir_lower_non_uniform_access.c
src/compiler/nir/nir_opt_non_uniform_access.c

index 02f94e0..b802287 100644 (file)
@@ -5448,6 +5448,7 @@ enum nir_lower_non_uniform_access_type {
    nir_lower_non_uniform_ssbo_access    = (1 << 1),
    nir_lower_non_uniform_texture_access = (1 << 2),
    nir_lower_non_uniform_image_access   = (1 << 3),
+   nir_lower_non_uniform_get_ssbo_size  = (1 << 4),
 };
 
 /* Given the nir_src used for the resource, return the channels which might be non-uniform. */
index 1d7a016..1116158 100644 (file)
@@ -254,6 +254,12 @@ nir_lower_non_uniform_access_impl(nir_function_impl *impl,
                   progress = true;
                break;
 
+            case nir_intrinsic_get_ssbo_size:
+               if ((options->types & nir_lower_non_uniform_get_ssbo_size) &&
+                   lower_non_uniform_access_intrin(options, &b, intrin, 0))
+                  progress = true;
+               break;
+
             case nir_intrinsic_image_load:
             case nir_intrinsic_image_sparse_load:
             case nir_intrinsic_image_store:
index 7588333..182450a 100644 (file)
@@ -171,6 +171,10 @@ nir_has_non_uniform_access_impl(nir_function_impl *impl, enum nir_lower_non_unif
                if ((types & nir_lower_non_uniform_image_access) &&
                     has_non_uniform_access_intrin(intrin))
                   return true;
+            } else if (intrin->intrinsic == nir_intrinsic_get_ssbo_size) {
+               if ((types & nir_lower_non_uniform_get_ssbo_size) &&
+                   has_non_uniform_access_intrin(intrin))
+                  return true;
             } else {
                /* Nothing to do */
             }