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: 40c1f9883e ("mesa,glsl: add support for GL_NV_shader_atomic_int64")
Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8533>
This commit is contained in:
Ilia Mirkin
2021-01-16 01:10:24 -05:00
committed by Marge Bot
parent 6638b58ccf
commit a0f4affcf6

View File

@@ -764,6 +764,13 @@ buffer_atomics_supported(const _mesa_glsl_parse_state *state)
return compute_shader(state) || shader_storage_buffer_object(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 static bool
barrier_supported(const _mesa_glsl_parse_state *state) barrier_supported(const _mesa_glsl_parse_state *state)
{ {
@@ -1368,7 +1375,7 @@ builtin_builder::create_intrinsics()
_atomic_intrinsic2(NV_shader_atomic_float_supported, _atomic_intrinsic2(NV_shader_atomic_float_supported,
glsl_type::float_type, glsl_type::float_type,
ir_intrinsic_generic_atomic_add), ir_intrinsic_generic_atomic_add),
_atomic_intrinsic2(buffer_atomics_supported, _atomic_intrinsic2(buffer_int64_atomics_supported,
glsl_type::int64_t_type, glsl_type::int64_t_type,
ir_intrinsic_generic_atomic_add), ir_intrinsic_generic_atomic_add),
_atomic_counter_intrinsic1(shader_atomic_counter_ops_or_v460_desktop, _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, _atomic_intrinsic2(INTEL_shader_atomic_float_minmax_supported,
glsl_type::float_type, glsl_type::float_type,
ir_intrinsic_generic_atomic_min), ir_intrinsic_generic_atomic_min),
_atomic_intrinsic2(buffer_atomics_supported, _atomic_intrinsic2(buffer_int64_atomics_supported,
glsl_type::uint64_t_type, glsl_type::uint64_t_type,
ir_intrinsic_generic_atomic_min), ir_intrinsic_generic_atomic_min),
_atomic_intrinsic2(buffer_atomics_supported, _atomic_intrinsic2(buffer_int64_atomics_supported,
glsl_type::int64_t_type, glsl_type::int64_t_type,
ir_intrinsic_generic_atomic_min), ir_intrinsic_generic_atomic_min),
_atomic_counter_intrinsic1(shader_atomic_counter_ops_or_v460_desktop, _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, _atomic_intrinsic2(INTEL_shader_atomic_float_minmax_supported,
glsl_type::float_type, glsl_type::float_type,
ir_intrinsic_generic_atomic_max), ir_intrinsic_generic_atomic_max),
_atomic_intrinsic2(buffer_atomics_supported, _atomic_intrinsic2(buffer_int64_atomics_supported,
glsl_type::uint64_t_type, glsl_type::uint64_t_type,
ir_intrinsic_generic_atomic_max), ir_intrinsic_generic_atomic_max),
_atomic_intrinsic2(buffer_atomics_supported, _atomic_intrinsic2(buffer_int64_atomics_supported,
glsl_type::int64_t_type, glsl_type::int64_t_type,
ir_intrinsic_generic_atomic_max), ir_intrinsic_generic_atomic_max),
_atomic_counter_intrinsic1(shader_atomic_counter_ops_or_v460_desktop, _atomic_counter_intrinsic1(shader_atomic_counter_ops_or_v460_desktop,
@@ -1419,10 +1426,10 @@ builtin_builder::create_intrinsics()
_atomic_intrinsic2(buffer_atomics_supported, _atomic_intrinsic2(buffer_atomics_supported,
glsl_type::int_type, glsl_type::int_type,
ir_intrinsic_generic_atomic_and), ir_intrinsic_generic_atomic_and),
_atomic_intrinsic2(buffer_atomics_supported, _atomic_intrinsic2(buffer_int64_atomics_supported,
glsl_type::uint64_t_type, glsl_type::uint64_t_type,
ir_intrinsic_generic_atomic_and), ir_intrinsic_generic_atomic_and),
_atomic_intrinsic2(buffer_atomics_supported, _atomic_intrinsic2(buffer_int64_atomics_supported,
glsl_type::int64_t_type, glsl_type::int64_t_type,
ir_intrinsic_generic_atomic_and), ir_intrinsic_generic_atomic_and),
_atomic_counter_intrinsic1(shader_atomic_counter_ops_or_v460_desktop, _atomic_counter_intrinsic1(shader_atomic_counter_ops_or_v460_desktop,
@@ -1435,10 +1442,10 @@ builtin_builder::create_intrinsics()
_atomic_intrinsic2(buffer_atomics_supported, _atomic_intrinsic2(buffer_atomics_supported,
glsl_type::int_type, glsl_type::int_type,
ir_intrinsic_generic_atomic_or), ir_intrinsic_generic_atomic_or),
_atomic_intrinsic2(buffer_atomics_supported, _atomic_intrinsic2(buffer_int64_atomics_supported,
glsl_type::uint64_t_type, glsl_type::uint64_t_type,
ir_intrinsic_generic_atomic_or), ir_intrinsic_generic_atomic_or),
_atomic_intrinsic2(buffer_atomics_supported, _atomic_intrinsic2(buffer_int64_atomics_supported,
glsl_type::int64_t_type, glsl_type::int64_t_type,
ir_intrinsic_generic_atomic_or), ir_intrinsic_generic_atomic_or),
_atomic_counter_intrinsic1(shader_atomic_counter_ops_or_v460_desktop, _atomic_counter_intrinsic1(shader_atomic_counter_ops_or_v460_desktop,
@@ -1451,10 +1458,10 @@ builtin_builder::create_intrinsics()
_atomic_intrinsic2(buffer_atomics_supported, _atomic_intrinsic2(buffer_atomics_supported,
glsl_type::int_type, glsl_type::int_type,
ir_intrinsic_generic_atomic_xor), ir_intrinsic_generic_atomic_xor),
_atomic_intrinsic2(buffer_atomics_supported, _atomic_intrinsic2(buffer_int64_atomics_supported,
glsl_type::uint64_t_type, glsl_type::uint64_t_type,
ir_intrinsic_generic_atomic_xor), ir_intrinsic_generic_atomic_xor),
_atomic_intrinsic2(buffer_atomics_supported, _atomic_intrinsic2(buffer_int64_atomics_supported,
glsl_type::int64_t_type, glsl_type::int64_t_type,
ir_intrinsic_generic_atomic_xor), ir_intrinsic_generic_atomic_xor),
_atomic_counter_intrinsic1(shader_atomic_counter_ops_or_v460_desktop, _atomic_counter_intrinsic1(shader_atomic_counter_ops_or_v460_desktop,
@@ -1467,7 +1474,7 @@ builtin_builder::create_intrinsics()
_atomic_intrinsic2(buffer_atomics_supported, _atomic_intrinsic2(buffer_atomics_supported,
glsl_type::int_type, glsl_type::int_type,
ir_intrinsic_generic_atomic_exchange), ir_intrinsic_generic_atomic_exchange),
_atomic_intrinsic2(buffer_atomics_supported, _atomic_intrinsic2(buffer_int64_atomics_supported,
glsl_type::int64_t_type, glsl_type::int64_t_type,
ir_intrinsic_generic_atomic_exchange), ir_intrinsic_generic_atomic_exchange),
_atomic_intrinsic2(NV_shader_atomic_float_supported, _atomic_intrinsic2(NV_shader_atomic_float_supported,
@@ -1483,7 +1490,7 @@ builtin_builder::create_intrinsics()
_atomic_intrinsic3(buffer_atomics_supported, _atomic_intrinsic3(buffer_atomics_supported,
glsl_type::int_type, glsl_type::int_type,
ir_intrinsic_generic_atomic_comp_swap), ir_intrinsic_generic_atomic_comp_swap),
_atomic_intrinsic3(buffer_atomics_supported, _atomic_intrinsic3(buffer_int64_atomics_supported,
glsl_type::int64_t_type, glsl_type::int64_t_type,
ir_intrinsic_generic_atomic_comp_swap), ir_intrinsic_generic_atomic_comp_swap),
_atomic_intrinsic3(INTEL_shader_atomic_float_minmax_supported, _atomic_intrinsic3(INTEL_shader_atomic_float_minmax_supported,
@@ -4103,7 +4110,7 @@ builtin_builder::create_builtins()
shader_atomic_float_add, shader_atomic_float_add,
glsl_type::float_type), glsl_type::float_type),
_atomic_op2("__intrinsic_atomic_add", _atomic_op2("__intrinsic_atomic_add",
buffer_atomics_supported, buffer_int64_atomics_supported,
glsl_type::int64_t_type), glsl_type::int64_t_type),
NULL); NULL);
add_function("atomicMin", add_function("atomicMin",
@@ -4117,10 +4124,10 @@ builtin_builder::create_builtins()
shader_atomic_float_minmax, shader_atomic_float_minmax,
glsl_type::float_type), glsl_type::float_type),
_atomic_op2("__intrinsic_atomic_min", _atomic_op2("__intrinsic_atomic_min",
buffer_atomics_supported, buffer_int64_atomics_supported,
glsl_type::uint64_t_type), glsl_type::uint64_t_type),
_atomic_op2("__intrinsic_atomic_min", _atomic_op2("__intrinsic_atomic_min",
buffer_atomics_supported, buffer_int64_atomics_supported,
glsl_type::int64_t_type), glsl_type::int64_t_type),
NULL); NULL);
add_function("atomicMax", add_function("atomicMax",
@@ -4134,10 +4141,10 @@ builtin_builder::create_builtins()
shader_atomic_float_minmax, shader_atomic_float_minmax,
glsl_type::float_type), glsl_type::float_type),
_atomic_op2("__intrinsic_atomic_max", _atomic_op2("__intrinsic_atomic_max",
buffer_atomics_supported, buffer_int64_atomics_supported,
glsl_type::uint64_t_type), glsl_type::uint64_t_type),
_atomic_op2("__intrinsic_atomic_max", _atomic_op2("__intrinsic_atomic_max",
buffer_atomics_supported, buffer_int64_atomics_supported,
glsl_type::int64_t_type), glsl_type::int64_t_type),
NULL); NULL);
add_function("atomicAnd", add_function("atomicAnd",
@@ -4148,10 +4155,10 @@ builtin_builder::create_builtins()
buffer_atomics_supported, buffer_atomics_supported,
glsl_type::int_type), glsl_type::int_type),
_atomic_op2("__intrinsic_atomic_and", _atomic_op2("__intrinsic_atomic_and",
buffer_atomics_supported, buffer_int64_atomics_supported,
glsl_type::uint64_t_type), glsl_type::uint64_t_type),
_atomic_op2("__intrinsic_atomic_and", _atomic_op2("__intrinsic_atomic_and",
buffer_atomics_supported, buffer_int64_atomics_supported,
glsl_type::int64_t_type), glsl_type::int64_t_type),
NULL); NULL);
add_function("atomicOr", add_function("atomicOr",
@@ -4162,10 +4169,10 @@ builtin_builder::create_builtins()
buffer_atomics_supported, buffer_atomics_supported,
glsl_type::int_type), glsl_type::int_type),
_atomic_op2("__intrinsic_atomic_or", _atomic_op2("__intrinsic_atomic_or",
buffer_atomics_supported, buffer_int64_atomics_supported,
glsl_type::uint64_t_type), glsl_type::uint64_t_type),
_atomic_op2("__intrinsic_atomic_or", _atomic_op2("__intrinsic_atomic_or",
buffer_atomics_supported, buffer_int64_atomics_supported,
glsl_type::int64_t_type), glsl_type::int64_t_type),
NULL); NULL);
add_function("atomicXor", add_function("atomicXor",
@@ -4176,10 +4183,10 @@ builtin_builder::create_builtins()
buffer_atomics_supported, buffer_atomics_supported,
glsl_type::int_type), glsl_type::int_type),
_atomic_op2("__intrinsic_atomic_xor", _atomic_op2("__intrinsic_atomic_xor",
buffer_atomics_supported, buffer_int64_atomics_supported,
glsl_type::uint64_t_type), glsl_type::uint64_t_type),
_atomic_op2("__intrinsic_atomic_xor", _atomic_op2("__intrinsic_atomic_xor",
buffer_atomics_supported, buffer_int64_atomics_supported,
glsl_type::int64_t_type), glsl_type::int64_t_type),
NULL); NULL);
add_function("atomicExchange", add_function("atomicExchange",
@@ -4190,7 +4197,7 @@ builtin_builder::create_builtins()
buffer_atomics_supported, buffer_atomics_supported,
glsl_type::int_type), glsl_type::int_type),
_atomic_op2("__intrinsic_atomic_exchange", _atomic_op2("__intrinsic_atomic_exchange",
buffer_atomics_supported, buffer_int64_atomics_supported,
glsl_type::int64_t_type), glsl_type::int64_t_type),
_atomic_op2("__intrinsic_atomic_exchange", _atomic_op2("__intrinsic_atomic_exchange",
shader_atomic_float_exchange, shader_atomic_float_exchange,
@@ -4204,7 +4211,7 @@ builtin_builder::create_builtins()
buffer_atomics_supported, buffer_atomics_supported,
glsl_type::int_type), glsl_type::int_type),
_atomic_op3("__intrinsic_atomic_comp_swap", _atomic_op3("__intrinsic_atomic_comp_swap",
buffer_atomics_supported, buffer_int64_atomics_supported,
glsl_type::int64_t_type), glsl_type::int64_t_type),
_atomic_op3("__intrinsic_atomic_comp_swap", _atomic_op3("__intrinsic_atomic_comp_swap",
shader_atomic_float_minmax, shader_atomic_float_minmax,