[Mesa-dev] [PATCH 13/20] glsl/es3.1: Allow atomic counters in GLSL ES 3.10

Ilia Mirkin imirkin at alum.mit.edu
Wed Apr 29 20:57:13 PDT 2015


On Wed, Apr 29, 2015 at 7:26 PM, Ian Romanick <idr at freedesktop.org> wrote:
> From: Ian Romanick <ian.d.romanick at intel.com>
>
> Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
> ---
>  src/glsl/builtin_variables.cpp  | 35 +++++++++++++++++++++++++++++++----
>  src/glsl/glsl_parser_extras.cpp | 10 ++++++++++
>  src/glsl/glsl_parser_extras.h   | 12 +++++++++++-
>  3 files changed, 52 insertions(+), 5 deletions(-)
>
> diff --git a/src/glsl/builtin_variables.cpp b/src/glsl/builtin_variables.cpp
> index 9d0b272..6806aa1 100644
> --- a/src/glsl/builtin_variables.cpp
> +++ b/src/glsl/builtin_variables.cpp
> @@ -656,16 +656,43 @@ builtin_variable_generator::generate_constants()
>     if (state->has_atomic_counters()) {
>        add_const("gl_MaxVertexAtomicCounters",
>                  state->Const.MaxVertexAtomicCounters);
> -      add_const("gl_MaxGeometryAtomicCounters",
> -                state->Const.MaxGeometryAtomicCounters);
>        add_const("gl_MaxFragmentAtomicCounters",
>                  state->Const.MaxFragmentAtomicCounters);
>        add_const("gl_MaxCombinedAtomicCounters",
>                  state->Const.MaxCombinedAtomicCounters);
>        add_const("gl_MaxAtomicCounterBindings",
>                  state->Const.MaxAtomicBufferBindings);
> -      add_const("gl_MaxTessControlAtomicCounters", 0);
> -      add_const("gl_MaxTessEvaluationAtomicCounters", 0);
> +
> +      /* When Mesa adds support for GL_OES_geometry_shader and
> +       * GL_OES_tessellation_shader, this will need to change.
> +       */
> +      if (!state->es_shader) {
> +         add_const("gl_MaxGeometryAtomicCounters",
> +                   state->Const.MaxGeometryAtomicCounters);
> +         add_const("gl_MaxTessControlAtomicCounters", 0);
> +         add_const("gl_MaxTessEvaluationAtomicCounters", 0);
> +      }
> +   }
> +
> +   if (state->is_version(420, 310)) {
> +      add_const("gl_MaxVertexAtomicCounterBuffers",
> +                state->Const.MaxVertexAtomicCounterBuffers);
> +      add_const("gl_MaxFragmentAtomicCounterBuffers",
> +                state->Const.MaxFragmentAtomicCounterBuffers);
> +      add_const("gl_MaxCombinedAtomicCounterBuffers",
> +                state->Const.MaxCombinedAtomicCounterBuffers);
> +      add_const("gl_MaxAtomicCounterBufferSize",
> +                state->Const.MaxAtomicCounterBufferSize);
> +
> +      /* When Mesa adds support for GL_OES_geometry_shader and
> +       * GL_OES_tessellation_shader, this will need to change.
> +       */
> +      if (!state->es_shader) {
> +         add_const("gl_MaxGeometryAtomicCounterBuffers",
> +                   state->Const.MaxGeometryAtomicCounterBuffers);
> +         add_const("gl_MaxTessControlAtomicCounterBuffers", 0);
> +         add_const("gl_MaxTessEvaluationAtomicCounterBuffers", 0);
> +      }
>     }
>
>     if (state->is_version(430, 0) || state->ARB_compute_shader_enable) {
> diff --git a/src/glsl/glsl_parser_extras.cpp b/src/glsl/glsl_parser_extras.cpp
> index 91f225e..59e1d6e 100644
> --- a/src/glsl/glsl_parser_extras.cpp
> +++ b/src/glsl/glsl_parser_extras.cpp
> @@ -117,6 +117,16 @@ _mesa_glsl_parse_state::_mesa_glsl_parse_state(struct gl_context *_ctx,
>     this->Const.MaxFragmentAtomicCounters = ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxAtomicCounters;
>     this->Const.MaxCombinedAtomicCounters = ctx->Const.MaxCombinedAtomicCounters;
>     this->Const.MaxAtomicBufferBindings = ctx->Const.MaxAtomicBufferBindings;
> +   this->Const.MaxVertexAtomicCounterBuffers =
> +      ctx->Const.Program[MESA_SHADER_VERTEX].MaxAtomicBuffers;
> +   this->Const.MaxGeometryAtomicCounterBuffers =
> +      ctx->Const.Program[MESA_SHADER_GEOMETRY].MaxAtomicBuffers;
> +   this->Const.MaxFragmentAtomicCounterBuffers =
> +      ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxAtomicBuffers;
> +   this->Const.MaxCombinedAtomicCounterBuffers =
> +      ctx->Const.MaxCombinedAtomicBuffers;
> +   this->Const.MaxAtomicCounterBufferSize =
> +      ctx->Const.MaxAtomicBufferSize;
>
>     /* Compute shader constants */
>     for (unsigned i = 0; i < ARRAY_SIZE(this->Const.MaxComputeWorkGroupCount); i++)
> diff --git a/src/glsl/glsl_parser_extras.h b/src/glsl/glsl_parser_extras.h
> index 61d4c93..42b7442 100644
> --- a/src/glsl/glsl_parser_extras.h
> +++ b/src/glsl/glsl_parser_extras.h
> @@ -192,7 +192,7 @@ struct _mesa_glsl_parse_state {
>
>     bool has_atomic_counters() const
>     {
> -      return ARB_shader_atomic_counters_enable || is_version(400, 0);
> +      return ARB_shader_atomic_counters_enable || is_version(400, 310);

It was like that already, but should this be 420, not 400?

With that fixed, this patch is

Reviewed-by: Ilia Mirkin <imirkin at alum.mit.edu>

>     }
>
>     bool has_explicit_attrib_stream() const
> @@ -353,6 +353,16 @@ struct _mesa_glsl_parse_state {
>        unsigned MaxCombinedAtomicCounters;
>        unsigned MaxAtomicBufferBindings;
>
> +      /* These are also atomic counter related, but they weren't added to
> +       * until atomic counters were added to core in GLSL 4.20 and GLSL ES
> +       * 3.10.
> +       */
> +      unsigned MaxVertexAtomicCounterBuffers;
> +      unsigned MaxGeometryAtomicCounterBuffers;
> +      unsigned MaxFragmentAtomicCounterBuffers;
> +      unsigned MaxCombinedAtomicCounterBuffers;
> +      unsigned MaxAtomicCounterBufferSize;
> +
>        /* ARB_compute_shader */
>        unsigned MaxComputeWorkGroupCount[3];
>        unsigned MaxComputeWorkGroupSize[3];
> --
> 2.1.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