glsl: Add built-in functions for INTEL_shader_atomic_float_minmax

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
This commit is contained in:
Ian Romanick
2018-04-18 13:20:25 -07:00
parent c9d52c83a4
commit 280ab4afa8

View File

@@ -676,7 +676,20 @@ shader_atomic_float_add(const _mesa_glsl_parse_state *state)
static bool static bool
shader_atomic_float_exchange(const _mesa_glsl_parse_state *state) shader_atomic_float_exchange(const _mesa_glsl_parse_state *state)
{ {
return state->NV_shader_atomic_float_enable; return state->NV_shader_atomic_float_enable ||
state->INTEL_shader_atomic_float_minmax_enable;
}
static bool
INTEL_shader_atomic_float_minmax_supported(const _mesa_glsl_parse_state *state)
{
return state->extensions->INTEL_shader_atomic_float_minmax;
}
static bool
shader_atomic_float_minmax(const _mesa_glsl_parse_state *state)
{
return state->INTEL_shader_atomic_float_minmax_enable;
} }
/** @} */ /** @} */
@@ -1178,6 +1191,9 @@ 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_min), ir_intrinsic_generic_atomic_min),
_atomic_intrinsic2(INTEL_shader_atomic_float_minmax_supported,
glsl_type::float_type,
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,
ir_intrinsic_atomic_counter_min), ir_intrinsic_atomic_counter_min),
NULL); NULL);
@@ -1188,6 +1204,9 @@ 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_max), ir_intrinsic_generic_atomic_max),
_atomic_intrinsic2(INTEL_shader_atomic_float_minmax_supported,
glsl_type::float_type,
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,
ir_intrinsic_atomic_counter_max), ir_intrinsic_atomic_counter_max),
NULL); NULL);
@@ -1241,6 +1260,9 @@ 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(INTEL_shader_atomic_float_minmax_supported,
glsl_type::float_type,
ir_intrinsic_generic_atomic_comp_swap),
_atomic_counter_intrinsic2(shader_atomic_counter_ops_or_v460_desktop, _atomic_counter_intrinsic2(shader_atomic_counter_ops_or_v460_desktop,
ir_intrinsic_atomic_counter_comp_swap), ir_intrinsic_atomic_counter_comp_swap),
NULL); NULL);
@@ -3186,6 +3208,9 @@ builtin_builder::create_builtins()
_atomic_op2("__intrinsic_atomic_min", _atomic_op2("__intrinsic_atomic_min",
buffer_atomics_supported, buffer_atomics_supported,
glsl_type::int_type), glsl_type::int_type),
_atomic_op2("__intrinsic_atomic_min",
shader_atomic_float_minmax,
glsl_type::float_type),
NULL); NULL);
add_function("atomicMax", add_function("atomicMax",
_atomic_op2("__intrinsic_atomic_max", _atomic_op2("__intrinsic_atomic_max",
@@ -3194,6 +3219,9 @@ builtin_builder::create_builtins()
_atomic_op2("__intrinsic_atomic_max", _atomic_op2("__intrinsic_atomic_max",
buffer_atomics_supported, buffer_atomics_supported,
glsl_type::int_type), glsl_type::int_type),
_atomic_op2("__intrinsic_atomic_max",
shader_atomic_float_minmax,
glsl_type::float_type),
NULL); NULL);
add_function("atomicAnd", add_function("atomicAnd",
_atomic_op2("__intrinsic_atomic_and", _atomic_op2("__intrinsic_atomic_and",
@@ -3237,6 +3265,9 @@ builtin_builder::create_builtins()
_atomic_op3("__intrinsic_atomic_comp_swap", _atomic_op3("__intrinsic_atomic_comp_swap",
buffer_atomics_supported, buffer_atomics_supported,
glsl_type::int_type), glsl_type::int_type),
_atomic_op3("__intrinsic_atomic_comp_swap",
shader_atomic_float_minmax,
glsl_type::float_type),
NULL); NULL);
add_function("min3", add_function("min3",