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