[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