[Mesa-dev] [PATCH 06/26] glsl: update explicit location matching to support component qualifier

Timothy Arceri timothy.arceri at collabora.com
Mon Feb 29 01:17:46 UTC 2016


This is needed so we don't optimise away the varying when more than
one shares the same location.

Reviewed-by: Anuj Phogat <anuj.phogat at gmail.com>
Reviewed-by: Edward O'Callaghan <eocallaghan at alterapraxis.com>
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
---
 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 5326bfd..abf568b 100644
--- a/src/compiler/glsl/linker.cpp
+++ b/src/compiler/glsl/linker.cpp
@@ -2699,7 +2699,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.
     */
@@ -2712,8 +2712,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;
       }
    }
 
@@ -2727,7 +2727,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.5.0



More information about the mesa-dev mailing list