diff options
author | Jonathan Marek <[email protected]> | 2019-12-15 18:50:29 -0500 |
---|---|---|
committer | Marge Bot <[email protected]> | 2019-12-19 21:26:52 +0000 |
commit | 06ae0674fd64215793878c4933065e1692d0e285 (patch) | |
tree | 00529fc34ce72478c0b79326f7db06753a5f4f20 /src/compiler | |
parent | e9a32af3bfb359d6ba484d01d6875ed4dfbc94ee (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.c | 12 |
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 */ |