glsl: prepare ballot function args for subgroup usage

Signed-off-by: Qiang Yu <yuq825@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30610>
This commit is contained in:
Qiang Yu
2024-07-31 17:45:18 +08:00
parent 5f212a190b
commit 7113d3c6ba
+38 -43
View File
@@ -693,6 +693,12 @@ shader_ballot(const _mesa_glsl_parse_state *state)
return state->ARB_shader_ballot_enable;
}
static bool
ballot_arb(const _mesa_glsl_parse_state *state)
{
return state->ARB_shader_ballot_enable;
}
static bool
supports_arb_fragment_shader_interlock(const _mesa_glsl_parse_state *state)
{
@@ -1398,12 +1404,14 @@ private:
ir_function_signature *_memory_barrier(const char *intrinsic_name,
builtin_available_predicate avail);
ir_function_signature *_ballot_intrinsic();
ir_function_signature *_ballot();
ir_function_signature *_ballot_intrinsic(const glsl_type *type);
ir_function_signature *_ballot(const glsl_type *type, builtin_available_predicate avail);
ir_function_signature *_read_first_invocation_intrinsic(const glsl_type *type);
ir_function_signature *_read_first_invocation(const glsl_type *type);
ir_function_signature *_read_first_invocation(const glsl_type *type,
builtin_available_predicate avail);
ir_function_signature *_read_invocation_intrinsic(const glsl_type *type);
ir_function_signature *_read_invocation(const glsl_type *type);
ir_function_signature *_read_invocation(const glsl_type *type,
builtin_available_predicate avail);
ir_function_signature *_invocation_interlock_intrinsic(
@@ -1554,6 +1562,20 @@ builtin_builder::create_shader()
/** @} */
#define FIU(func, ...) \
func(&glsl_type_builtin_float, ##__VA_ARGS__), \
func(&glsl_type_builtin_vec2, ##__VA_ARGS__), \
func(&glsl_type_builtin_vec3, ##__VA_ARGS__), \
func(&glsl_type_builtin_vec4, ##__VA_ARGS__), \
func(&glsl_type_builtin_int, ##__VA_ARGS__), \
func(&glsl_type_builtin_ivec2, ##__VA_ARGS__), \
func(&glsl_type_builtin_ivec3, ##__VA_ARGS__), \
func(&glsl_type_builtin_ivec4, ##__VA_ARGS__), \
func(&glsl_type_builtin_uint, ##__VA_ARGS__), \
func(&glsl_type_builtin_uvec2, ##__VA_ARGS__), \
func(&glsl_type_builtin_uvec3, ##__VA_ARGS__), \
func(&glsl_type_builtin_uvec4, ##__VA_ARGS__)
#define FIUBD_AVAIL(func, avail, ...) \
func(&glsl_type_builtin_float, avail, ##__VA_ARGS__), \
func(&glsl_type_builtin_vec2, avail, ##__VA_ARGS__), \
@@ -1785,7 +1807,7 @@ builtin_builder::create_intrinsics()
FIUBD_AVAIL(_vote_intrinsic, vote_or_v460_desktop, ir_intrinsic_vote_eq),
NULL);
add_function("__intrinsic_ballot", _ballot_intrinsic(), NULL);
add_function("__intrinsic_ballot", _ballot_intrinsic(&glsl_type_builtin_uint64_t), NULL);
add_function("__intrinsic_read_invocation",
_read_invocation_intrinsic(&glsl_type_builtin_float),
@@ -5410,40 +5432,14 @@ builtin_builder::create_builtins()
compute_shader),
NULL);
add_function("ballotARB", _ballot(), NULL);
add_function("ballotARB", _ballot(&glsl_type_builtin_uint64_t, ballot_arb), NULL);
add_function("readInvocationARB",
_read_invocation(&glsl_type_builtin_float),
_read_invocation(&glsl_type_builtin_vec2),
_read_invocation(&glsl_type_builtin_vec3),
_read_invocation(&glsl_type_builtin_vec4),
_read_invocation(&glsl_type_builtin_int),
_read_invocation(&glsl_type_builtin_ivec2),
_read_invocation(&glsl_type_builtin_ivec3),
_read_invocation(&glsl_type_builtin_ivec4),
_read_invocation(&glsl_type_builtin_uint),
_read_invocation(&glsl_type_builtin_uvec2),
_read_invocation(&glsl_type_builtin_uvec3),
_read_invocation(&glsl_type_builtin_uvec4),
FIU(_read_invocation, ballot_arb),
NULL);
add_function("readFirstInvocationARB",
_read_first_invocation(&glsl_type_builtin_float),
_read_first_invocation(&glsl_type_builtin_vec2),
_read_first_invocation(&glsl_type_builtin_vec3),
_read_first_invocation(&glsl_type_builtin_vec4),
_read_first_invocation(&glsl_type_builtin_int),
_read_first_invocation(&glsl_type_builtin_ivec2),
_read_first_invocation(&glsl_type_builtin_ivec3),
_read_first_invocation(&glsl_type_builtin_ivec4),
_read_first_invocation(&glsl_type_builtin_uint),
_read_first_invocation(&glsl_type_builtin_uvec2),
_read_first_invocation(&glsl_type_builtin_uvec3),
_read_first_invocation(&glsl_type_builtin_uvec4),
FIU(_read_first_invocation, ballot_arb),
NULL);
add_function("clock2x32ARB",
@@ -8783,21 +8779,20 @@ builtin_builder::_memory_barrier(const char *intrinsic_name,
}
ir_function_signature *
builtin_builder::_ballot_intrinsic()
builtin_builder::_ballot_intrinsic(const glsl_type *type)
{
ir_variable *value = in_var(&glsl_type_builtin_bool, "value");
MAKE_INTRINSIC(&glsl_type_builtin_uint64_t, ir_intrinsic_ballot, shader_ballot,
1, value);
MAKE_INTRINSIC(type, ir_intrinsic_ballot, shader_ballot, 1, value);
return sig;
}
ir_function_signature *
builtin_builder::_ballot()
builtin_builder::_ballot(const glsl_type *type, builtin_available_predicate avail)
{
ir_variable *value = in_var(&glsl_type_builtin_bool, "value");
MAKE_SIG(&glsl_type_builtin_uint64_t, shader_ballot, 1, value);
ir_variable *retval = body.make_temp(&glsl_type_builtin_uint64_t, "retval");
MAKE_SIG(type, avail, 1, value);
ir_variable *retval = body.make_temp(type, "retval");
body.emit(call(shader->symbols->get_function("__intrinsic_ballot"),
retval, sig->parameters));
@@ -8815,11 +8810,11 @@ builtin_builder::_read_first_invocation_intrinsic(const glsl_type *type)
}
ir_function_signature *
builtin_builder::_read_first_invocation(const glsl_type *type)
builtin_builder::_read_first_invocation(const glsl_type *type, builtin_available_predicate avail)
{
ir_variable *value = in_var(type, "value");
MAKE_SIG(type, shader_ballot, 1, value);
MAKE_SIG(type, avail, 1, value);
ir_variable *retval = body.make_temp(type, "retval");
body.emit(call(shader->symbols->get_function("__intrinsic_read_first_invocation"),
@@ -8839,7 +8834,7 @@ builtin_builder::_read_invocation_intrinsic(const glsl_type *type)
}
ir_function_signature *
builtin_builder::_read_invocation(const glsl_type *type)
builtin_builder::_read_invocation(const glsl_type *type, builtin_available_predicate avail)
{
ir_variable *value = in_var(type, "value");
ir_variable *invocation = in_var(&glsl_type_builtin_uint, "invocation");