On 09/23/2013 08:22 PM, Kenneth Graunke wrote: > Explicit attribute locations are supported with GLSL 3.30, GLSL ES 3.00, > or "#extension GL_ARB_explicit_attrib_location: enable". Using a helper > function makes it easy to check for this. > > This enables support in GLSL 3.30, which was previously missing. > > Previously, we overrode the extension enable flag for ES 3.00. This is > not robust against a shader such as: > > #version 330 > #extension GL_ARB_explicit_attrib_location : disable > > Disabling extensions should not remove core language functionality. > > Signed-off-by: Kenneth Graunke <[email protected]> > Cc: Paul Berry <[email protected]> > Cc: Ian Romanick <[email protected]>
The series is Reviewed-by: Ian Romanick <[email protected]> > --- > src/glsl/ast_to_hir.cpp | 2 +- > src/glsl/glsl_parser.yy | 2 +- > src/glsl/glsl_parser_extras.cpp | 4 ---- > src/glsl/glsl_parser_extras.h | 5 +++++ > 4 files changed, 7 insertions(+), 6 deletions(-) > > diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp > index 2316cf8..0859d9e 100644 > --- a/src/glsl/ast_to_hir.cpp > +++ b/src/glsl/ast_to_hir.cpp > @@ -2842,7 +2842,7 @@ ast_declarator_list::hir(exec_list *instructions, > * any extension that adds the 'layout' keyword. > */ > if (!state->is_version(130, 300) > - && !state->ARB_explicit_attrib_location_enable > + && !state->has_explicit_attrib_location() > && !state->ARB_fragment_coord_conventions_enable) { > if (this->type->qualifier.flags.q.out) { > _mesa_glsl_error(& loc, state, > diff --git a/src/glsl/glsl_parser.yy b/src/glsl/glsl_parser.yy > index fa6e205..56ca4ad 100644 > --- a/src/glsl/glsl_parser.yy > +++ b/src/glsl/glsl_parser.yy > @@ -1262,7 +1262,7 @@ layout_qualifier_id: > { > memset(& $$, 0, sizeof($$)); > > - if (state->ARB_explicit_attrib_location_enable) { > + if (state->has_explicit_attrib_location()) { > if (strcmp("location", $1) == 0) { > $$.flags.q.explicit_location = 1; > > diff --git a/src/glsl/glsl_parser_extras.cpp b/src/glsl/glsl_parser_extras.cpp > index cac5a18..a2b52ef 100644 > --- a/src/glsl/glsl_parser_extras.cpp > +++ b/src/glsl/glsl_parser_extras.cpp > @@ -303,10 +303,6 @@ > _mesa_glsl_parse_state::process_version_directive(YYLTYPE *locp, int version, > if (this->language_version >= 140) { > this->ARB_uniform_buffer_object_enable = true; > } > - > - if (this->language_version == 300 && this->es_shader) { > - this->ARB_explicit_attrib_location_enable = true; > - } > } > > extern "C" { > diff --git a/src/glsl/glsl_parser_extras.h b/src/glsl/glsl_parser_extras.h > index 364a983..27ebbcf 100644 > --- a/src/glsl/glsl_parser_extras.h > +++ b/src/glsl/glsl_parser_extras.h > @@ -121,6 +121,11 @@ struct _mesa_glsl_parse_state { > return check_version(130, 300, locp, "bit-wise operations are > forbidden"); > } > > + bool has_explicit_attrib_location() const > + { > + return ARB_explicit_attrib_location_enable || is_version(330, 300); > + } > + > void process_version_directive(YYLTYPE *locp, int version, > const char *ident); > > _______________________________________________ mesa-dev mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/mesa-dev
