glsl: Conditionally allow redeclaration of built-in variables
Conditional on allow_glsl_builtin_variable_redeclaration driconf option. v2 (Samuel Pitoiset): - Rename allow_glsl_builtin_redeclaration -> allow_glsl_builtin_variable_redeclaration - style: put spaces after 'if' Signed-off-by: John Brooks <john@fastquake.com> Reviewed-by: Edward O'Callaghan <funfunctor@folklore1984.net> Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
This commit is contained in:

committed by
Samuel Pitoiset

parent
bf4d7671f4
commit
6e8f34a2de
@@ -4276,6 +4276,22 @@ get_variable_being_redeclared(ir_variable *var, YYLTYPE loc,
|
|||||||
*/
|
*/
|
||||||
earlier->data.precision = var->data.precision;
|
earlier->data.precision = var->data.precision;
|
||||||
|
|
||||||
|
} else if (earlier->data.how_declared == ir_var_declared_implicitly &&
|
||||||
|
state->allow_builtin_variable_redeclaration) {
|
||||||
|
/* Allow verbatim redeclarations of built-in variables. Not explicitly
|
||||||
|
* valid, but some applications do it.
|
||||||
|
*/
|
||||||
|
if (earlier->data.mode != var->data.mode &&
|
||||||
|
!(earlier->data.mode == ir_var_system_value &&
|
||||||
|
var->data.mode == ir_var_shader_in)) {
|
||||||
|
_mesa_glsl_error(&loc, state,
|
||||||
|
"redeclaration of `%s' with incorrect qualifiers",
|
||||||
|
var->name);
|
||||||
|
} else if (earlier->type != var->type) {
|
||||||
|
_mesa_glsl_error(&loc, state,
|
||||||
|
"redeclaration of `%s' has incorrect type",
|
||||||
|
var->name);
|
||||||
|
}
|
||||||
} else if (allow_all_redeclarations) {
|
} else if (allow_all_redeclarations) {
|
||||||
if (earlier->data.mode != var->data.mode) {
|
if (earlier->data.mode != var->data.mode) {
|
||||||
_mesa_glsl_error(&loc, state,
|
_mesa_glsl_error(&loc, state,
|
||||||
|
@@ -305,6 +305,8 @@ _mesa_glsl_parse_state::_mesa_glsl_parse_state(struct gl_context *_ctx,
|
|||||||
sizeof(this->atomic_counter_offsets));
|
sizeof(this->atomic_counter_offsets));
|
||||||
this->allow_extension_directive_midshader =
|
this->allow_extension_directive_midshader =
|
||||||
ctx->Const.AllowGLSLExtensionDirectiveMidShader;
|
ctx->Const.AllowGLSLExtensionDirectiveMidShader;
|
||||||
|
this->allow_builtin_variable_redeclaration =
|
||||||
|
ctx->Const.AllowGLSLBuiltinVariableRedeclaration;
|
||||||
|
|
||||||
this->cs_input_local_size_variable_specified = false;
|
this->cs_input_local_size_variable_specified = false;
|
||||||
|
|
||||||
|
@@ -842,6 +842,7 @@ struct _mesa_glsl_parse_state {
|
|||||||
unsigned atomic_counter_offsets[MAX_COMBINED_ATOMIC_BUFFERS];
|
unsigned atomic_counter_offsets[MAX_COMBINED_ATOMIC_BUFFERS];
|
||||||
|
|
||||||
bool allow_extension_directive_midshader;
|
bool allow_extension_directive_midshader;
|
||||||
|
bool allow_builtin_variable_redeclaration;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Known subroutine type declarations.
|
* Known subroutine type declarations.
|
||||||
|
Reference in New Issue
Block a user