From: Rhys Perry Date: Thu, 14 Nov 2019 15:31:52 +0000 (+0000) Subject: nir/lower_io_to_vector: don't create arrays when not needed X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=5404b7aaa36fad18df19e12abcc8af69014e74c2;p=mesa.git 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 Reviewed-by: Connor Abbott --- 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(