[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