[Mesa-dev] [PATCH] glsl: fix duplicated layout qualifier detection for GS

Jordan Justen jljusten at gmail.com
Wed Jul 2 12:47:37 PDT 2014


Reviewed-by: Jordan Justen <jordan.l.justen at intel.com>

On Wed, Jul 2, 2014 at 12:38 AM, Samuel Iglesias Gonsalvez
<siglesias at igalia.com> wrote:
> This patch fixes the duplicated layout qualifier detection
> for geometry shader's layout qualifiers.
>
> Also it makes the detection code more legible by defining
> allowed_duplicates_mask variable.
>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=80778
>
> Signed-off-by: Samuel Iglesias Gonsalvez <siglesias at igalia.com>
> ---
>  src/glsl/ast_type.cpp | 22 ++++++++++++++++------
>  1 file changed, 16 insertions(+), 6 deletions(-)
>
> diff --git a/src/glsl/ast_type.cpp b/src/glsl/ast_type.cpp
> index 017f23d..de4c1a4 100644
> --- a/src/glsl/ast_type.cpp
> +++ b/src/glsl/ast_type.cpp
> @@ -122,18 +122,28 @@ ast_type_qualifier::merge_qualifier(YYLTYPE *loc,
>     ubo_binding_mask.flags.q.explicit_binding = 1;
>     ubo_binding_mask.flags.q.explicit_offset = 1;
>
> +   ast_type_qualifier stream_layout_mask;
> +   stream_layout_mask.flags.i = 0;
> +   stream_layout_mask.flags.q.stream = 1;
> +
>     /* Uniform block layout qualifiers get to overwrite each
>      * other (rightmost having priority), while all other
>      * qualifiers currently don't allow duplicates.
> -    *
> -    * Geometry shaders can have several layout qualifiers
> +    */
> +   ast_type_qualifier allowed_duplicates_mask;
> +   allowed_duplicates_mask.flags.i =
> +      ubo_mat_mask.flags.i |
> +      ubo_layout_mask.flags.i |
> +      ubo_binding_mask.flags.i;
> +
> +   /* Geometry shaders can have several layout qualifiers
>      * assigning different stream values.
>      */
> +   if (state->stage == MESA_SHADER_GEOMETRY)
> +      allowed_duplicates_mask.flags.i |=
> +         stream_layout_mask.flags.i;
>
> -   if ((state->stage != MESA_SHADER_GEOMETRY) &&
> -       (this->flags.i & q.flags.i & ~(ubo_mat_mask.flags.i |
> -                                     ubo_layout_mask.flags.i |
> -                                      ubo_binding_mask.flags.i)) != 0) {
> +   if ((this->flags.i & q.flags.i & ~allowed_duplicates_mask.flags.i) != 0) {
>        _mesa_glsl_error(loc, state,
>                        "duplicate layout qualifiers used");
>        return false;
> --
> 2.0.0
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list