mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-16 05:28:14 +02:00
kk: Support subgroup rotate ops
Rotate is native, clustered rotate is lowered to shuffle since MSL's rotate does not support clustering. Reviewed-by: Aitor Camacho <aitor@lunarg.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/41186>
This commit is contained in:
parent
2cd9dd1fd7
commit
a6352a504f
3 changed files with 12 additions and 0 deletions
|
|
@ -20,6 +20,7 @@ needs_bool_widening(nir_intrinsic_instr *intrin)
|
|||
case nir_intrinsic_quad_swap_horizontal:
|
||||
case nir_intrinsic_quad_swap_vertical:
|
||||
case nir_intrinsic_quad_swap_diagonal:
|
||||
case nir_intrinsic_rotate:
|
||||
case nir_intrinsic_shuffle:
|
||||
case nir_intrinsic_shuffle_down:
|
||||
case nir_intrinsic_shuffle_up:
|
||||
|
|
@ -66,6 +67,8 @@ msl_nir_lower_subgroups(nir_shader *nir)
|
|||
.lower_relative_shuffle = true,
|
||||
/* Metal reduce operations do not support certain types or cluster size */
|
||||
.lower_reduce = true,
|
||||
/* Metal rotate operations do not support cluster size */
|
||||
.lower_rotate_clustered_to_shuffle = true,
|
||||
};
|
||||
NIR_PASS(_, nir, nir_lower_subgroups, &subgroups_options);
|
||||
NIR_PASS(_, nir, nir_shader_intrinsics_pass, lower_bool_ops,
|
||||
|
|
|
|||
|
|
@ -183,6 +183,7 @@ update_instr_type(struct hash_table *types, nir_instr *instr, ti_type type)
|
|||
case nir_intrinsic_quad_swap_horizontal:
|
||||
case nir_intrinsic_quad_swap_vertical:
|
||||
case nir_intrinsic_quad_swap_diagonal:
|
||||
case nir_intrinsic_rotate:
|
||||
case nir_intrinsic_shuffle:
|
||||
case nir_intrinsic_shuffle_down:
|
||||
case nir_intrinsic_shuffle_up:
|
||||
|
|
@ -462,6 +463,7 @@ infer_types_from_intrinsic(struct hash_table *types, nir_intrinsic_instr *instr)
|
|||
break;
|
||||
case nir_intrinsic_read_invocation:
|
||||
case nir_intrinsic_quad_broadcast:
|
||||
case nir_intrinsic_rotate:
|
||||
case nir_intrinsic_shuffle:
|
||||
case nir_intrinsic_shuffle_down:
|
||||
case nir_intrinsic_shuffle_up:
|
||||
|
|
|
|||
|
|
@ -1471,6 +1471,13 @@ intrinsic_to_msl(struct nir_to_msl_ctx *ctx, nir_intrinsic_instr *instr)
|
|||
src_to_msl(ctx, &instr->src[1]);
|
||||
P(ctx, ");");
|
||||
break;
|
||||
case nir_intrinsic_rotate:
|
||||
P(ctx, "simd_shuffle_rotate_down(");
|
||||
src_to_msl(ctx, &instr->src[0]);
|
||||
P(ctx, ", ");
|
||||
src_to_msl(ctx, &instr->src[1]);
|
||||
P(ctx, ");\n");
|
||||
break;
|
||||
case nir_intrinsic_shuffle:
|
||||
P(ctx, "simd_shuffle(");
|
||||
src_to_msl(ctx, &instr->src[0]);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue