Looks good to me. Reviewed-by: Ian Romanick <ian.d.roman...@intel.com>
On 07/08/2014 11:29 AM, Marek Olšák wrote: > From: Marek Olšák <marek.ol...@amd.com> > > 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. > --- > src/glsl/glsl_parser.yy | 8 ++++++++ > src/glsl/glsl_parser_extras.cpp | 2 ++ > src/glsl/glsl_parser_extras.h | 2 ++ > src/mesa/main/mtypes.h | 5 +++++ > 4 files changed, 17 insertions(+) > > diff --git a/src/glsl/glsl_parser.yy b/src/glsl/glsl_parser.yy > index b989749..4c87163 100644 > --- a/src/glsl/glsl_parser.yy > +++ b/src/glsl/glsl_parser.yy > @@ -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: > diff --git a/src/glsl/glsl_parser_extras.cpp b/src/glsl/glsl_parser_extras.cpp > index b327c2b..890123a 100644 > --- a/src/glsl/glsl_parser_extras.cpp > +++ b/src/glsl/glsl_parser_extras.cpp > @@ -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; > } > > /** > diff --git a/src/glsl/glsl_parser_extras.h b/src/glsl/glsl_parser_extras.h > index 1791816..f720d6a 100644 > --- a/src/glsl/glsl_parser_extras.h > +++ b/src/glsl/glsl_parser_extras.h > @@ -490,6 +490,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) \ > diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h > index a7126fd..b42a175 100644 > --- a/src/mesa/main/mtypes.h > +++ b/src/mesa/main/mtypes.h > @@ -3349,6 +3349,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.) > */ > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev