From: Rhys Perry Date: Wed, 24 Apr 2019 09:25:25 +0000 (+0100) Subject: nir/subgroups: Lower clustered reductions with cluster_size >= subgroup_size into... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=7b07034931440e87f8ba0475354bb66a30d2ccde;p=mesa.git nir/subgroups: Lower clustered reductions with cluster_size >= subgroup_size into reductions The behavior for reductions with cluster_size >= subgroup_size is implementation defined. Reviewed-by: Jason Ekstrand --- diff --git a/src/compiler/nir/nir_lower_subgroups.c b/src/compiler/nir/nir_lower_subgroups.c index 1e2e3f0eebf..249d5e446bd 100644 --- a/src/compiler/nir/nir_lower_subgroups.c +++ b/src/compiler/nir/nir_lower_subgroups.c @@ -479,7 +479,18 @@ lower_subgroups_instr(nir_builder *b, nir_instr *instr, void *_options) return lower_subgroup_op_to_scalar(b, intrin, false); break; - case nir_intrinsic_reduce: + case nir_intrinsic_reduce: { + nir_ssa_def *ret = NULL; + /* A cluster size greater than the subgroup size is implemention defined */ + if (options->subgroup_size && + nir_intrinsic_cluster_size(intrin) >= options->subgroup_size) { + nir_intrinsic_set_cluster_size(intrin, 0); + ret = NIR_LOWER_INSTR_PROGRESS; + } + if (options->lower_to_scalar && intrin->num_components > 1) + ret = lower_subgroup_op_to_scalar(b, intrin, false); + return ret; + } case nir_intrinsic_inclusive_scan: case nir_intrinsic_exclusive_scan: if (options->lower_to_scalar && intrin->num_components > 1)