Mesa (staging/21.0): glsl: only expose int64 atomics when extension is enabled
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Wed Jan 20 17:22:35 UTC 2021
Module: Mesa
Branch: staging/21.0
Commit: 7d2ccf574ce6e2756beaf14c7d46186725711280
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=7d2ccf574ce6e2756beaf14c7d46186725711280
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>
(cherry picked from commit a0f4affcf64cfd13a27f1e3cc24f98ef220b691b)
---
.pick_status.json | 2 +-
src/compiler/glsl/builtin_functions.cpp | 59 ++++++++++++++++++---------------
2 files changed, 34 insertions(+), 27 deletions(-)
diff --git a/.pick_status.json b/.pick_status.json
index 9ba373ef4ce..b0756c1311f 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -742,7 +742,7 @@
"description": "glsl: only expose int64 atomics when extension is enabled",
"nominated": true,
"nomination_type": 1,
- "resolution": 0,
+ "resolution": 1,
"master_sha": null,
"because_sha": "40c1f9883e59f1a4a36b236debba7305ff57b0b0"
},
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