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,