[Mesa-dev] [PATCH 1/2] glsl: Create and use a has_explicit_attrib_location() helper.
Ian Romanick
idr at freedesktop.org
Tue Sep 24 09:43:44 PDT 2013
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 <kenneth at whitecape.org>
> Cc: Paul Berry <stereotype441 at gmail.com>
> Cc: Ian Romanick <idr at freedesktop.org>
The series is
Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>
> ---
> 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);
>
>
More information about the mesa-dev
mailing list