glsl: correct compute shader checks for memoryBarrier functions

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

Cc: "17.0" <mesa-stable@lists.freedesktop.org>
Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
(cherry picked from commit 21efe2528c)
This commit is contained in:
Marc Di Luzio 2017-02-06 09:07:30 +00:00 committed by Emil Velikov
parent 05abd64cae
commit 06128bdc21

View file

@ -537,6 +537,12 @@ compute_shader(const _mesa_glsl_parse_state *state)
return state->stage == MESA_SHADER_COMPUTE;
}
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)
{
@ -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",