[Mesa-dev] [PATCH] glsl: correct compute shader checks for memoryBarrier functions

Anuj Phogat anuj.phogat at gmail.com
Fri Feb 3 19:52:17 UTC 2017


On Fri, Feb 3, 2017 at 7:25 AM, Marc Di Luzio
<mdiluzio at feralinteractive.com> wrote:
> As per the spec -
> "The functions memoryBarrierShared() and groupMemoryBarrier() are
> available only in compute shaders; the other functions are available
> in all shader types."
>
> Conform to this by adding another delegate to check for compute
> shader support instead of only whether the current stage is compute
>
> This allows some fragment shaders in Dirt Rally to compile
> ---
>  src/compiler/glsl/builtin_functions.cpp | 18 ++++++++++++------
>  1 file changed, 12 insertions(+), 6 deletions(-)
>
> diff --git a/src/compiler/glsl/builtin_functions.cpp b/src/compiler/glsl/builtin_functions.cpp
> index 6d3b950..ac74636 100644
> --- a/src/compiler/glsl/builtin_functions.cpp
> +++ b/src/compiler/glsl/builtin_functions.cpp
> @@ -538,6 +538,12 @@ compute_shader(const _mesa_glsl_parse_state *state)
>  }
>
>  static bool
> +compute_shader_supported(const _mesa_glsl_parse_state *state)
> +{
> +   return state->has_compute_shader();
> +}
> +
> +static bool
>  buffer_atomics_supported(const _mesa_glsl_parse_state *state)
>  {
>     return compute_shader(state) || shader_storage_buffer_object(state);
> @@ -1098,15 +1104,15 @@ builtin_builder::create_intrinsics()
>                                            ir_intrinsic_group_memory_barrier),
>                  NULL);
>     add_function("__intrinsic_memory_barrier_atomic_counter",
> -                _memory_barrier_intrinsic(compute_shader,
> +                _memory_barrier_intrinsic(compute_shader_supported,
>                                            ir_intrinsic_memory_barrier_atomic_counter),
>                  NULL);
>     add_function("__intrinsic_memory_barrier_buffer",
> -                _memory_barrier_intrinsic(compute_shader,
> +                _memory_barrier_intrinsic(compute_shader_supported,
>                                            ir_intrinsic_memory_barrier_buffer),
>                  NULL);
>     add_function("__intrinsic_memory_barrier_image",
> -                _memory_barrier_intrinsic(compute_shader,
> +                _memory_barrier_intrinsic(compute_shader_supported,
>                                            ir_intrinsic_memory_barrier_image),
>                  NULL);
>     add_function("__intrinsic_memory_barrier_shared",
> @@ -2958,15 +2964,15 @@ builtin_builder::create_builtins()
>                  NULL);
>     add_function("memoryBarrierAtomicCounter",
>                  _memory_barrier("__intrinsic_memory_barrier_atomic_counter",
> -                                compute_shader),
> +                                compute_shader_supported),
>                  NULL);
>     add_function("memoryBarrierBuffer",
>                  _memory_barrier("__intrinsic_memory_barrier_buffer",
> -                                compute_shader),
> +                                compute_shader_supported),
>                  NULL);
>     add_function("memoryBarrierImage",
>                  _memory_barrier("__intrinsic_memory_barrier_image",
> -                                compute_shader),
> +                                compute_shader_supported),
>                  NULL);
>     add_function("memoryBarrierShared",
>                  _memory_barrier("__intrinsic_memory_barrier_shared",
> --
> 2.9.3
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Cross checked the GLSL 4.5 spec. Please add:
Cc: 17.0 <mesa-stable at lists.freedesktop.org>

Reviewed-by: Anuj Phogat <anuj.phogat at gmail.com>


More information about the mesa-dev mailing list