[Mesa-dev] [Mesa-stable] [PATCH] glsl: remove ARB_compute_shader ext, always allow local_size_* qualifiers

Ian Romanick idr at freedesktop.org
Wed Aug 24 19:40:56 UTC 2016


On 08/24/2016 10:40 AM, Ilia Mirkin wrote:
> The GL_ARB_compute_shader spec does not make a mention of a #extension
> enable, nor a #define with the ext name. It follows that local_size_*
> should always be allowed in a compute shader stage, and the #extension
> support removed.
> 
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=97447#c7
> Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
> Cc: mesa-stable at lists.freedesktop.org
> ---
> 
> The change to exposing the gl_MaxCompute* constants is a little dodgy, arguably
> it should be exposed everywhere when compute functionality is available, but
> that is a little annoying to do, and is no worse than the previous state of
> things.
> 
>  src/compiler/glsl/builtin_variables.cpp  | 2 +-
>  src/compiler/glsl/glsl_lexer.ll          | 4 ++--
>  src/compiler/glsl/glsl_parser.yy         | 5 ++---
>  src/compiler/glsl/glsl_parser_extras.cpp | 1 -
>  src/compiler/glsl/glsl_parser_extras.h   | 7 -------
>  5 files changed, 5 insertions(+), 14 deletions(-)
> 
> diff --git a/src/compiler/glsl/builtin_variables.cpp b/src/compiler/glsl/builtin_variables.cpp
> index c9d8b1c..4f88170 100644
> --- a/src/compiler/glsl/builtin_variables.cpp
> +++ b/src/compiler/glsl/builtin_variables.cpp
> @@ -789,7 +789,7 @@ builtin_variable_generator::generate_constants()
>        }
>     }
>  
> -   if (state->is_version(430, 310) || state->ARB_compute_shader_enable) {
> +   if (state->is_version(430, 310) || state->stage == MESA_SHADER_COMPUTE) {
>        add_const("gl_MaxComputeAtomicCounterBuffers",
>                  state->Const.MaxComputeAtomicCounterBuffers);
>        add_const("gl_MaxComputeAtomicCounters",
> diff --git a/src/compiler/glsl/glsl_lexer.ll b/src/compiler/glsl/glsl_lexer.ll
> index 7be2b89..3324cde 100644
> --- a/src/compiler/glsl/glsl_lexer.ll
> +++ b/src/compiler/glsl/glsl_lexer.ll
> @@ -410,7 +410,7 @@ writeonly      KEYWORD_WITH_ALT(420, 300, 420, 310, yyextra->ARB_shader_image_lo
>  
>  atomic_uint     KEYWORD_WITH_ALT(420, 300, 420, 310, yyextra->ARB_shader_atomic_counters_enable, ATOMIC_UINT);
>  
> -shared          KEYWORD_WITH_ALT(430, 310, 430, 310, yyextra->ARB_compute_shader_enable, SHARED);
> +shared          KEYWORD_WITH_ALT(430, 310, 430, 310, yyextra->stage == MESA_SHADER_COMPUTE, SHARED);
>  
>  struct		return STRUCT;
>  void		return VOID_TOK;
> @@ -425,7 +425,7 @@ layout		{
>  		      || yyextra->ARB_uniform_buffer_object_enable
>  		      || yyextra->ARB_fragment_coord_conventions_enable
>                        || yyextra->ARB_shading_language_420pack_enable
> -                      || yyextra->ARB_compute_shader_enable
> +                      || yyextra->stage == MESA_SHADER_COMPUTE
>                        || yyextra->ARB_tessellation_shader_enable) {
>  		      return LAYOUT_TOK;
>  		   } else {
> diff --git a/src/compiler/glsl/glsl_parser.yy b/src/compiler/glsl/glsl_parser.yy
> index 4f4a83c..cf2fb60 100644
> --- a/src/compiler/glsl/glsl_parser.yy
> +++ b/src/compiler/glsl/glsl_parser.yy
> @@ -1570,10 +1570,9 @@ layout_qualifier_id:
>        for (int i = 0; i < 3; i++) {
>           if (match_layout_qualifier(local_size_qualifiers[i], $1,
>                                      state) == 0) {
> -            if (!state->has_compute_shader()) {
> +            if (state->stage != MESA_SHADER_COMPUTE) {
>                 _mesa_glsl_error(& @3, state,
> -                                "%s qualifier requires GLSL 4.30 or "
> -                                "GLSL ES 3.10 or ARB_compute_shader",
> +                                "%s qualifier only valid in a compute shader",
>                                  local_size_qualifiers[i]);
>                 YYERROR;
>              } else {
> diff --git a/src/compiler/glsl/glsl_parser_extras.cpp b/src/compiler/glsl/glsl_parser_extras.cpp
> index 14a5540..37aff38 100644
> --- a/src/compiler/glsl/glsl_parser_extras.cpp
> +++ b/src/compiler/glsl/glsl_parser_extras.cpp
> @@ -578,7 +578,6 @@ static const _mesa_glsl_extension _mesa_glsl_supported_extensions[] = {
>     EXT(ARB_ES3_1_compatibility),
>     EXT(ARB_ES3_2_compatibility),
>     EXT(ARB_arrays_of_arrays),
> -   EXT(ARB_compute_shader),

I think this will mean that having

#extension GL_ARB_compute_shader: require

will not compile.  That seems bad.

>     EXT(ARB_conservative_depth),
>     EXT(ARB_cull_distance),
>     EXT(ARB_derivative_control),
> diff --git a/src/compiler/glsl/glsl_parser_extras.h b/src/compiler/glsl/glsl_parser_extras.h
> index 0294ef7..e536606 100644
> --- a/src/compiler/glsl/glsl_parser_extras.h
> +++ b/src/compiler/glsl/glsl_parser_extras.h
> @@ -260,11 +260,6 @@ struct _mesa_glsl_parse_state {
>        return ARB_shading_language_420pack_enable || is_version(420, 310);
>     }
>  
> -   bool has_compute_shader() const
> -   {
> -      return ARB_compute_shader_enable || is_version(430, 310);
> -   }
> -
>     bool has_shader_io_blocks() const
>     {
>        /* The OES_geometry_shader_specification says:
> @@ -557,8 +552,6 @@ struct _mesa_glsl_parse_state {
>     bool ARB_ES3_2_compatibility_warn;
>     bool ARB_arrays_of_arrays_enable;
>     bool ARB_arrays_of_arrays_warn;
> -   bool ARB_compute_shader_enable;
> -   bool ARB_compute_shader_warn;
>     bool ARB_conservative_depth_enable;
>     bool ARB_conservative_depth_warn;
>     bool ARB_cull_distance_enable;
> 



More information about the mesa-dev mailing list