mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-06-15 00:28:28 +02:00
Begin processing #extension directive
Nowhere near complete. It just parses correctly at this point.
This commit is contained in:
parent
ae4c4c0795
commit
e701761cc8
3 changed files with 75 additions and 2 deletions
|
|
@ -190,13 +190,13 @@ translation_unit:
|
|||
{
|
||||
_mesa_glsl_initialize_types(state);
|
||||
}
|
||||
external_declaration_list
|
||||
extension_statement_list external_declaration_list
|
||||
|
|
||||
{
|
||||
state->language_version = 110;
|
||||
_mesa_glsl_initialize_types(state);
|
||||
}
|
||||
external_declaration_list
|
||||
extension_statement_list external_declaration_list
|
||||
;
|
||||
|
||||
version_statement:
|
||||
|
|
@ -217,6 +217,20 @@ version_statement:
|
|||
}
|
||||
;
|
||||
|
||||
extension_statement_list:
|
||||
|
||||
| extension_statement_list extension_statement
|
||||
;
|
||||
|
||||
extension_statement:
|
||||
EXTENSION IDENTIFIER COLON IDENTIFIER EOL
|
||||
{
|
||||
if (!_mesa_glsl_process_extension($2, & @2, $4, & @4, state)) {
|
||||
YYERROR;
|
||||
}
|
||||
}
|
||||
;
|
||||
|
||||
external_declaration_list:
|
||||
external_declaration
|
||||
{
|
||||
|
|
|
|||
|
|
@ -71,6 +71,53 @@ _mesa_glsl_error(YYLTYPE *locp, _mesa_glsl_parse_state *state,
|
|||
}
|
||||
|
||||
|
||||
bool
|
||||
_mesa_glsl_process_extension(const char *name, YYLTYPE *name_locp,
|
||||
const char *behavior, YYLTYPE *behavior_locp,
|
||||
_mesa_glsl_parse_state *state)
|
||||
{
|
||||
enum {
|
||||
extension_disable,
|
||||
extension_enable,
|
||||
extension_require,
|
||||
extension_warn
|
||||
} ext_mode;
|
||||
bool error = false;
|
||||
|
||||
if (strcmp(behavior, "warn") == 0) {
|
||||
ext_mode = extension_warn;
|
||||
} else if (strcmp(behavior, "require") == 0) {
|
||||
ext_mode = extension_require;
|
||||
} else if (strcmp(behavior, "enable") == 0) {
|
||||
ext_mode = extension_enable;
|
||||
} else if (strcmp(behavior, "disable") == 0) {
|
||||
ext_mode = extension_disable;
|
||||
} else {
|
||||
_mesa_glsl_error(behavior_locp, state,
|
||||
"Unknown extension behavior `%s'",
|
||||
behavior);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (strcmp(name, "all") == 0) {
|
||||
if ((ext_mode == extension_enable) || (ext_mode == extension_require)) {
|
||||
_mesa_glsl_error(name_locp, state, "Cannot %s all extensions",
|
||||
(ext_mode == extension_enable)
|
||||
? "enable" : "require");
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
if (ext_mode == extension_require) {
|
||||
_mesa_glsl_error(name_locp, state, "Unknown extension `%s'",
|
||||
name);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
ast_node::~ast_node()
|
||||
{
|
||||
/* empty */
|
||||
|
|
|
|||
|
|
@ -85,6 +85,18 @@ extern int _mesa_glsl_lex(union YYSTYPE *yylval, YYLTYPE *yylloc,
|
|||
|
||||
extern int _mesa_glsl_parse(struct _mesa_glsl_parse_state *);
|
||||
|
||||
/**
|
||||
* Process elements of the #extension directive
|
||||
*
|
||||
* \return
|
||||
* If \c name and \c behavior are valid, \c true is returned. Otherwise
|
||||
* \c false is returned.
|
||||
*/
|
||||
extern bool _mesa_glsl_process_extension(const char *name, YYLTYPE *name_locp,
|
||||
const char *behavior,
|
||||
YYLTYPE *behavior_locp,
|
||||
_mesa_glsl_parse_state *state);
|
||||
|
||||
/**
|
||||
* Get the textual name of the specified shader target
|
||||
*/
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue