[Mesa-dev] [PATCH 03/11] glsl: Parse the "binding" keyword and store it in ast_type_qualifier.

Paul Berry stereotype441 at gmail.com
Thu Jul 18 11:39:57 PDT 2013


On 17 July 2013 18:24, Kenneth Graunke <kenneth at whitecape.org> wrote:

> Nothing actually uses this yet.
>
> Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
> ---
>  src/glsl/ast.h          | 14 ++++++++++++++
>  src/glsl/ast_type.cpp   |  6 +++++-
>  src/glsl/glsl_parser.yy | 12 ++++++++++++
>  3 files changed, 31 insertions(+), 1 deletion(-)
>
> diff --git a/src/glsl/ast.h b/src/glsl/ast.h
> index 6aede00..d98f1a3 100644
> --- a/src/glsl/ast.h
> +++ b/src/glsl/ast.h
> @@ -413,6 +413,12 @@ struct ast_type_qualifier {
>           */
>          unsigned explicit_index:1;
>
> +         /**
> +          * Flag set if GL_ARB_shading_language_420pack "binding" layout
> +          * qualifier is used.
> +          */
> +         unsigned explicit_binding:1;
> +
>           /** \name Layout qualifiers for GL_AMD_conservative_depth */
>           /** \{ */
>           unsigned depth_any:1;
> @@ -456,6 +462,14 @@ struct ast_type_qualifier {
>     int index;
>
>     /**
> +    * Binding specified via GL_ARB_shading_language_420pack's "binding"
> keyword.
> +    *
> +    * \note
> +    * This field is only valid if \c explicit_binding is set.
> +    */
> +   int binding;
> +
> +   /**
>      * Return true if and only if an interpolation qualifier is present.
>      */
>     bool has_interpolation() const;
> diff --git a/src/glsl/ast_type.cpp b/src/glsl/ast_type.cpp
> index 4cbb835..275b2a1 100644
> --- a/src/glsl/ast_type.cpp
> +++ b/src/glsl/ast_type.cpp
> @@ -71,7 +71,8 @@ ast_type_qualifier::has_layout() const
>            || this->flags.q.row_major
>            || this->flags.q.packed
>            || this->flags.q.explicit_location
> -          || this->flags.q.explicit_index;
> +          || this->flags.q.explicit_index
> +          || this->flags.q.explicit_binding;
>  }
>
>  bool
> @@ -145,6 +146,9 @@ ast_type_qualifier::merge_qualifier(YYLTYPE *loc,
>     if (q.flags.q.explicit_index)
>        this->index = q.index;
>
> +   if (q.flags.q.explicit_binding)
> +      this->binding = q.binding;
> +
>     return true;
>  }
>
> diff --git a/src/glsl/glsl_parser.yy b/src/glsl/glsl_parser.yy
> index 3867cf8..013b327 100644
> --- a/src/glsl/glsl_parser.yy
> +++ b/src/glsl/glsl_parser.yy
> @@ -1254,6 +1254,18 @@ layout_qualifier_id:
>           }
>        }
>
> +      if (state->ARB_shading_language_420pack_enable &&
> +          strcmp("binding", $1) == 0) {
> +         $$.flags.q.explicit_binding = 1;
> +
> +         if ($3 >= 0) {
>

Isn't this redundant with the check performed by validate_binding_qualifier
(which is added in patch 4)?  I'd rather not do the same check in two
places, and I have a minor preference to drop it from here and do it only
in validate_binding_qualifier.


> +            $$.binding = $3;
> +         } else {
> +            _mesa_glsl_error(& @3, state, "invalid binding %d
> specified\n", $3);
> +            YYERROR;
> +         }
> +      }
> +
>        /* If the identifier didn't match any known layout identifiers,
>         * emit an error.
>         */
> --
> 1.8.3.2
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20130718/93949a00/attachment.html>


More information about the mesa-dev mailing list