[Mesa-dev] [PATCH 07/10] glsl: don't allow invariant qualifiers for interface blocks in GLSL ES
Eduardo Lima Mitev
elima at igalia.com
Mon Dec 1 05:04:47 PST 2014
From: Samuel Iglesias Gonsalvez <siglesias at 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 <siglesias at 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
More information about the mesa-dev
mailing list