Mesa (master): glsl: mark explicit uniforms as explicit in other stages too

Tapani Pälli tpalli at kemper.freedesktop.org
Fri Jan 15 05:29:31 UTC 2016


Module: Mesa
Branch: master
Commit: cf96bce0ca8b2d6b5d4641efea1f2feedc024957
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=cf96bce0ca8b2d6b5d4641efea1f2feedc024957

Author: Tapani Pälli <tapani.palli at intel.com>
Date:   Thu Jan 14 14:10:59 2016 +0200

glsl: mark explicit uniforms as explicit in other stages too

If shader declares uniform explicit location in one stage but
implicit in another, explicit location should be used. Patch marks
implicit uniforms as explicit if they were explicit in previous stage.
This makes sure that we don't treat them implicit later when assigning
locations.

Fixes following CTS test:
   ES31-CTS.explicit_uniform_location.uniform-loc-implicit-in-some-stages3

v2: move check to cross_validate_globals (Timothy)

Signed-off-by: Tapani Pälli <tapani.palli at intel.com>
Reviewed-by: Timothy Arceri <timothy.arceri at collabora.com>

---

 src/glsl/linker.cpp |   12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp
index 564c471..3f40c0b 100644
--- a/src/glsl/linker.cpp
+++ b/src/glsl/linker.cpp
@@ -992,7 +992,17 @@ cross_validate_globals(struct gl_shader_program *prog,
 
 	       existing->data.location = var->data.location;
 	       existing->data.explicit_location = true;
-	    }
+	    } else {
+               /* Check if uniform with implicit location was marked explicit
+                * by earlier shader stage. If so, mark it explicit in this stage
+                * too to make sure later processing does not treat it as
+                * implicit one.
+                */
+               if (existing->data.explicit_location) {
+	          var->data.location = existing->data.location;
+	          var->data.explicit_location = true;
+               }
+            }
 
             /* From the GLSL 4.20 specification:
              * "A link error will result if two compilation units in a program




More information about the mesa-commit mailing list