mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 05:08:08 +02:00
spirv: Add subgroup shuffle support
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
This commit is contained in:
parent
149b92ccf2
commit
8256ee3fa3
3 changed files with 29 additions and 1 deletions
|
|
@ -47,6 +47,7 @@ struct spirv_supported_capabilities {
|
|||
bool shader_viewport_index_layer;
|
||||
bool subgroup_ballot;
|
||||
bool subgroup_basic;
|
||||
bool subgroup_shuffle;
|
||||
bool subgroup_vote;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue