Module: Mesa
Branch: master
Commit: 5404b7aaa36fad18df19e12abcc8af69014e74c2
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=5404b7aaa36fad18df19e12abcc8af69014e74c2

Author: Rhys Perry <[email protected]>
Date:   Thu Nov 14 15:31:52 2019 +0000

nir/lower_io_to_vector: don't create arrays when not needed

Some backends require that there are no array varyings.

If there were no arrays in the input shader, the pass shouldn't have to
create new ones.

Closes: https://gitlab.freedesktop.org/mesa/mesa/issues/2103
Fixes: bcd14756eec ('nir/lower_io_to_vector: add flat mode')
Signed-off-by: Rhys Perry <[email protected]>
Reviewed-by: Connor Abbott <[email protected]>

---

 src/compiler/nir/nir_lower_io_to_vector.c | 8 +++++++-
 1 file changed, 7 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 0ef40216da6..82c4bdf8749 100644
--- a/src/compiler/nir/nir_lower_io_to_vector.c
+++ b/src/compiler/nir/nir_lower_io_to_vector.c
@@ -184,7 +184,10 @@ get_flat_type(const nir_shader *shader, nir_variable 
*old_vars[MAX_SLOTS][4],
    if (num_vars <= 1)
       return NULL;
 
-   return glsl_array_type(glsl_vector_type(base, 4), slots, 0);
+   if (slots == 1)
+      return glsl_vector_type(base, 4);
+   else
+      return glsl_array_type(glsl_vector_type(base, 4), slots, 0);
 }
 
 static bool
@@ -340,6 +343,9 @@ build_array_deref_of_new_var_flat(nir_shader *shader,
       deref = nir_build_deref_array(b, deref, index);
    }
 
+   if (!glsl_type_is_array(deref->type))
+      return deref;
+
    bool vs_in = shader->info.stage == MESA_SHADER_VERTEX &&
                 new_var->data.mode == nir_var_shader_in;
    return nir_build_deref_array(

_______________________________________________
mesa-commit mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to