aboutsummaryrefslogtreecommitdiffstats
path: root/src/compiler
diff options
context:
space:
mode:
authorJason Ekstrand <[email protected]>2019-12-16 10:43:18 -0600
committerJason Ekstrand <[email protected]>2020-01-15 08:34:57 -0600
commit721666e52a7e95b5bc1a7bcfc9cb6b8d43f2c97f (patch)
tree7228c32ece1a4627149e0ab8f751372cbf350260 /src/compiler
parent7e3e2ce702852d2617c250ad6cb68371697d9fa4 (diff)
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 <[email protected]>
Diffstat (limited to 'src/compiler')
-rw-r--r--src/compiler/nir/nir.h1
-rw-r--r--src/compiler/nir/nir_lower_subgroups.c5
2 files changed, 5 insertions, 1 deletions
diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h
index a8e4184f1d5..0ac3f45ccec 100644
--- a/src/compiler/nir/nir.h
+++ b/src/compiler/nir/nir.h
@@ -3839,6 +3839,7 @@ typedef struct nir_lower_subgroups_options {
bool lower_shuffle:1;
bool lower_shuffle_to_32bit:1;
bool lower_quad:1;
+ bool lower_quad_broadcast_dynamic:1;
} nir_lower_subgroups_options;
bool nir_lower_subgroups(nir_shader *shader,
diff --git a/src/compiler/nir/nir_lower_subgroups.c b/src/compiler/nir/nir_lower_subgroups.c
index 249d5e446bd..4462c708ec8 100644
--- a/src/compiler/nir/nir_lower_subgroups.c
+++ b/src/compiler/nir/nir_lower_subgroups.c
@@ -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_vertical:
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);
else if (options->lower_to_scalar && intrin->num_components > 1)
return lower_subgroup_op_to_scalar(b, intrin, false);