diff options
Diffstat (limited to 'src/compiler/nir')
-rw-r--r-- | src/compiler/nir/nir_lower_io_to_vector.c | 8 |
1 files changed, 7 insertions, 1 deletions
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( |