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:
parent
e9a32af3bf
commit
06ae0674fd
|
@ -1007,9 +1007,6 @@ nir_assign_io_var_locations(struct exec_list *var_list, unsigned *size,
|
||||||
|
|
||||||
sort_varyings(var_list);
|
sort_varyings(var_list);
|
||||||
|
|
||||||
const int base = stage == MESA_SHADER_FRAGMENT ?
|
|
||||||
(int) FRAG_RESULT_DATA0 : (int) VARYING_SLOT_VAR0;
|
|
||||||
|
|
||||||
int UNUSED last_loc = 0;
|
int UNUSED last_loc = 0;
|
||||||
bool last_partial = false;
|
bool last_partial = false;
|
||||||
nir_foreach_variable(var, var_list) {
|
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);
|
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;
|
unsigned var_size;
|
||||||
if (var->data.compact) {
|
if (var->data.compact) {
|
||||||
/* compact variables must be arrays of scalars */
|
/* compact variables must be arrays of scalars */
|
||||||
|
|
Loading…
Reference in New Issue