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:
John Brooks
2017-05-15 01:47:38 -04:00
committed by Samuel Pitoiset
parent bf4d7671f4
commit 6e8f34a2de
3 changed files with 19 additions and 0 deletions

View File

@@ -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,

View File

@@ -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;

View File

@@ -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.