Mesa (master): glsl: only expose int64 atomics when extension is enabled
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Sat Jan 16 18:37:26 UTC 2021
Module: Mesa
Branch: master
Commit: a0f4affcf64cfd13a27f1e3cc24f98ef220b691b
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a0f4affcf64cfd13a27f1e3cc24f98ef220b691b
Author: Ilia Mirkin <imirkin at alum.mit.edu>
Date: Sat Jan 16 01:10:24 2021 -0500
glsl: only expose int64 atomics when extension is enabled
This limits the exposure of these functions to when the extension is
available. Prevents crashes otherwise, as the rest of the infrastructure
doesn't necessarily expect these functions when the extension is not
available.
Fixes: 40c1f9883e5 ("mesa,glsl: add support for GL_NV_shader_atomic_int64")
Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
Reviewed-by: Marek Olšák <marek.olsak at amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8533>
---
src/compiler/glsl/builtin_functions.cpp | 59 ++++++++++++++++++---------------
1 file changed, 33 insertions(+), 26 deletions(-)
diff --git a/src/compiler/glsl/builtin_functions.cpp b/src/compiler/glsl/builtin_functions.cpp
index b8e3f2b780b..86ad82ba27e 100644
--- a/src/compiler/glsl/builtin_functions.cpp
+++ b/src/compiler/glsl/builtin_functions.cpp
@@ -764,6 +764,13 @@ buffer_atomics_supported(const _mesa_glsl_parse_state *state)
return compute_shader(state) || shader_storage_buffer_object(state);
}
+static bool
+buffer_int64_atomics_supported(const _mesa_glsl_parse_state *state)
+{
+ return state->NV_shader_atomic_int64_enable &&
+ buffer_atomics_supported(state);
+}
+
static bool
barrier_supported(const _mesa_glsl_parse_state *state)
{
@@ -1368,7 +1375,7 @@ builtin_builder::create_intrinsics()
_atomic_intrinsic2(NV_shader_atomic_float_supported,
glsl_type::float_type,
ir_intrinsic_generic_atomic_add),
- _atomic_intrinsic2(buffer_atomics_supported,
+ _atomic_intrinsic2(buffer_int64_atomics_supported,
glsl_type::int64_t_type,
ir_intrinsic_generic_atomic_add),
_atomic_counter_intrinsic1(shader_atomic_counter_ops_or_v460_desktop,
@@ -1384,10 +1391,10 @@ builtin_builder::create_intrinsics()
_atomic_intrinsic2(INTEL_shader_atomic_float_minmax_supported,
glsl_type::float_type,
ir_intrinsic_generic_atomic_min),
- _atomic_intrinsic2(buffer_atomics_supported,
+ _atomic_intrinsic2(buffer_int64_atomics_supported,
glsl_type::uint64_t_type,
ir_intrinsic_generic_atomic_min),
- _atomic_intrinsic2(buffer_atomics_supported,
+ _atomic_intrinsic2(buffer_int64_atomics_supported,
glsl_type::int64_t_type,
ir_intrinsic_generic_atomic_min),
_atomic_counter_intrinsic1(shader_atomic_counter_ops_or_v460_desktop,
@@ -1403,10 +1410,10 @@ builtin_builder::create_intrinsics()
_atomic_intrinsic2(INTEL_shader_atomic_float_minmax_supported,
glsl_type::float_type,
ir_intrinsic_generic_atomic_max),
- _atomic_intrinsic2(buffer_atomics_supported,
+ _atomic_intrinsic2(buffer_int64_atomics_supported,
glsl_type::uint64_t_type,
ir_intrinsic_generic_atomic_max),
- _atomic_intrinsic2(buffer_atomics_supported,
+ _atomic_intrinsic2(buffer_int64_atomics_supported,
glsl_type::int64_t_type,
ir_intrinsic_generic_atomic_max),
_atomic_counter_intrinsic1(shader_atomic_counter_ops_or_v460_desktop,
@@ -1419,10 +1426,10 @@ builtin_builder::create_intrinsics()
_atomic_intrinsic2(buffer_atomics_supported,
glsl_type::int_type,
ir_intrinsic_generic_atomic_and),
- _atomic_intrinsic2(buffer_atomics_supported,
+ _atomic_intrinsic2(buffer_int64_atomics_supported,
glsl_type::uint64_t_type,
ir_intrinsic_generic_atomic_and),
- _atomic_intrinsic2(buffer_atomics_supported,
+ _atomic_intrinsic2(buffer_int64_atomics_supported,
glsl_type::int64_t_type,
ir_intrinsic_generic_atomic_and),
_atomic_counter_intrinsic1(shader_atomic_counter_ops_or_v460_desktop,
@@ -1435,10 +1442,10 @@ builtin_builder::create_intrinsics()
_atomic_intrinsic2(buffer_atomics_supported,
glsl_type::int_type,
ir_intrinsic_generic_atomic_or),
- _atomic_intrinsic2(buffer_atomics_supported,
+ _atomic_intrinsic2(buffer_int64_atomics_supported,
glsl_type::uint64_t_type,
ir_intrinsic_generic_atomic_or),
- _atomic_intrinsic2(buffer_atomics_supported,
+ _atomic_intrinsic2(buffer_int64_atomics_supported,
glsl_type::int64_t_type,
ir_intrinsic_generic_atomic_or),
_atomic_counter_intrinsic1(shader_atomic_counter_ops_or_v460_desktop,
@@ -1451,10 +1458,10 @@ builtin_builder::create_intrinsics()
_atomic_intrinsic2(buffer_atomics_supported,
glsl_type::int_type,
ir_intrinsic_generic_atomic_xor),
- _atomic_intrinsic2(buffer_atomics_supported,
+ _atomic_intrinsic2(buffer_int64_atomics_supported,
glsl_type::uint64_t_type,
ir_intrinsic_generic_atomic_xor),
- _atomic_intrinsic2(buffer_atomics_supported,
+ _atomic_intrinsic2(buffer_int64_atomics_supported,
glsl_type::int64_t_type,
ir_intrinsic_generic_atomic_xor),
_atomic_counter_intrinsic1(shader_atomic_counter_ops_or_v460_desktop,
@@ -1467,7 +1474,7 @@ builtin_builder::create_intrinsics()
_atomic_intrinsic2(buffer_atomics_supported,
glsl_type::int_type,
ir_intrinsic_generic_atomic_exchange),
- _atomic_intrinsic2(buffer_atomics_supported,
+ _atomic_intrinsic2(buffer_int64_atomics_supported,
glsl_type::int64_t_type,
ir_intrinsic_generic_atomic_exchange),
_atomic_intrinsic2(NV_shader_atomic_float_supported,
@@ -1483,7 +1490,7 @@ builtin_builder::create_intrinsics()
_atomic_intrinsic3(buffer_atomics_supported,
glsl_type::int_type,
ir_intrinsic_generic_atomic_comp_swap),
- _atomic_intrinsic3(buffer_atomics_supported,
+ _atomic_intrinsic3(buffer_int64_atomics_supported,
glsl_type::int64_t_type,
ir_intrinsic_generic_atomic_comp_swap),
_atomic_intrinsic3(INTEL_shader_atomic_float_minmax_supported,
@@ -4103,7 +4110,7 @@ builtin_builder::create_builtins()
shader_atomic_float_add,
glsl_type::float_type),
_atomic_op2("__intrinsic_atomic_add",
- buffer_atomics_supported,
+ buffer_int64_atomics_supported,
glsl_type::int64_t_type),
NULL);
add_function("atomicMin",
@@ -4117,10 +4124,10 @@ builtin_builder::create_builtins()
shader_atomic_float_minmax,
glsl_type::float_type),
_atomic_op2("__intrinsic_atomic_min",
- buffer_atomics_supported,
+ buffer_int64_atomics_supported,
glsl_type::uint64_t_type),
_atomic_op2("__intrinsic_atomic_min",
- buffer_atomics_supported,
+ buffer_int64_atomics_supported,
glsl_type::int64_t_type),
NULL);
add_function("atomicMax",
@@ -4134,10 +4141,10 @@ builtin_builder::create_builtins()
shader_atomic_float_minmax,
glsl_type::float_type),
_atomic_op2("__intrinsic_atomic_max",
- buffer_atomics_supported,
+ buffer_int64_atomics_supported,
glsl_type::uint64_t_type),
_atomic_op2("__intrinsic_atomic_max",
- buffer_atomics_supported,
+ buffer_int64_atomics_supported,
glsl_type::int64_t_type),
NULL);
add_function("atomicAnd",
@@ -4148,10 +4155,10 @@ builtin_builder::create_builtins()
buffer_atomics_supported,
glsl_type::int_type),
_atomic_op2("__intrinsic_atomic_and",
- buffer_atomics_supported,
+ buffer_int64_atomics_supported,
glsl_type::uint64_t_type),
_atomic_op2("__intrinsic_atomic_and",
- buffer_atomics_supported,
+ buffer_int64_atomics_supported,
glsl_type::int64_t_type),
NULL);
add_function("atomicOr",
@@ -4162,10 +4169,10 @@ builtin_builder::create_builtins()
buffer_atomics_supported,
glsl_type::int_type),
_atomic_op2("__intrinsic_atomic_or",
- buffer_atomics_supported,
+ buffer_int64_atomics_supported,
glsl_type::uint64_t_type),
_atomic_op2("__intrinsic_atomic_or",
- buffer_atomics_supported,
+ buffer_int64_atomics_supported,
glsl_type::int64_t_type),
NULL);
add_function("atomicXor",
@@ -4176,10 +4183,10 @@ builtin_builder::create_builtins()
buffer_atomics_supported,
glsl_type::int_type),
_atomic_op2("__intrinsic_atomic_xor",
- buffer_atomics_supported,
+ buffer_int64_atomics_supported,
glsl_type::uint64_t_type),
_atomic_op2("__intrinsic_atomic_xor",
- buffer_atomics_supported,
+ buffer_int64_atomics_supported,
glsl_type::int64_t_type),
NULL);
add_function("atomicExchange",
@@ -4190,7 +4197,7 @@ builtin_builder::create_builtins()
buffer_atomics_supported,
glsl_type::int_type),
_atomic_op2("__intrinsic_atomic_exchange",
- buffer_atomics_supported,
+ buffer_int64_atomics_supported,
glsl_type::int64_t_type),
_atomic_op2("__intrinsic_atomic_exchange",
shader_atomic_float_exchange,
@@ -4204,7 +4211,7 @@ builtin_builder::create_builtins()
buffer_atomics_supported,
glsl_type::int_type),
_atomic_op3("__intrinsic_atomic_comp_swap",
- buffer_atomics_supported,
+ buffer_int64_atomics_supported,
glsl_type::int64_t_type),
_atomic_op3("__intrinsic_atomic_comp_swap",
shader_atomic_float_minmax,
More information about the mesa-commit
mailing list