diff options
| author | 2021-04-04 05:17:17 -0300 | |
|---|---|---|
| committer | 2021-07-22 21:51:26 -0400 | |
| commit | da6cf2632cd4dc0d2b0278353fcaee0789b418c0 (patch) | |
| tree | 90c2d6f6fa724365a4a23c888389e525e316a4fd /src/shader_recompiler/frontend/ir | |
| parent | shader: Implement BAR and fix memory barriers (diff) | |
| download | yuzu-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.cpp | 20 | ||||
| -rw-r--r-- | src/shader_recompiler/frontend/ir/ir_emitter.h | 5 | ||||
| -rw-r--r-- | src/shader_recompiler/frontend/ir/opcodes.inc | 5 |
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 | ||
| 1631 | U32 IREmitter::SubgroupEqMask() { | ||
| 1632 | return Inst<U32>(Opcode::SubgroupEqMask); | ||
| 1633 | } | ||
| 1634 | |||
| 1635 | U32 IREmitter::SubgroupLtMask() { | ||
| 1636 | return Inst<U32>(Opcode::SubgroupLtMask); | ||
| 1637 | } | ||
| 1638 | |||
| 1639 | U32 IREmitter::SubgroupLeMask() { | ||
| 1640 | return Inst<U32>(Opcode::SubgroupLeMask); | ||
| 1641 | } | ||
| 1642 | |||
| 1643 | U32 IREmitter::SubgroupGtMask() { | ||
| 1644 | return Inst<U32>(Opcode::SubgroupGtMask); | ||
| 1645 | } | ||
| 1646 | |||
| 1647 | U32 IREmitter::SubgroupGeMask() { | ||
| 1648 | return Inst<U32>(Opcode::SubgroupGeMask); | ||
| 1649 | } | ||
| 1650 | |||
| 1631 | U32 IREmitter::ShuffleIndex(const IR::U32& value, const IR::U32& index, const IR::U32& clamp, | 1651 | U32 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, | |||
| 417 | OPCODE(VoteAny, U1, U1, ) | 417 | OPCODE(VoteAny, U1, U1, ) |
| 418 | OPCODE(VoteEqual, U1, U1, ) | 418 | OPCODE(VoteEqual, U1, U1, ) |
| 419 | OPCODE(SubgroupBallot, U32, U1, ) | 419 | OPCODE(SubgroupBallot, U32, U1, ) |
| 420 | OPCODE(SubgroupEqMask, U32, ) | ||
| 421 | OPCODE(SubgroupLtMask, U32, ) | ||
| 422 | OPCODE(SubgroupLeMask, U32, ) | ||
| 423 | OPCODE(SubgroupGtMask, U32, ) | ||
| 424 | OPCODE(SubgroupGeMask, U32, ) | ||
| 420 | OPCODE(ShuffleIndex, U32, U32, U32, U32, U32, ) | 425 | OPCODE(ShuffleIndex, U32, U32, U32, U32, U32, ) |
| 421 | OPCODE(ShuffleUp, U32, U32, U32, U32, U32, ) | 426 | OPCODE(ShuffleUp, U32, U32, U32, U32, U32, ) |
| 422 | OPCODE(ShuffleDown, U32, U32, U32, U32, U32, ) | 427 | OPCODE(ShuffleDown, U32, U32, U32, U32, U32, ) |