On Tue, Dec 9, 2014 at 2:52 AM, Eduardo Lima Mitev <el...@igalia.com> wrote: > From: Samuel Iglesias Gonsalvez <sigles...@igalia.com> > > GLSL 1.50 and GLSL 4.40 specs, they both say the same in > "Interface Blocks" section: > > "If no optional qualifier is used in a member-declaration, the qualification > of > the member includes all in, out, patch, uniform, or buffer as determined by > interface-qualifier. If optional qualifiers are used, they can include > interpolation qualifiers, auxiliary storage qualifiers, and storage qualifiers > and they must declare an input, output, or uniform member consistent with the > interface qualifier of the 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." > > 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> > > v2: > > - Enable this check for GLSL. > > Signed-off-by: Samuel Iglesias Gonsalvez <sigles...@igalia.com> > --- > src/glsl/glsl_parser.yy | 35 +++++++++++++++++++++++++++++++++++ > 1 file changed, 35 insertions(+) > > diff --git a/src/glsl/glsl_parser.yy b/src/glsl/glsl_parser.yy > index 7fb8c38..9f2a0a3 100644 > --- a/src/glsl/glsl_parser.yy > +++ b/src/glsl/glsl_parser.yy > @@ -2539,6 +2539,41 @@ 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.
I'd snip the rest of the quote after this. I don't think it makes the point clearer, and actually just makes it harder to see the important bit. > 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." > + * > + * From GLSL 4.40 and GLSL 1.50, section "Interface Blocks": > + * > + * "If no optional qualifier is used in a member-declaration, the > + * qualification of the member includes all in, out, patch, uniform, > + * or buffer as determined by interface-qualifier. I'd snip the quote before this. > If optional > + * qualifiers are used, they can include interpolation qualifiers, > + * auxiliary storage qualifiers, and storage qualifiers and they > must > + * declare an input, output, or uniform member consistent with the > + * interface qualifier of the block" > + */ > + if (qualifier.flags.q.invariant) > + _mesa_glsl_error(&@1, state, "invariant qualifiers cannot be > used with interface blocks members"); Try to line wrap this. With those comments fixed: Reviewed-by: Matt Turner <matts...@gmail.com> _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev