On 12/01/2014 05:04 AM, Eduardo Lima Mitev wrote: > 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
I'm pretty sure you can't have an invariant uniform block in desktop OpenGL either. Should this change also apply universally to desktop OpenGL? > 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; > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev