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: bcd14756ee ('nir/lower_io_to_vector: add flat mode')
Signed-off-by: Rhys Perry <pendingchaos02@gmail.com>
Reviewed-by: Connor Abbott <cwabbott0@gmail.com>
This commit is contained in:
Rhys Perry 2019-11-14 15:31:52 +00:00
parent 01cacdb71e
commit 5404b7aaa3
1 changed files with 7 additions and 1 deletions

View File

@ -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(