From 0317dfcd9b32e37d5a993662c8cab75fbdbed44e Mon Sep 17 00:00:00 2001 From: Timothy Arceri Date: Tue, 22 Dec 2015 16:37:40 +1100 Subject: [PATCH] glsl: update explicit location matching to support component qualifier This is needed so we don't optimise away the varying when more than one shares the same location. Reviewed-by: Anuj Phogat Reviewed-by: Edward O'Callaghan Reviewed-by: Kenneth Graunke --- src/compiler/glsl/linker.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/compiler/glsl/linker.cpp b/src/compiler/glsl/linker.cpp index 7bd795c9a38..975b299db55 100644 --- a/src/compiler/glsl/linker.cpp +++ b/src/compiler/glsl/linker.cpp @@ -2843,7 +2843,7 @@ match_explicit_outputs_to_inputs(struct gl_shader_program *prog, gl_shader *consumer) { glsl_symbol_table parameters; - ir_variable *explicit_locations[MAX_VARYING] = { NULL }; + ir_variable *explicit_locations[MAX_VARYING][4] = { {NULL, NULL} }; /* Find all shader outputs in the "producer" stage. */ @@ -2856,8 +2856,8 @@ match_explicit_outputs_to_inputs(struct gl_shader_program *prog, if (var->data.explicit_location && var->data.location >= VARYING_SLOT_VAR0) { const unsigned idx = var->data.location - VARYING_SLOT_VAR0; - if (explicit_locations[idx] == NULL) - explicit_locations[idx] = var; + if (explicit_locations[idx][var->data.location_frac] == NULL) + explicit_locations[idx][var->data.location_frac] = var; } } @@ -2871,7 +2871,8 @@ match_explicit_outputs_to_inputs(struct gl_shader_program *prog, ir_variable *output = NULL; if (input->data.explicit_location && input->data.location >= VARYING_SLOT_VAR0) { - output = explicit_locations[input->data.location - VARYING_SLOT_VAR0]; + output = explicit_locations[input->data.location - VARYING_SLOT_VAR0] + [input->data.location_frac]; if (output != NULL){ input->data.is_unmatched_generic_inout = 0; -- 2.30.2