summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJordan Justen <[email protected]>2015-10-10 09:36:22 -0700
committerJordan Justen <[email protected]>2015-12-09 23:50:38 -0800
commitf821a3ec4f8dda55722f326f26855c2b24ca186c (patch)
treec6fb8b0800bc63d83a173661158564c8a4347574
parent7333593cf3141e61610f25f86e8b5282c8db099e (diff)
glsl: Buffer atomics are supported for compute shaders
Signed-off-by: Jordan Justen <[email protected]> Reviewed-by: Iago Toral Quiroga <[email protected]> Reviewed-by: Kristian Høgsberg <[email protected]>
-rw-r--r--src/glsl/builtin_functions.cpp70
1 files changed, 38 insertions, 32 deletions
diff --git a/src/glsl/builtin_functions.cpp b/src/glsl/builtin_functions.cpp
index 4462bfd2324..9973a763087 100644
--- a/src/glsl/builtin_functions.cpp
+++ b/src/glsl/builtin_functions.cpp
@@ -479,6 +479,12 @@ compute_shader(const _mesa_glsl_parse_state *state)
}
static bool
+buffer_atomics_supported(const _mesa_glsl_parse_state *state)
+{
+ return compute_shader(state) || shader_storage_buffer_object(state);
+}
+
+static bool
barrier_supported(const _mesa_glsl_parse_state *state)
{
return compute_shader(state) ||
@@ -931,51 +937,51 @@ builtin_builder::create_intrinsics()
NULL);
add_function("__intrinsic_atomic_add",
- _atomic_intrinsic2(shader_storage_buffer_object,
+ _atomic_intrinsic2(buffer_atomics_supported,
glsl_type::uint_type),
- _atomic_intrinsic2(shader_storage_buffer_object,
+ _atomic_intrinsic2(buffer_atomics_supported,
glsl_type::int_type),
NULL);
add_function("__intrinsic_atomic_min",
- _atomic_intrinsic2(shader_storage_buffer_object,
+ _atomic_intrinsic2(buffer_atomics_supported,
glsl_type::uint_type),
- _atomic_intrinsic2(shader_storage_buffer_object,
+ _atomic_intrinsic2(buffer_atomics_supported,
glsl_type::int_type),
NULL);
add_function("__intrinsic_atomic_max",
- _atomic_intrinsic2(shader_storage_buffer_object,
+ _atomic_intrinsic2(buffer_atomics_supported,
glsl_type::uint_type),
- _atomic_intrinsic2(shader_storage_buffer_object,
+ _atomic_intrinsic2(buffer_atomics_supported,
glsl_type::int_type),
NULL);
add_function("__intrinsic_atomic_and",
- _atomic_intrinsic2(shader_storage_buffer_object,
+ _atomic_intrinsic2(buffer_atomics_supported,
glsl_type::uint_type),
- _atomic_intrinsic2(shader_storage_buffer_object,
+ _atomic_intrinsic2(buffer_atomics_supported,
glsl_type::int_type),
NULL);
add_function("__intrinsic_atomic_or",
- _atomic_intrinsic2(shader_storage_buffer_object,
+ _atomic_intrinsic2(buffer_atomics_supported,
glsl_type::uint_type),
- _atomic_intrinsic2(shader_storage_buffer_object,
+ _atomic_intrinsic2(buffer_atomics_supported,
glsl_type::int_type),
NULL);
add_function("__intrinsic_atomic_xor",
- _atomic_intrinsic2(shader_storage_buffer_object,
+ _atomic_intrinsic2(buffer_atomics_supported,
glsl_type::uint_type),
- _atomic_intrinsic2(shader_storage_buffer_object,
+ _atomic_intrinsic2(buffer_atomics_supported,
glsl_type::int_type),
NULL);
add_function("__intrinsic_atomic_exchange",
- _atomic_intrinsic2(shader_storage_buffer_object,
+ _atomic_intrinsic2(buffer_atomics_supported,
glsl_type::uint_type),
- _atomic_intrinsic2(shader_storage_buffer_object,
+ _atomic_intrinsic2(buffer_atomics_supported,
glsl_type::int_type),
NULL);
add_function("__intrinsic_atomic_comp_swap",
- _atomic_intrinsic3(shader_storage_buffer_object,
+ _atomic_intrinsic3(buffer_atomics_supported,
glsl_type::uint_type),
- _atomic_intrinsic3(shader_storage_buffer_object,
+ _atomic_intrinsic3(buffer_atomics_supported,
glsl_type::int_type),
NULL);
@@ -2683,66 +2689,66 @@ builtin_builder::create_builtins()
add_function("atomicAdd",
_atomic_op2("__intrinsic_atomic_add",
- shader_storage_buffer_object,
+ buffer_atomics_supported,
glsl_type::uint_type),
_atomic_op2("__intrinsic_atomic_add",
- shader_storage_buffer_object,
+ buffer_atomics_supported,
glsl_type::int_type),
NULL);
add_function("atomicMin",
_atomic_op2("__intrinsic_atomic_min",
- shader_storage_buffer_object,
+ buffer_atomics_supported,
glsl_type::uint_type),
_atomic_op2("__intrinsic_atomic_min",
- shader_storage_buffer_object,
+ buffer_atomics_supported,
glsl_type::int_type),
NULL);
add_function("atomicMax",
_atomic_op2("__intrinsic_atomic_max",
- shader_storage_buffer_object,
+ buffer_atomics_supported,
glsl_type::uint_type),
_atomic_op2("__intrinsic_atomic_max",
- shader_storage_buffer_object,
+ buffer_atomics_supported,
glsl_type::int_type),
NULL);
add_function("atomicAnd",
_atomic_op2("__intrinsic_atomic_and",
- shader_storage_buffer_object,
+ buffer_atomics_supported,
glsl_type::uint_type),
_atomic_op2("__intrinsic_atomic_and",
- shader_storage_buffer_object,
+ buffer_atomics_supported,
glsl_type::int_type),
NULL);
add_function("atomicOr",
_atomic_op2("__intrinsic_atomic_or",
- shader_storage_buffer_object,
+ buffer_atomics_supported,
glsl_type::uint_type),
_atomic_op2("__intrinsic_atomic_or",
- shader_storage_buffer_object,
+ buffer_atomics_supported,
glsl_type::int_type),
NULL);
add_function("atomicXor",
_atomic_op2("__intrinsic_atomic_xor",
- shader_storage_buffer_object,
+ buffer_atomics_supported,
glsl_type::uint_type),
_atomic_op2("__intrinsic_atomic_xor",
- shader_storage_buffer_object,
+ buffer_atomics_supported,
glsl_type::int_type),
NULL);
add_function("atomicExchange",
_atomic_op2("__intrinsic_atomic_exchange",
- shader_storage_buffer_object,
+ buffer_atomics_supported,
glsl_type::uint_type),
_atomic_op2("__intrinsic_atomic_exchange",
- shader_storage_buffer_object,
+ buffer_atomics_supported,
glsl_type::int_type),
NULL);
add_function("atomicCompSwap",
_atomic_op3("__intrinsic_atomic_comp_swap",
- shader_storage_buffer_object,
+ buffer_atomics_supported,
glsl_type::uint_type),
_atomic_op3("__intrinsic_atomic_comp_swap",
- shader_storage_buffer_object,
+ buffer_atomics_supported,
glsl_type::int_type),
NULL);