Reviewed-by: Lionel Landwerlin <lionel.g.landwer...@intel.com> Reviewed-by: Iago Toral Quiroga <ito...@igalia.com> --- src/compiler/shader_info.h | 1 + src/compiler/spirv/spirv_to_nir.c | 5 +++++ src/compiler/spirv/vtn_subgroup.c | 24 +++++++++++++++++++++++- 3 files changed, 29 insertions(+), 1 deletion(-)
diff --git a/src/compiler/shader_info.h b/src/compiler/shader_info.h index 38fd5f8..9e5d7d9 100644 --- a/src/compiler/shader_info.h +++ b/src/compiler/shader_info.h @@ -46,6 +46,7 @@ struct spirv_supported_capabilities { bool storage_16bit; bool subgroup_ballot; bool subgroup_basic; + bool subgroup_shuffle; bool subgroup_vote; }; diff --git a/src/compiler/spirv/spirv_to_nir.c b/src/compiler/spirv/spirv_to_nir.c index a3abee7..1c3fd54 100644 --- a/src/compiler/spirv/spirv_to_nir.c +++ b/src/compiler/spirv/spirv_to_nir.c @@ -3305,6 +3305,11 @@ vtn_handle_preamble_instruction(struct vtn_builder *b, SpvOp opcode, spv_check_supported(subgroup_ballot, cap); break; + case SpvCapabilityGroupNonUniformShuffle: + case SpvCapabilityGroupNonUniformShuffleRelative: + spv_check_supported(subgroup_shuffle, cap); + break; + case SpvCapabilityVariablePointersStorageBuffer: case SpvCapabilityVariablePointers: spv_check_supported(variable_pointers, cap); diff --git a/src/compiler/spirv/vtn_subgroup.c b/src/compiler/spirv/vtn_subgroup.c index 09e4e59..b999439 100644 --- a/src/compiler/spirv/vtn_subgroup.c +++ b/src/compiler/spirv/vtn_subgroup.c @@ -229,7 +229,29 @@ vtn_handle_subgroup(struct vtn_builder *b, SpvOp opcode, case SpvOpGroupNonUniformShuffle: case SpvOpGroupNonUniformShuffleXor: case SpvOpGroupNonUniformShuffleUp: - case SpvOpGroupNonUniformShuffleDown: + case SpvOpGroupNonUniformShuffleDown: { + nir_intrinsic_op op; + switch (opcode) { + case SpvOpGroupNonUniformShuffle: + op = nir_intrinsic_shuffle; + break; + case SpvOpGroupNonUniformShuffleXor: + op = nir_intrinsic_shuffle_xor; + break; + case SpvOpGroupNonUniformShuffleUp: + op = nir_intrinsic_shuffle_up; + break; + case SpvOpGroupNonUniformShuffleDown: + op = nir_intrinsic_shuffle_down; + break; + default: + unreachable("Invalid opcode"); + } + vtn_build_subgroup_instr(b, op, val->ssa, vtn_ssa_value(b, w[4]), + vtn_ssa_value(b, w[5])->def); + break; + } + case SpvOpGroupNonUniformIAdd: case SpvOpGroupNonUniformFAdd: case SpvOpGroupNonUniformIMul: -- 2.5.0.400.gff86faf _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev