[Mesa-dev] [PATCH] glsl: throw error when using invariant(all) in a fragment shader
Ian Romanick
idr at freedesktop.org
Thu Dec 4 14:11:24 PST 2014
On 11/04/2014 04:20 AM, Tapani Pälli wrote:
> Note that some of the GLSL specifications explicitly state this as
> compile error, some simply state that 'it is an error'.
>
> Signed-off-by: Tapani Pälli <tapani.palli at intel.com>
> ---
> src/glsl/glsl_parser.yy | 13 ++++++++++++-
> 1 file changed, 12 insertions(+), 1 deletion(-)
>
> diff --git a/src/glsl/glsl_parser.yy b/src/glsl/glsl_parser.yy
> index 6160e26..6a55a4e 100644
> --- a/src/glsl/glsl_parser.yy
> +++ b/src/glsl/glsl_parser.yy
> @@ -331,7 +331,18 @@ pragma_statement:
> | PRAGMA_OPTIMIZE_OFF EOL
> | PRAGMA_INVARIANT_ALL EOL
> {
> - if (!state->is_version(120, 100)) {
> + /* Pragma invariant(all) cannot be used in a fragment shader.
> + *
> + * Page 27 of the GLSL 1.20 spec, Page 53 of the GLSL ES 3.00 spec:
> + *
> + * "It is an error to use this pragma in a fragment shader."
> + */
> + if (state->is_version(120, 300) &&
> + state->stage == MESA_SHADER_FRAGMENT) {
So... this is allowed in GLSL ES 1.00? That seems weird. Do we have
any idea if other implementations allow it? It seems like we should
emit a warning, since it is illegal elsewhere...
> + _mesa_glsl_error(& @1, state,
> + "pragma `invariant(all)' cannot be used "
> + "in a fragment shader.");
> + } else if (!state->is_version(120, 100)) {
> _mesa_glsl_warning(& @1, state,
> "pragma `invariant(all)' not supported in %s "
> "(GLSL ES 1.00 or GLSL 1.20 required)",
>
More information about the mesa-dev
mailing list