[Mesa-dev] [PATCH] glsl: recognize ARB_shading_language_420pack to be enabled with 4.20+

Chris Forbes chrisf at ijw.co.nz
Fri Jul 24 14:31:49 PDT 2015


Reviewed-by: Chris Forbes <chrisf at ijw.co.nz>

On Sat, Jul 25, 2015 at 9:07 AM, Ilia Mirkin <imirkin at alum.mit.edu> wrote:
> The 420pack extension enables various GLSL rules that need to be applied
> to any GLSL 4.20+ shader even if the extension is not explicitly
> enabled.
>
> Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
> ---
>  src/glsl/glsl_parser.yy       | 18 +++++++++---------
>  src/glsl/glsl_parser_extras.h |  5 +++++
>  2 files changed, 14 insertions(+), 9 deletions(-)
>
> diff --git a/src/glsl/glsl_parser.yy b/src/glsl/glsl_parser.yy
> index 7de31d9..4cce5b8 100644
> --- a/src/glsl/glsl_parser.yy
> +++ b/src/glsl/glsl_parser.yy
> @@ -934,7 +934,7 @@ parameter_qualifier:
>        if (($1.flags.q.in || $1.flags.q.out) && ($2.flags.q.in || $2.flags.q.out))
>           _mesa_glsl_error(&@1, state, "duplicate in/out/inout qualifier");
>
> -      if (!state->ARB_shading_language_420pack_enable && $2.flags.q.constant)
> +      if (!state->has_420pack() && $2.flags.q.constant)
>           _mesa_glsl_error(&@1, state, "in/out/inout must come after const "
>                                        "or precise");
>
> @@ -946,7 +946,7 @@ parameter_qualifier:
>        if ($2.precision != ast_precision_none)
>           _mesa_glsl_error(&@1, state, "duplicate precision qualifier");
>
> -      if (!state->ARB_shading_language_420pack_enable && $2.flags.i != 0)
> +      if (!state->has_420pack() && $2.flags.i != 0)
>           _mesa_glsl_error(&@1, state, "precision qualifiers must come last");
>
>        $$ = $2;
> @@ -1458,7 +1458,7 @@ layout_qualifier_id:
>           }
>        }
>
> -      if ((state->ARB_shading_language_420pack_enable ||
> +      if ((state->has_420pack() ||
>             state->has_atomic_counters() ||
>             state->ARB_shader_storage_buffer_object_enable) &&
>            match_layout_qualifier("binding", $1, state) == 0) {
> @@ -1729,7 +1729,7 @@ type_qualifier:
>        if ($2.flags.q.invariant)
>           _mesa_glsl_error(&@1, state, "duplicate \"invariant\" qualifier");
>
> -      if (!state->ARB_shading_language_420pack_enable && $2.flags.q.precise)
> +      if (!state->has_420pack() && $2.flags.q.precise)
>           _mesa_glsl_error(&@1, state,
>                            "\"invariant\" must come after \"precise\"");
>
> @@ -1762,7 +1762,7 @@ type_qualifier:
>        if ($2.has_interpolation())
>           _mesa_glsl_error(&@1, state, "duplicate interpolation qualifier");
>
> -      if (!state->ARB_shading_language_420pack_enable &&
> +      if (!state->has_420pack() &&
>            ($2.flags.q.precise || $2.flags.q.invariant)) {
>           _mesa_glsl_error(&@1, state, "interpolation qualifiers must come "
>                            "after \"precise\" or \"invariant\"");
> @@ -1782,7 +1782,7 @@ type_qualifier:
>         * precise qualifiers since these are useful in ARB_separate_shader_objects.
>         * There is no clear spec guidance on this either.
>         */
> -      if (!state->ARB_shading_language_420pack_enable && $2.has_layout())
> +      if (!state->has_420pack() && $2.has_layout())
>           _mesa_glsl_error(&@1, state, "duplicate layout(...) qualifiers");
>
>        $$ = $1;
> @@ -1800,7 +1800,7 @@ type_qualifier:
>                            "duplicate auxiliary storage qualifier (centroid or sample)");
>        }
>
> -      if (!state->ARB_shading_language_420pack_enable &&
> +      if (!state->has_420pack() &&
>            ($2.flags.q.precise || $2.flags.q.invariant ||
>             $2.has_interpolation() || $2.has_layout())) {
>           _mesa_glsl_error(&@1, state, "auxiliary storage qualifiers must come "
> @@ -1818,7 +1818,7 @@ type_qualifier:
>        if ($2.has_storage())
>           _mesa_glsl_error(&@1, state, "duplicate storage qualifier");
>
> -      if (!state->ARB_shading_language_420pack_enable &&
> +      if (!state->has_420pack() &&
>            ($2.flags.q.precise || $2.flags.q.invariant || $2.has_interpolation() ||
>             $2.has_layout() || $2.has_auxiliary_storage())) {
>           _mesa_glsl_error(&@1, state, "storage qualifiers must come after "
> @@ -1834,7 +1834,7 @@ type_qualifier:
>        if ($2.precision != ast_precision_none)
>           _mesa_glsl_error(&@1, state, "duplicate precision qualifier");
>
> -      if (!state->ARB_shading_language_420pack_enable && $2.flags.i != 0)
> +      if (!state->has_420pack() && $2.flags.i != 0)
>           _mesa_glsl_error(&@1, state, "precision qualifiers must come last");
>
>        $$ = $2;
> diff --git a/src/glsl/glsl_parser_extras.h b/src/glsl/glsl_parser_extras.h
> index b65d53d..eb325f0 100644
> --- a/src/glsl/glsl_parser_extras.h
> +++ b/src/glsl/glsl_parser_extras.h
> @@ -231,6 +231,11 @@ struct _mesa_glsl_parse_state {
>        return ARB_gpu_shader_fp64_enable || is_version(400, 0);
>     }
>
> +   bool has_420pack() const
> +   {
> +      return ARB_shading_language_420pack_enable || is_version(420, 0);
> +   }
> +
>     void process_version_directive(YYLTYPE *locp, int version,
>                                    const char *ident);
>
> --
> 2.3.6
>
> _______________________________________________
> 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