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; }