nir: fix assign_io_var_locations for vertex inputs

Also fixes fragment inputs using the wrong "base" value (which was working
only because FRAG_RESULT_DATA0 is less than VARYING_SLOT_VAR0)

Signed-off-by: Jonathan Marek <jonathan@marek.ca>
Reviewed-by: Eric Anholt <eric@anholt.net>
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3108>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3108>
This commit is contained in:
Jonathan Marek 2019-12-15 18:50:29 -05:00 committed by Marge Bot
parent e9a32af3bf
commit 06ae0674fd
1 changed files with 9 additions and 3 deletions

View File

@ -1007,9 +1007,6 @@ nir_assign_io_var_locations(struct exec_list *var_list, unsigned *size,
sort_varyings(var_list);
const int base = stage == MESA_SHADER_FRAGMENT ?
(int) FRAG_RESULT_DATA0 : (int) VARYING_SLOT_VAR0;
int UNUSED last_loc = 0;
bool last_partial = false;
nir_foreach_variable(var, var_list) {
@ -1019,6 +1016,15 @@ nir_assign_io_var_locations(struct exec_list *var_list, unsigned *size,
type = glsl_get_array_element(type);
}
int base;
if (var->data.mode == nir_var_shader_in && stage == MESA_SHADER_VERTEX)
base = VERT_ATTRIB_GENERIC0;
else if (var->data.mode == nir_var_shader_out &&
stage == MESA_SHADER_FRAGMENT)
base = FRAG_RESULT_DATA0;
else
base = VARYING_SLOT_VAR0;
unsigned var_size;
if (var->data.compact) {
/* compact variables must be arrays of scalars */