From: Samuel Iglesias Gonsalvez <sigles...@igalia.com> From GLSL ES 3.0, chapter 4.3.7 "Interface Blocks", page 38:
"GLSL ES 3.0 does not support interface blocks for shader inputs or outputs." and from GLSL ES 3.0, chapter 4.6.1 "The invariant qualifier", page 52. "Only variables output from a shader can be candidates for invariance. This includes user-defined output variables and the built-in output variables. As only outputs can be declared as invariant, an invariant output from one shader stage will still match an input of a subsequent stage without the input being declared as invariant." From GLSL ES 1.0, chapter 4.6.1 "The invariant qualifier", page 37. "Only the following variables may be declared as invariant: * Built-in special variables output from the vertex shader * Varying variables output from the vertex shader * Built-in special variables input to the fragment shader * Varying variables input to the fragment shader * Built-in special variables output from the fragment shader." This patch fixes the following dEQP tests: dEQP-GLES3.functional.shaders.declarations.invalid_declarations.invariant_uniform_block_2_vertex dEQP-GLES3.functional.shaders.declarations.invalid_declarations.invariant_uniform_block_2_fragment No piglit regressions. Signed-off-by: Samuel Iglesias Gonsalvez <sigles...@igalia.com> --- src/glsl/glsl_parser.yy | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/glsl/glsl_parser.yy b/src/glsl/glsl_parser.yy index 55b3a7d..489d3af 100644 --- a/src/glsl/glsl_parser.yy +++ b/src/glsl/glsl_parser.yy @@ -2519,6 +2519,31 @@ basic_interface_block: "interface block member does not match " "the interface block"); } + /* From GLSL ES 3.0, chapter 4.3.7 "Interface Blocks", page 38: + * + * "GLSL ES 3.0 does not support interface blocks for shader inputs or + * outputs." + * + * And from GLSL ES 3.0, chapter 4.6.1 "The invariant qualifier", page 52. + * + * "Only variables output from a shader can be candidates for + * invariance. This includes user-defined output variables and the + * built-in output variables. As only outputs can be declared as + * invariant, an invariant output from one shader stage will + * still match an input of a subsequent stage without the input being + * declared as invariant." + * + * From GLSL ES 1.0, chapter 4.6.1 "The invariant qualifier", page 37. + * + * "Only the following variables may be declared as invariant: + * * Built-in special variables output from the vertex shader + * * Varying variables output from the vertex shader + * * Built-in special variables input to the fragment shader + * * Varying variables input to the fragment shader + * * Built-in special variables output from the fragment shader." + */ + if (state->es_shader && qualifier.flags.q.invariant) + _mesa_glsl_error(&@1, state, "invariant qualifiers cannot be used with interface blocks in GLSL ES"); } $$ = block; -- 2.1.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev