[Mesa-dev] [PATCH 03/11] glsl: Parse the "binding" keyword and store it in ast_type_qualifier.
Kenneth Graunke
kenneth at whitecape.org
Thu Jul 18 11:46:05 PDT 2013
On 07/18/2013 11:39 AM, Paul Berry wrote:
> On 17 July 2013 18:24, Kenneth Graunke <kenneth at whitecape.org
> <mailto:kenneth at whitecape.org>> wrote:
>
> Nothing actually uses this yet.
>
> Signed-off-by: Kenneth Graunke <kenneth at whitecape.org
> <mailto: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.
Yes, mostly. The YYERROR here causes it to stop parsing as well, but I
don't really know if that's a feature. All the other layout qualifiers
enforce the >= 0 check here in the parser, so I did likewise for symmetry.
But I do prefer handling all the range checking in one place, so I'm
happy to remove this and just keep the check 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 <mailto:mesa-dev at lists.freedesktop.org>
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
>
More information about the mesa-dev
mailing list