[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