diff options
Diffstat (limited to 'src/shader_recompiler/frontend/ir')
4 files changed, 10 insertions, 0 deletions
diff --git a/src/shader_recompiler/frontend/ir/ir_emitter.cpp b/src/shader_recompiler/frontend/ir/ir_emitter.cpp index dbd38a28b..246c3b9ef 100644 --- a/src/shader_recompiler/frontend/ir/ir_emitter.cpp +++ b/src/shader_recompiler/frontend/ir/ir_emitter.cpp | |||
| @@ -82,6 +82,10 @@ void IREmitter::SelectionMerge(Block* merge_block) { | |||
| 82 | Inst(Opcode::SelectionMerge, merge_block); | 82 | Inst(Opcode::SelectionMerge, merge_block); |
| 83 | } | 83 | } |
| 84 | 84 | ||
| 85 | void IREmitter::Barrier() { | ||
| 86 | Inst(Opcode::Barrier); | ||
| 87 | } | ||
| 88 | |||
| 85 | void IREmitter::MemoryBarrier(MemoryScope scope) { | 89 | void IREmitter::MemoryBarrier(MemoryScope scope) { |
| 86 | switch (scope) { | 90 | switch (scope) { |
| 87 | case MemoryScope::Workgroup: | 91 | case MemoryScope::Workgroup: |
diff --git a/src/shader_recompiler/frontend/ir/ir_emitter.h b/src/shader_recompiler/frontend/ir/ir_emitter.h index 81a57fefe..1b00c548d 100644 --- a/src/shader_recompiler/frontend/ir/ir_emitter.h +++ b/src/shader_recompiler/frontend/ir/ir_emitter.h | |||
| @@ -128,6 +128,7 @@ public: | |||
| 128 | [[nodiscard]] Value Select(const U1& condition, const Value& true_value, | 128 | [[nodiscard]] Value Select(const U1& condition, const Value& true_value, |
| 129 | const Value& false_value); | 129 | const Value& false_value); |
| 130 | 130 | ||
| 131 | [[nodiscard]] void Barrier(); | ||
| 131 | [[nodiscard]] void MemoryBarrier(MemoryScope scope); | 132 | [[nodiscard]] void MemoryBarrier(MemoryScope scope); |
| 132 | 133 | ||
| 133 | template <typename Dest, typename Source> | 134 | template <typename Dest, typename Source> |
diff --git a/src/shader_recompiler/frontend/ir/microinstruction.cpp b/src/shader_recompiler/frontend/ir/microinstruction.cpp index 074c71d53..481202d94 100644 --- a/src/shader_recompiler/frontend/ir/microinstruction.cpp +++ b/src/shader_recompiler/frontend/ir/microinstruction.cpp | |||
| @@ -57,6 +57,10 @@ bool Inst::MayHaveSideEffects() const noexcept { | |||
| 57 | case Opcode::Return: | 57 | case Opcode::Return: |
| 58 | case Opcode::Unreachable: | 58 | case Opcode::Unreachable: |
| 59 | case Opcode::DemoteToHelperInvocation: | 59 | case Opcode::DemoteToHelperInvocation: |
| 60 | case Opcode::Barrier: | ||
| 61 | case Opcode::MemoryBarrierWorkgroupLevel: | ||
| 62 | case Opcode::MemoryBarrierDeviceLevel: | ||
| 63 | case Opcode::MemoryBarrierSystemLevel: | ||
| 60 | case Opcode::Prologue: | 64 | case Opcode::Prologue: |
| 61 | case Opcode::Epilogue: | 65 | case Opcode::Epilogue: |
| 62 | case Opcode::SetAttribute: | 66 | case Opcode::SetAttribute: |
diff --git a/src/shader_recompiler/frontend/ir/opcodes.inc b/src/shader_recompiler/frontend/ir/opcodes.inc index 734f5328b..dcd54bcf7 100644 --- a/src/shader_recompiler/frontend/ir/opcodes.inc +++ b/src/shader_recompiler/frontend/ir/opcodes.inc | |||
| @@ -17,6 +17,7 @@ OPCODE(Unreachable, Void, | |||
| 17 | OPCODE(DemoteToHelperInvocation, Void, Label, ) | 17 | OPCODE(DemoteToHelperInvocation, Void, Label, ) |
| 18 | 18 | ||
| 19 | // Barriers | 19 | // Barriers |
| 20 | OPCODE(Barrier, Void, ) | ||
| 20 | OPCODE(MemoryBarrierWorkgroupLevel, Void, ) | 21 | OPCODE(MemoryBarrierWorkgroupLevel, Void, ) |
| 21 | OPCODE(MemoryBarrierDeviceLevel, Void, ) | 22 | OPCODE(MemoryBarrierDeviceLevel, Void, ) |
| 22 | OPCODE(MemoryBarrierSystemLevel, Void, ) | 23 | OPCODE(MemoryBarrierSystemLevel, Void, ) |