glsl: add a mechanism to allow #extension directives in the middle of shaders
This is needed to make Unigine Heaven 4.0 and Unigine Valley 1.0 work with sample shading. Also, if this is disabled, the error message at least makes sense now. Reviewed-by: Brian Paul <brianp@vmware.com> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
This commit is contained in:
parent
392c9f8dfe
commit
b0ff18bd34
|
@ -376,6 +376,14 @@ external_declaration_list:
|
|||
if ($2 != NULL)
|
||||
state->translation_unit.push_tail(& $2->link);
|
||||
}
|
||||
| external_declaration_list extension_statement {
|
||||
if (!state->allow_extension_directive_midshader) {
|
||||
_mesa_glsl_error(& @2, state,
|
||||
"#extension directive is not allowed "
|
||||
"in the middle of a shader");
|
||||
YYERROR;
|
||||
}
|
||||
}
|
||||
;
|
||||
|
||||
variable_identifier:
|
||||
|
|
|
@ -210,6 +210,8 @@ _mesa_glsl_parse_state::_mesa_glsl_parse_state(struct gl_context *_ctx,
|
|||
this->early_fragment_tests = false;
|
||||
memset(this->atomic_counter_offsets, 0,
|
||||
sizeof(this->atomic_counter_offsets));
|
||||
this->allow_extension_directive_midshader =
|
||||
ctx->Const.AllowGLSLExtensionDirectiveMidShader;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -493,6 +493,8 @@ struct _mesa_glsl_parse_state {
|
|||
|
||||
/** Atomic counter offsets by binding */
|
||||
unsigned atomic_counter_offsets[MAX_COMBINED_ATOMIC_BUFFERS];
|
||||
|
||||
bool allow_extension_directive_midshader;
|
||||
};
|
||||
|
||||
# define YYLLOC_DEFAULT(Current, Rhs, N) \
|
||||
|
|
|
@ -3362,6 +3362,11 @@ struct gl_constants
|
|||
*/
|
||||
GLuint ForceGLSLVersion;
|
||||
|
||||
/**
|
||||
* Allow GLSL #extension directives in the middle of shaders.
|
||||
*/
|
||||
GLboolean AllowGLSLExtensionDirectiveMidShader;
|
||||
|
||||
/**
|
||||
* Does the driver support real 32-bit integers? (Otherwise, integers are
|
||||
* simulated via floats.)
|
||||
|
|
Loading…
Reference in New Issue