diff options
Diffstat (limited to 'src/shader_recompiler/frontend/ir')
| -rw-r--r-- | src/shader_recompiler/frontend/ir/ir_emitter.cpp | 14 | ||||
| -rw-r--r-- | src/shader_recompiler/frontend/ir/ir_emitter.h | 3 | ||||
| -rw-r--r-- | src/shader_recompiler/frontend/ir/opcodes.inc | 2 |
3 files changed, 17 insertions, 2 deletions
diff --git a/src/shader_recompiler/frontend/ir/ir_emitter.cpp b/src/shader_recompiler/frontend/ir/ir_emitter.cpp index e9fd41237..6c37af5e7 100644 --- a/src/shader_recompiler/frontend/ir/ir_emitter.cpp +++ b/src/shader_recompiler/frontend/ir/ir_emitter.cpp | |||
| @@ -125,6 +125,12 @@ U1 IREmitter::GetPred(IR::Pred pred, bool is_negated) { | |||
| 125 | } | 125 | } |
| 126 | } | 126 | } |
| 127 | 127 | ||
| 128 | void IREmitter::SetPred(IR::Pred pred, const U1& value) { | ||
| 129 | if (pred != IR::Pred::PT) { | ||
| 130 | Inst(Opcode::SetPred, pred, value); | ||
| 131 | } | ||
| 132 | } | ||
| 133 | |||
| 128 | U1 IREmitter::GetGotoVariable(u32 id) { | 134 | U1 IREmitter::GetGotoVariable(u32 id) { |
| 129 | return Inst<U1>(Opcode::GetGotoVariable, id); | 135 | return Inst<U1>(Opcode::GetGotoVariable, id); |
| 130 | } | 136 | } |
| @@ -141,8 +147,12 @@ void IREmitter::SetIndirectBranchVariable(const U32& value) { | |||
| 141 | Inst(Opcode::SetIndirectBranchVariable, value); | 147 | Inst(Opcode::SetIndirectBranchVariable, value); |
| 142 | } | 148 | } |
| 143 | 149 | ||
| 144 | void IREmitter::SetPred(IR::Pred pred, const U1& value) { | 150 | U32 IREmitter::GetLoopSafetyVariable(u32 id) { |
| 145 | Inst(Opcode::SetPred, pred, value); | 151 | return Inst<U32>(Opcode::GetLoopSafetyVariable, id); |
| 152 | } | ||
| 153 | |||
| 154 | void IREmitter::SetLoopSafetyVariable(u32 id, const U32& counter) { | ||
| 155 | Inst(Opcode::SetLoopSafetyVariable, id, counter); | ||
| 146 | } | 156 | } |
| 147 | 157 | ||
| 148 | U32 IREmitter::GetCbuf(const U32& binding, const U32& byte_offset) { | 158 | U32 IREmitter::GetCbuf(const U32& binding, const U32& byte_offset) { |
diff --git a/src/shader_recompiler/frontend/ir/ir_emitter.h b/src/shader_recompiler/frontend/ir/ir_emitter.h index bb3500c54..7caab1f61 100644 --- a/src/shader_recompiler/frontend/ir/ir_emitter.h +++ b/src/shader_recompiler/frontend/ir/ir_emitter.h | |||
| @@ -55,6 +55,9 @@ public: | |||
| 55 | [[nodiscard]] U32 GetIndirectBranchVariable(); | 55 | [[nodiscard]] U32 GetIndirectBranchVariable(); |
| 56 | void SetIndirectBranchVariable(const U32& value); | 56 | void SetIndirectBranchVariable(const U32& value); |
| 57 | 57 | ||
| 58 | [[nodiscard]] U32 GetLoopSafetyVariable(u32 id); | ||
| 59 | void SetLoopSafetyVariable(u32 id, const U32& counter); | ||
| 60 | |||
| 58 | [[nodiscard]] U32 GetCbuf(const U32& binding, const U32& byte_offset); | 61 | [[nodiscard]] U32 GetCbuf(const U32& binding, const U32& byte_offset); |
| 59 | [[nodiscard]] Value GetCbuf(const U32& binding, const U32& byte_offset, size_t bitsize, | 62 | [[nodiscard]] Value GetCbuf(const U32& binding, const U32& byte_offset, size_t bitsize, |
| 60 | bool is_signed); | 63 | bool is_signed); |
diff --git a/src/shader_recompiler/frontend/ir/opcodes.inc b/src/shader_recompiler/frontend/ir/opcodes.inc index 8a8d0d759..e87aeddd5 100644 --- a/src/shader_recompiler/frontend/ir/opcodes.inc +++ b/src/shader_recompiler/frontend/ir/opcodes.inc | |||
| @@ -32,6 +32,8 @@ OPCODE(GetGotoVariable, U1, U32, | |||
| 32 | OPCODE(SetGotoVariable, Void, U32, U1, ) | 32 | OPCODE(SetGotoVariable, Void, U32, U1, ) |
| 33 | OPCODE(GetIndirectBranchVariable, U32, ) | 33 | OPCODE(GetIndirectBranchVariable, U32, ) |
| 34 | OPCODE(SetIndirectBranchVariable, Void, U32, ) | 34 | OPCODE(SetIndirectBranchVariable, Void, U32, ) |
| 35 | OPCODE(GetLoopSafetyVariable, U32, U32, ) | ||
| 36 | OPCODE(SetLoopSafetyVariable, Void, U32, U32, ) | ||
| 35 | OPCODE(GetCbufU8, U32, U32, U32, ) | 37 | OPCODE(GetCbufU8, U32, U32, U32, ) |
| 36 | OPCODE(GetCbufS8, U32, U32, U32, ) | 38 | OPCODE(GetCbufS8, U32, U32, U32, ) |
| 37 | OPCODE(GetCbufU16, U32, U32, U32, ) | 39 | OPCODE(GetCbufU16, U32, U32, U32, ) |