We won't split varyings marked as always active because there is no point in doing so. This means we need to mark both sides of the interface as always active otherwise we will have a mismatch and start removing things we shouldn't. --- src/compiler/glsl/link_varyings.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/src/compiler/glsl/link_varyings.cpp b/src/compiler/glsl/link_varyings.cpp index ed3bf416878..860e23b450e 100644 --- a/src/compiler/glsl/link_varyings.cpp +++ b/src/compiler/glsl/link_varyings.cpp @@ -2268,9 +2268,6 @@ assign_varying_locations(struct gl_context *ctx, } } - _mesa_hash_table_destroy(consumer_inputs, NULL); - _mesa_hash_table_destroy(consumer_interface_inputs, NULL); - for (unsigned i = 0; i < num_tfeedback_decls; ++i) { if (!tfeedback_decls[i].is_varying()) continue; @@ -2285,6 +2282,13 @@ assign_varying_locations(struct gl_context *ctx, /* Mark xfb varyings as always active */ matched_candidate->toplevel_var->data.always_active_io = 1; + ir_variable *const input_var = + linker::get_matching_input(mem_ctx, matched_candidate->toplevel_var, + consumer_inputs, + consumer_interface_inputs, + consumer_inputs_with_locations); + if (input_var) + input_var->data.always_active_io = 1; if (matched_candidate->toplevel_var->data.is_unmatched_generic_inout) { matched_candidate->toplevel_var->data.is_xfb_only = 1; @@ -2292,6 +2296,9 @@ assign_varying_locations(struct gl_context *ctx, } } + _mesa_hash_table_destroy(consumer_inputs, NULL); + _mesa_hash_table_destroy(consumer_interface_inputs, NULL); + uint8_t components[MAX_VARYINGS_INCL_PATCH] = {0}; const unsigned slots_used = matches.assign_locations( prog, components, reserved_slots); -- 2.13.6 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev