diff options
Diffstat (limited to '')
4 files changed, 17 insertions, 0 deletions
diff --git a/src/shader_recompiler/frontend/ir/ir_emitter.cpp b/src/shader_recompiler/frontend/ir/ir_emitter.cpp index ff2970125..ce610799a 100644 --- a/src/shader_recompiler/frontend/ir/ir_emitter.cpp +++ b/src/shader_recompiler/frontend/ir/ir_emitter.cpp | |||
| @@ -92,6 +92,14 @@ void IREmitter::DemoteToHelperInvocation(Block* continue_label) { | |||
| 92 | Inst(Opcode::DemoteToHelperInvocation, continue_label); | 92 | Inst(Opcode::DemoteToHelperInvocation, continue_label); |
| 93 | } | 93 | } |
| 94 | 94 | ||
| 95 | void IREmitter::Prologue() { | ||
| 96 | Inst(Opcode::Prologue); | ||
| 97 | } | ||
| 98 | |||
| 99 | void IREmitter::Epilogue() { | ||
| 100 | Inst(Opcode::Epilogue); | ||
| 101 | } | ||
| 102 | |||
| 95 | U32 IREmitter::GetReg(IR::Reg reg) { | 103 | U32 IREmitter::GetReg(IR::Reg reg) { |
| 96 | return Inst<U32>(Opcode::GetRegister, reg); | 104 | return Inst<U32>(Opcode::GetRegister, reg); |
| 97 | } | 105 | } |
diff --git a/src/shader_recompiler/frontend/ir/ir_emitter.h b/src/shader_recompiler/frontend/ir/ir_emitter.h index 1708be3ef..39109b0de 100644 --- a/src/shader_recompiler/frontend/ir/ir_emitter.h +++ b/src/shader_recompiler/frontend/ir/ir_emitter.h | |||
| @@ -39,6 +39,9 @@ public: | |||
| 39 | void Return(); | 39 | void Return(); |
| 40 | void DemoteToHelperInvocation(Block* continue_label); | 40 | void DemoteToHelperInvocation(Block* continue_label); |
| 41 | 41 | ||
| 42 | void Prologue(); | ||
| 43 | void Epilogue(); | ||
| 44 | |||
| 42 | [[nodiscard]] U32 GetReg(IR::Reg reg); | 45 | [[nodiscard]] U32 GetReg(IR::Reg reg); |
| 43 | void SetReg(IR::Reg reg, const U32& value); | 46 | void SetReg(IR::Reg reg, const U32& value); |
| 44 | 47 | ||
diff --git a/src/shader_recompiler/frontend/ir/microinstruction.cpp b/src/shader_recompiler/frontend/ir/microinstruction.cpp index 21b7d8a9f..ba3968056 100644 --- a/src/shader_recompiler/frontend/ir/microinstruction.cpp +++ b/src/shader_recompiler/frontend/ir/microinstruction.cpp | |||
| @@ -56,6 +56,8 @@ bool Inst::MayHaveSideEffects() const noexcept { | |||
| 56 | case Opcode::SelectionMerge: | 56 | case Opcode::SelectionMerge: |
| 57 | case Opcode::Return: | 57 | case Opcode::Return: |
| 58 | case Opcode::DemoteToHelperInvocation: | 58 | case Opcode::DemoteToHelperInvocation: |
| 59 | case Opcode::Prologue: | ||
| 60 | case Opcode::Epilogue: | ||
| 59 | case Opcode::SetAttribute: | 61 | case Opcode::SetAttribute: |
| 60 | case Opcode::SetAttributeIndexed: | 62 | case Opcode::SetAttributeIndexed: |
| 61 | case Opcode::SetFragColor: | 63 | case Opcode::SetFragColor: |
diff --git a/src/shader_recompiler/frontend/ir/opcodes.inc b/src/shader_recompiler/frontend/ir/opcodes.inc index fe888b8b2..8945c7b04 100644 --- a/src/shader_recompiler/frontend/ir/opcodes.inc +++ b/src/shader_recompiler/frontend/ir/opcodes.inc | |||
| @@ -15,6 +15,10 @@ OPCODE(SelectionMerge, Void, Labe | |||
| 15 | OPCODE(Return, Void, ) | 15 | OPCODE(Return, Void, ) |
| 16 | OPCODE(DemoteToHelperInvocation, Void, Label, ) | 16 | OPCODE(DemoteToHelperInvocation, Void, Label, ) |
| 17 | 17 | ||
| 18 | // Special operations | ||
| 19 | OPCODE(Prologue, Void, ) | ||
| 20 | OPCODE(Epilogue, Void, ) | ||
| 21 | |||
| 18 | // Context getters/setters | 22 | // Context getters/setters |
| 19 | OPCODE(GetRegister, U32, Reg, ) | 23 | OPCODE(GetRegister, U32, Reg, ) |
| 20 | OPCODE(SetRegister, Void, Reg, U32, ) | 24 | OPCODE(SetRegister, Void, Reg, U32, ) |