glsl: fix explicit location validation for doubles
authorTimothy Arceri <timothy.arceri@collabora.com>
Mon, 23 May 2016 03:07:14 +0000 (13:07 +1000)
committerTimothy Arceri <timothy.arceri@collabora.com>
Tue, 24 May 2016 01:30:51 +0000 (11:30 +1000)
Previously we would fail to find a match for the second half of a
dvec4 as 'i' would get incremented to 1 before we added the var to
the array at component 0.

Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
src/compiler/glsl/link_varyings.cpp

index 1782a967ebf197f12b2a6e318090da15cdda9a17..dd5c9cc608903ac70c3853dcd04ae5f555e6eee6 100644 (file)
@@ -392,7 +392,8 @@ cross_validate_outputs_to_inputs(struct gl_shader_program *prog,
          }
 
          while (idx < slot_limit) {
-            for (unsigned i = var->data.location_frac; i < last_comp; i++) {
+            unsigned i = var->data.location_frac;
+            while (i < last_comp) {
                if (explicit_locations[idx][i] != NULL) {
                   linker_error(prog,
                                "%s shader has multiple outputs explicitly "
@@ -418,6 +419,7 @@ cross_validate_outputs_to_inputs(struct gl_shader_program *prog,
                }
 
                explicit_locations[idx][i] = var;
+               i++;
 
                /* We need to do some special handling for doubles as dvec3 and
                 * dvec4 consume two consecutive locations. We don't need to