summaryrefslogtreecommitdiff
path: root/src/shader_recompiler/frontend/ir
diff options
context:
space:
mode:
authorGravatar ReinUsesLisp2021-04-04 05:17:17 -0300
committerGravatar ameerj2021-07-22 21:51:26 -0400
commitda6cf2632cd4dc0d2b0278353fcaee0789b418c0 (patch)
tree90c2d6f6fa724365a4a23c888389e525e316a4fd /src/shader_recompiler/frontend/ir
parentshader: Implement BAR and fix memory barriers (diff)
downloadyuzu-da6cf2632cd4dc0d2b0278353fcaee0789b418c0.tar.gz
yuzu-da6cf2632cd4dc0d2b0278353fcaee0789b418c0.tar.xz
yuzu-da6cf2632cd4dc0d2b0278353fcaee0789b418c0.zip
shader: Add subgroup masks
Diffstat (limited to 'src/shader_recompiler/frontend/ir')
-rw-r--r--src/shader_recompiler/frontend/ir/ir_emitter.cpp20
-rw-r--r--src/shader_recompiler/frontend/ir/ir_emitter.h5
-rw-r--r--src/shader_recompiler/frontend/ir/opcodes.inc5
3 files changed, 30 insertions, 0 deletions
diff --git a/src/shader_recompiler/frontend/ir/ir_emitter.cpp b/src/shader_recompiler/frontend/ir/ir_emitter.cpp
index 246c3b9ef..ed1e0dd3b 100644
--- a/src/shader_recompiler/frontend/ir/ir_emitter.cpp
+++ b/src/shader_recompiler/frontend/ir/ir_emitter.cpp
@@ -1628,6 +1628,26 @@ U32 IREmitter::SubgroupBallot(const U1& value) {
1628 return Inst<U32>(Opcode::SubgroupBallot, value); 1628 return Inst<U32>(Opcode::SubgroupBallot, value);
1629} 1629}
1630 1630
1631U32 IREmitter::SubgroupEqMask() {
1632 return Inst<U32>(Opcode::SubgroupEqMask);
1633}
1634
1635U32 IREmitter::SubgroupLtMask() {
1636 return Inst<U32>(Opcode::SubgroupLtMask);
1637}
1638
1639U32 IREmitter::SubgroupLeMask() {
1640 return Inst<U32>(Opcode::SubgroupLeMask);
1641}
1642
1643U32 IREmitter::SubgroupGtMask() {
1644 return Inst<U32>(Opcode::SubgroupGtMask);
1645}
1646
1647U32 IREmitter::SubgroupGeMask() {
1648 return Inst<U32>(Opcode::SubgroupGeMask);
1649}
1650
1631U32 IREmitter::ShuffleIndex(const IR::U32& value, const IR::U32& index, const IR::U32& clamp, 1651U32 IREmitter::ShuffleIndex(const IR::U32& value, const IR::U32& index, const IR::U32& clamp,
1632 const IR::U32& seg_mask) { 1652 const IR::U32& seg_mask) {
1633 return Inst<U32>(Opcode::ShuffleIndex, value, index, clamp, seg_mask); 1653 return Inst<U32>(Opcode::ShuffleIndex, value, index, clamp, seg_mask);
diff --git a/src/shader_recompiler/frontend/ir/ir_emitter.h b/src/shader_recompiler/frontend/ir/ir_emitter.h
index 1b00c548d..42756af43 100644
--- a/src/shader_recompiler/frontend/ir/ir_emitter.h
+++ b/src/shader_recompiler/frontend/ir/ir_emitter.h
@@ -281,6 +281,11 @@ public:
281 [[nodiscard]] U1 VoteAny(const U1& value); 281 [[nodiscard]] U1 VoteAny(const U1& value);
282 [[nodiscard]] U1 VoteEqual(const U1& value); 282 [[nodiscard]] U1 VoteEqual(const U1& value);
283 [[nodiscard]] U32 SubgroupBallot(const U1& value); 283 [[nodiscard]] U32 SubgroupBallot(const U1& value);
284 [[nodiscard]] U32 SubgroupEqMask();
285 [[nodiscard]] U32 SubgroupLtMask();
286 [[nodiscard]] U32 SubgroupLeMask();
287 [[nodiscard]] U32 SubgroupGtMask();
288 [[nodiscard]] U32 SubgroupGeMask();
284 [[nodiscard]] U32 ShuffleIndex(const IR::U32& value, const IR::U32& index, const IR::U32& clamp, 289 [[nodiscard]] U32 ShuffleIndex(const IR::U32& value, const IR::U32& index, const IR::U32& clamp,
285 const IR::U32& seg_mask); 290 const IR::U32& seg_mask);
286 [[nodiscard]] U32 ShuffleUp(const IR::U32& value, const IR::U32& index, const IR::U32& clamp, 291 [[nodiscard]] U32 ShuffleUp(const IR::U32& value, const IR::U32& index, const IR::U32& clamp,
diff --git a/src/shader_recompiler/frontend/ir/opcodes.inc b/src/shader_recompiler/frontend/ir/opcodes.inc
index dcd54bcf7..1697de965 100644
--- a/src/shader_recompiler/frontend/ir/opcodes.inc
+++ b/src/shader_recompiler/frontend/ir/opcodes.inc
@@ -417,6 +417,11 @@ OPCODE(VoteAll, U1, U1,
417OPCODE(VoteAny, U1, U1, ) 417OPCODE(VoteAny, U1, U1, )
418OPCODE(VoteEqual, U1, U1, ) 418OPCODE(VoteEqual, U1, U1, )
419OPCODE(SubgroupBallot, U32, U1, ) 419OPCODE(SubgroupBallot, U32, U1, )
420OPCODE(SubgroupEqMask, U32, )
421OPCODE(SubgroupLtMask, U32, )
422OPCODE(SubgroupLeMask, U32, )
423OPCODE(SubgroupGtMask, U32, )
424OPCODE(SubgroupGeMask, U32, )
420OPCODE(ShuffleIndex, U32, U32, U32, U32, U32, ) 425OPCODE(ShuffleIndex, U32, U32, U32, U32, U32, )
421OPCODE(ShuffleUp, U32, U32, U32, U32, U32, ) 426OPCODE(ShuffleUp, U32, U32, U32, U32, U32, )
422OPCODE(ShuffleDown, U32, U32, U32, U32, U32, ) 427OPCODE(ShuffleDown, U32, U32, U32, U32, U32, )