From: Tapani Pälli Date: Tue, 4 Nov 2014 12:20:15 +0000 (+0200) Subject: glsl: throw error when using invariant(all) in a fragment shader X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=636db35c35d4420a308629cead3287c57458644d;p=mesa.git glsl: throw error when using invariant(all) in a fragment shader 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 Reviewed-by: Chris Forbes --- diff --git a/src/glsl/glsl_parser.yy b/src/glsl/glsl_parser.yy index 6160e265e79..6a55a4e6bf6 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) { + _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)",