anv,nir: Lower quad_broadcast with dynamic index in NIR
This is required for the subgroupBroadcastDynamicId feature that was added in Vulkan 1.2. Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
This commit is contained in:
@@ -3839,6 +3839,7 @@ typedef struct nir_lower_subgroups_options {
|
|||||||
bool lower_shuffle:1;
|
bool lower_shuffle:1;
|
||||||
bool lower_shuffle_to_32bit:1;
|
bool lower_shuffle_to_32bit:1;
|
||||||
bool lower_quad:1;
|
bool lower_quad:1;
|
||||||
|
bool lower_quad_broadcast_dynamic:1;
|
||||||
} nir_lower_subgroups_options;
|
} nir_lower_subgroups_options;
|
||||||
|
|
||||||
bool nir_lower_subgroups(nir_shader *shader,
|
bool nir_lower_subgroups(nir_shader *shader,
|
||||||
|
@@ -473,7 +473,10 @@ lower_subgroups_instr(nir_builder *b, nir_instr *instr, void *_options)
|
|||||||
case nir_intrinsic_quad_swap_horizontal:
|
case nir_intrinsic_quad_swap_horizontal:
|
||||||
case nir_intrinsic_quad_swap_vertical:
|
case nir_intrinsic_quad_swap_vertical:
|
||||||
case nir_intrinsic_quad_swap_diagonal:
|
case nir_intrinsic_quad_swap_diagonal:
|
||||||
if (options->lower_quad)
|
if (options->lower_quad ||
|
||||||
|
(options->lower_quad_broadcast_dynamic &&
|
||||||
|
intrin->intrinsic == nir_intrinsic_quad_broadcast &&
|
||||||
|
!nir_src_is_const(intrin->src[1])))
|
||||||
return lower_shuffle(b, intrin, options->lower_to_scalar, false);
|
return lower_shuffle(b, intrin, options->lower_to_scalar, false);
|
||||||
else if (options->lower_to_scalar && intrin->num_components > 1)
|
else if (options->lower_to_scalar && intrin->num_components > 1)
|
||||||
return lower_subgroup_op_to_scalar(b, intrin, false);
|
return lower_subgroup_op_to_scalar(b, intrin, false);
|
||||||
|
@@ -713,6 +713,7 @@ brw_preprocess_nir(const struct brw_compiler *compiler, nir_shader *nir,
|
|||||||
.lower_to_scalar = true,
|
.lower_to_scalar = true,
|
||||||
.lower_vote_trivial = !is_scalar,
|
.lower_vote_trivial = !is_scalar,
|
||||||
.lower_shuffle = true,
|
.lower_shuffle = true,
|
||||||
|
.lower_quad_broadcast_dynamic = true,
|
||||||
};
|
};
|
||||||
OPT(nir_lower_subgroups, &subgroups_options);
|
OPT(nir_lower_subgroups, &subgroups_options);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user