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

Author: Faith Ekstrand <faith.ekstr...@collabora.com>
Date:   Thu Apr 27 14:51:49 2023 -0500

nir/lower_io_to_vector: Only call glsl_get_length() on arrays

We assumed that calling it on vectors would return 0 and then did a
MAX2(length, 1) to get 1 for vectors.  Instead, use a ternary so we
don't make assumptions about non-sensical values.

Reviewed-by: Karol Herbst <kher...@redhat.com>
Reviewed-by: Alyssa Rosenzweig <aly...@rosenzweig.io>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22580>

---

 src/compiler/nir/nir_lower_io_to_vector.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/compiler/nir/nir_lower_io_to_vector.c 
b/src/compiler/nir/nir_lower_io_to_vector.c
index 79ac0123394..3a90989d60a 100644
--- a/src/compiler/nir/nir_lower_io_to_vector.c
+++ b/src/compiler/nir/nir_lower_io_to_vector.c
@@ -309,7 +309,8 @@ create_new_io_vars(nir_shader *shader, nir_variable_mode 
mode,
             var->type = flat_type;
 
          nir_shader_add_variable(shader, var);
-         unsigned num_slots = MAX2(glsl_get_length(flat_type), 1);
+         unsigned num_slots =
+            glsl_type_is_array(flat_type) ? glsl_get_length(flat_type) : 1;
          for (unsigned i = 0; i < num_slots; i++) {
             for (unsigned j = 0; j < 4; j++)
                new_vars[loc + i][j] = var;

Reply via email to