diff options
| author | 2021-04-04 02:31:09 -0300 | |
|---|---|---|
| committer | 2021-07-22 21:51:26 -0400 | |
| commit | 3f594dd86bd1ee1b178109132482c7d6b43e66dd (patch) | |
| tree | 7de68eba744644121f3409f2de8c2e7a0bd5c125 /src/shader_recompiler/frontend/ir | |
| parent | vk_compute_pass: Fix compute passes (diff) | |
| download | yuzu-3f594dd86bd1ee1b178109132482c7d6b43e66dd.tar.gz yuzu-3f594dd86bd1ee1b178109132482c7d6b43e66dd.tar.xz yuzu-3f594dd86bd1ee1b178109132482c7d6b43e66dd.zip | |
shader: Reimplement GetCbufU64 as GetCbufU32x2
It may generate better code on some compilers and it's easier to handle.
Diffstat (limited to 'src/shader_recompiler/frontend/ir')
| -rw-r--r-- | src/shader_recompiler/frontend/ir/ir_emitter.cpp | 6 | ||||
| -rw-r--r-- | src/shader_recompiler/frontend/ir/ir_emitter.h | 4 | ||||
| -rw-r--r-- | src/shader_recompiler/frontend/ir/opcodes.inc | 2 |
3 files changed, 6 insertions, 6 deletions
diff --git a/src/shader_recompiler/frontend/ir/ir_emitter.cpp b/src/shader_recompiler/frontend/ir/ir_emitter.cpp index dbfc670b0..dbd38a28b 100644 --- a/src/shader_recompiler/frontend/ir/ir_emitter.cpp +++ b/src/shader_recompiler/frontend/ir/ir_emitter.cpp | |||
| @@ -162,8 +162,8 @@ U32 IREmitter::GetCbuf(const U32& binding, const U32& byte_offset) { | |||
| 162 | return Inst<U32>(Opcode::GetCbufU32, binding, byte_offset); | 162 | return Inst<U32>(Opcode::GetCbufU32, binding, byte_offset); |
| 163 | } | 163 | } |
| 164 | 164 | ||
| 165 | UAny IREmitter::GetCbuf(const U32& binding, const U32& byte_offset, size_t bitsize, | 165 | Value IREmitter::GetCbuf(const U32& binding, const U32& byte_offset, size_t bitsize, |
| 166 | bool is_signed) { | 166 | bool is_signed) { |
| 167 | switch (bitsize) { | 167 | switch (bitsize) { |
| 168 | case 8: | 168 | case 8: |
| 169 | return Inst<U32>(is_signed ? Opcode::GetCbufS8 : Opcode::GetCbufU8, binding, byte_offset); | 169 | return Inst<U32>(is_signed ? Opcode::GetCbufS8 : Opcode::GetCbufU8, binding, byte_offset); |
| @@ -172,7 +172,7 @@ UAny IREmitter::GetCbuf(const U32& binding, const U32& byte_offset, size_t bitsi | |||
| 172 | case 32: | 172 | case 32: |
| 173 | return Inst<U32>(Opcode::GetCbufU32, binding, byte_offset); | 173 | return Inst<U32>(Opcode::GetCbufU32, binding, byte_offset); |
| 174 | case 64: | 174 | case 64: |
| 175 | return Inst<U64>(Opcode::GetCbufU64, binding, byte_offset); | 175 | return Inst(Opcode::GetCbufU32x2, binding, byte_offset); |
| 176 | default: | 176 | default: |
| 177 | throw InvalidArgument("Invalid bit size {}", bitsize); | 177 | throw InvalidArgument("Invalid bit size {}", bitsize); |
| 178 | } | 178 | } |
diff --git a/src/shader_recompiler/frontend/ir/ir_emitter.h b/src/shader_recompiler/frontend/ir/ir_emitter.h index 14b743975..81a57fefe 100644 --- a/src/shader_recompiler/frontend/ir/ir_emitter.h +++ b/src/shader_recompiler/frontend/ir/ir_emitter.h | |||
| @@ -56,8 +56,8 @@ public: | |||
| 56 | void SetIndirectBranchVariable(const U32& value); | 56 | void SetIndirectBranchVariable(const U32& value); |
| 57 | 57 | ||
| 58 | [[nodiscard]] U32 GetCbuf(const U32& binding, const U32& byte_offset); | 58 | [[nodiscard]] U32 GetCbuf(const U32& binding, const U32& byte_offset); |
| 59 | [[nodiscard]] UAny GetCbuf(const U32& binding, const U32& byte_offset, size_t bitsize, | 59 | [[nodiscard]] Value GetCbuf(const U32& binding, const U32& byte_offset, size_t bitsize, |
| 60 | bool is_signed); | 60 | bool is_signed); |
| 61 | [[nodiscard]] F32 GetFloatCbuf(const U32& binding, const U32& byte_offset); | 61 | [[nodiscard]] F32 GetFloatCbuf(const U32& binding, const U32& byte_offset); |
| 62 | 62 | ||
| 63 | [[nodiscard]] U1 GetZFlag(); | 63 | [[nodiscard]] U1 GetZFlag(); |
diff --git a/src/shader_recompiler/frontend/ir/opcodes.inc b/src/shader_recompiler/frontend/ir/opcodes.inc index 3640a5d24..734f5328b 100644 --- a/src/shader_recompiler/frontend/ir/opcodes.inc +++ b/src/shader_recompiler/frontend/ir/opcodes.inc | |||
| @@ -40,7 +40,7 @@ OPCODE(GetCbufU16, U32, U32, | |||
| 40 | OPCODE(GetCbufS16, U32, U32, U32, ) | 40 | OPCODE(GetCbufS16, U32, U32, U32, ) |
| 41 | OPCODE(GetCbufU32, U32, U32, U32, ) | 41 | OPCODE(GetCbufU32, U32, U32, U32, ) |
| 42 | OPCODE(GetCbufF32, F32, U32, U32, ) | 42 | OPCODE(GetCbufF32, F32, U32, U32, ) |
| 43 | OPCODE(GetCbufU64, U64, U32, U32, ) | 43 | OPCODE(GetCbufU32x2, U32x2, U32, U32, ) |
| 44 | OPCODE(GetAttribute, F32, Attribute, ) | 44 | OPCODE(GetAttribute, F32, Attribute, ) |
| 45 | OPCODE(SetAttribute, Void, Attribute, F32, ) | 45 | OPCODE(SetAttribute, Void, Attribute, F32, ) |
| 46 | OPCODE(GetAttributeIndexed, F32, U32, ) | 46 | OPCODE(GetAttributeIndexed, F32, U32, ) |