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

Author: Faith Ekstrand <faith.ekstr...@collabora.com>
Date:   Tue Dec  5 10:28:22 2023 -0600

nir: Respect variable alignments in lower_vars_to_explicit_types

Reviewed-by: Karol Herbst <kher...@redhat.com>
Reviewed-by: Jesse Natalie <jenat...@microsoft.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26522>

---

 src/compiler/nir/nir_lower_io.c | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/src/compiler/nir/nir_lower_io.c b/src/compiler/nir/nir_lower_io.c
index 6d5c275a636..56415068b2c 100644
--- a/src/compiler/nir/nir_lower_io.c
+++ b/src/compiler/nir/nir_lower_io.c
@@ -2491,9 +2491,10 @@ lower_vars_to_explicit(nir_shader *shader,
       if (var->data.mode != mode)
          continue;
 
-      unsigned size, align;
+      unsigned size, alignment;
       const struct glsl_type *explicit_type =
-         glsl_get_explicit_type_for_size_align(var->type, type_info, &size, 
&align);
+         glsl_get_explicit_type_for_size_align(var->type, type_info,
+                                               &size, &alignment);
 
       if (explicit_type != var->type)
          var->type = explicit_type;
@@ -2502,9 +2503,12 @@ lower_vars_to_explicit(nir_shader *shader,
          glsl_type_is_struct_or_ifc(explicit_type) &&
          glsl_get_length(explicit_type) == 0;
 
-      assert(util_is_power_of_two_nonzero(align) || is_empty_struct ||
+      assert(util_is_power_of_two_nonzero(alignment) || is_empty_struct ||
              glsl_type_is_cmat(glsl_without_array(explicit_type)));
-      var->data.driver_location = ALIGN_POT(offset, align);
+      assert(util_is_power_of_two_or_zero(var->data.alignment));
+      alignment = MAX2(alignment, var->data.alignment);
+
+      var->data.driver_location = ALIGN_POT(offset, alignment);
       offset = var->data.driver_location + size;
       progress = true;
    }

Reply via email to