glsl: Recognize GLSL ES 1.00 keywords.

This commit is contained in:
Kenneth Graunke 2010-09-05 01:32:32 -07:00
parent 7dcfc44b72
commit c5e74871d9
4 changed files with 284 additions and 278 deletions

File diff suppressed because it is too large Load diff

View file

@ -46,6 +46,16 @@
} \
} while (0)
/* Handle reserved words in GLSL ES (version 100) */
#define TOKEN_OR_IDENTIFIER_ES(version, token) \
do { \
if (yyextra->es_shader) { \
return token; \
} else { \
TOKEN_OR_IDENTIFIER(version, token); \
} \
} while (0)
#define RESERVED_WORD(version, token) \
do { \
if (yyextra->language_version >= version) { \
@ -190,9 +200,9 @@ inout return INOUT_TOK;
uniform return UNIFORM;
varying return VARYING;
centroid TOKEN_OR_IDENTIFIER(120, CENTROID);
invariant TOKEN_OR_IDENTIFIER(120, INVARIANT);
invariant TOKEN_OR_IDENTIFIER_ES(120, INVARIANT);
flat TOKEN_OR_IDENTIFIER(130, FLAT);
flat TOKEN_OR_IDENTIFIER_ES(130, FLAT);
smooth TOKEN_OR_IDENTIFIER(130, SMOOTH);
noperspective TOKEN_OR_IDENTIFIER(130, NOPERSPECTIVE);
@ -327,16 +337,16 @@ namespace RESERVED_WORD(999, NAMESPACE);
using RESERVED_WORD(999, USING);
/* Additional reserved words in GLSL 1.20. */
lowp TOKEN_OR_IDENTIFIER(120, LOWP);
mediump TOKEN_OR_IDENTIFIER(120, MEDIUMP);
highp TOKEN_OR_IDENTIFIER(120, HIGHP);
precision TOKEN_OR_IDENTIFIER(120, PRECISION);
lowp TOKEN_OR_IDENTIFIER_ES(120, LOWP);
mediump TOKEN_OR_IDENTIFIER_ES(120, MEDIUMP);
highp TOKEN_OR_IDENTIFIER_ES(120, HIGHP);
precision TOKEN_OR_IDENTIFIER_ES(120, PRECISION);
/* Additional reserved words in GLSL 1.30. */
common TOKEN_OR_IDENTIFIER(130, COMMON);
partition TOKEN_OR_IDENTIFIER(130, PARTITION);
active TOKEN_OR_IDENTIFIER(130, ACTIVE);
superp TOKEN_OR_IDENTIFIER(130, SUPERP);
superp TOKEN_OR_IDENTIFIER_ES(130, SUPERP);
samplerBuffer TOKEN_OR_IDENTIFIER(130, SAMPLERBUFFER);
filter TOKEN_OR_IDENTIFIER(130, FILTER);
image1D TOKEN_OR_IDENTIFIER(130, IMAGE1D);

View file

@ -4529,16 +4529,16 @@ yyreduce:
/* Line 1464 of yacc.c */
#line 1152 "glsl_parser.ypp"
{
if (state->language_version < 130)
_mesa_glsl_error(& (yylsp[(1) - (1)]), state,
"precision qualifier forbidden "
"in GLSL %d.%d (1.30 or later "
"required)\n",
state->language_version / 100,
state->language_version % 100);
if (!state->es_shader && state->language_version < 130)
_mesa_glsl_error(& (yylsp[(1) - (1)]), state,
"precision qualifier forbidden "
"in GLSL %d.%d (1.30 or later "
"required)\n",
state->language_version / 100,
state->language_version % 100);
(yyval.n) = ast_precision_high;
;}
(yyval.n) = ast_precision_high;
;}
break;
case 217:
@ -4546,16 +4546,16 @@ yyreduce:
/* Line 1464 of yacc.c */
#line 1163 "glsl_parser.ypp"
{
if (state->language_version < 130)
_mesa_glsl_error(& (yylsp[(1) - (1)]), state,
"precision qualifier forbidden "
"in GLSL %d.%d (1.30 or later "
"required)\n",
state->language_version / 100,
state->language_version % 100);
if (!state->es_shader && state->language_version < 130)
_mesa_glsl_error(& (yylsp[(1) - (1)]), state,
"precision qualifier forbidden "
"in GLSL %d.%d (1.30 or later "
"required)\n",
state->language_version / 100,
state->language_version % 100);
(yyval.n) = ast_precision_medium;
;}
(yyval.n) = ast_precision_medium;
;}
break;
case 218:
@ -4563,16 +4563,16 @@ yyreduce:
/* Line 1464 of yacc.c */
#line 1174 "glsl_parser.ypp"
{
if (state->language_version < 130)
_mesa_glsl_error(& (yylsp[(1) - (1)]), state,
"precision qualifier forbidden "
"in GLSL %d.%d (1.30 or later "
"required)\n",
state->language_version / 100,
state->language_version % 100);
if (!state->es_shader && state->language_version < 130)
_mesa_glsl_error(& (yylsp[(1) - (1)]), state,
"precision qualifier forbidden "
"in GLSL %d.%d (1.30 or later "
"required)\n",
state->language_version / 100,
state->language_version % 100);
(yyval.n) = ast_precision_low;
;}
(yyval.n) = ast_precision_low;
;}
break;
case 219:

View file

@ -1149,39 +1149,39 @@ basic_type_specifier_nonarray:
;
precision_qualifier:
HIGHP {
if (state->language_version < 130)
_mesa_glsl_error(& @1, state,
"precision qualifier forbidden "
"in GLSL %d.%d (1.30 or later "
"required)\n",
state->language_version / 100,
state->language_version % 100);
HIGHP {
if (!state->es_shader && state->language_version < 130)
_mesa_glsl_error(& @1, state,
"precision qualifier forbidden "
"in GLSL %d.%d (1.30 or later "
"required)\n",
state->language_version / 100,
state->language_version % 100);
$$ = ast_precision_high;
}
| MEDIUMP {
if (state->language_version < 130)
_mesa_glsl_error(& @1, state,
"precision qualifier forbidden "
"in GLSL %d.%d (1.30 or later "
"required)\n",
state->language_version / 100,
state->language_version % 100);
$$ = ast_precision_high;
}
| MEDIUMP {
if (!state->es_shader && state->language_version < 130)
_mesa_glsl_error(& @1, state,
"precision qualifier forbidden "
"in GLSL %d.%d (1.30 or later "
"required)\n",
state->language_version / 100,
state->language_version % 100);
$$ = ast_precision_medium;
}
| LOWP {
if (state->language_version < 130)
_mesa_glsl_error(& @1, state,
"precision qualifier forbidden "
"in GLSL %d.%d (1.30 or later "
"required)\n",
state->language_version / 100,
state->language_version % 100);
$$ = ast_precision_medium;
}
| LOWP {
if (!state->es_shader && state->language_version < 130)
_mesa_glsl_error(& @1, state,
"precision qualifier forbidden "
"in GLSL %d.%d (1.30 or later "
"required)\n",
state->language_version / 100,
state->language_version % 100);
$$ = ast_precision_low;
}
$$ = ast_precision_low;
}
;
struct_specifier: