aboutsummaryrefslogtreecommitdiffstats
path: root/src/compiler
diff options
context:
space:
mode:
authorJonathan Marek <[email protected]>2019-12-15 18:50:29 -0500
committerMarge Bot <[email protected]>2019-12-19 21:26:52 +0000
commit06ae0674fd64215793878c4933065e1692d0e285 (patch)
tree00529fc34ce72478c0b79326f7db06753a5f4f20 /src/compiler
parente9a32af3bfb359d6ba484d01d6875ed4dfbc94ee (diff)
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 <[email protected]> Reviewed-by: Eric Anholt <[email protected]> Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3108> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3108>
Diffstat (limited to 'src/compiler')
-rw-r--r--src/compiler/nir/nir_linking_helpers.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/compiler/nir/nir_linking_helpers.c b/src/compiler/nir/nir_linking_helpers.c
index 8d7302c93c1..e1cf58f3514 100644
--- a/src/compiler/nir/nir_linking_helpers.c
+++ b/src/compiler/nir/nir_linking_helpers.c
@@ -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 */