diff options
| author | bunnei <bunneidev@gmail.com> | 2020-02-14 13:22:53 -0500 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-02-14 13:22:53 -0500 | 
| commit | 63a59b993599e709e5b4bf6f389c7d4ae0c9889a (patch) | |
| tree | 0a39c9faa6afdd84405a9635337a043d05b16fb1 | |
| parent | 4501bd8ca953749282bca6f2f9d24768800d1982 (diff) | |
| parent | bf9a822b87ff362805ffefb8f76eea3c46f606a1 (diff) | |
Merge pull request #3379 from ReinUsesLisp/cbuf-offset
shader/decode: Fix constant buffer offsets
| -rw-r--r-- | src/video_core/engines/shader_bytecode.h | 4 | ||||
| -rw-r--r-- | src/video_core/shader/decode/arithmetic_integer.cpp | 4 | ||||
| -rw-r--r-- | src/video_core/shader/decode/bfi.cpp | 2 | 
3 files changed, 5 insertions, 5 deletions
| diff --git a/src/video_core/engines/shader_bytecode.h b/src/video_core/engines/shader_bytecode.h index 402869fde..c9bc83cd7 100644 --- a/src/video_core/engines/shader_bytecode.h +++ b/src/video_core/engines/shader_bytecode.h @@ -1677,11 +1677,11 @@ union Instruction {      } xmad;      union { -        BitField<20, 14, u64> offset; +        BitField<20, 14, u64> shifted_offset;          BitField<34, 5, u64> index;          u64 GetOffset() const { -            return offset * 4; +            return shifted_offset * 4;          }      } cbuf34; diff --git a/src/video_core/shader/decode/arithmetic_integer.cpp b/src/video_core/shader/decode/arithmetic_integer.cpp index e60875cc4..21366869d 100644 --- a/src/video_core/shader/decode/arithmetic_integer.cpp +++ b/src/video_core/shader/decode/arithmetic_integer.cpp @@ -166,13 +166,13 @@ u32 ShaderIR::DecodeArithmeticInteger(NodeBlock& bb, u32 pc) {          const auto [op_rhs, test] = [&]() -> std::pair<Node, Node> {              switch (opcode->get().GetId()) {              case OpCode::Id::ICMP_CR: -                return {GetConstBuffer(instr.cbuf34.index, instr.cbuf34.offset), +                return {GetConstBuffer(instr.cbuf34.index, instr.cbuf34.GetOffset()),                          GetRegister(instr.gpr39)};              case OpCode::Id::ICMP_R:                  return {GetRegister(instr.gpr20), GetRegister(instr.gpr39)};              case OpCode::Id::ICMP_RC:                  return {GetRegister(instr.gpr39), -                        GetConstBuffer(instr.cbuf34.index, instr.cbuf34.offset)}; +                        GetConstBuffer(instr.cbuf34.index, instr.cbuf34.GetOffset())};              case OpCode::Id::ICMP_IMM:                  return {Immediate(instr.alu.GetSignedImm20_20()), GetRegister(instr.gpr39)};              default: diff --git a/src/video_core/shader/decode/bfi.cpp b/src/video_core/shader/decode/bfi.cpp index f992bbe2a..70d1c055b 100644 --- a/src/video_core/shader/decode/bfi.cpp +++ b/src/video_core/shader/decode/bfi.cpp @@ -21,7 +21,7 @@ u32 ShaderIR::DecodeBfi(NodeBlock& bb, u32 pc) {          switch (opcode->get().GetId()) {          case OpCode::Id::BFI_RC:              return {GetRegister(instr.gpr39), -                    GetConstBuffer(instr.cbuf34.index, instr.cbuf34.offset)}; +                    GetConstBuffer(instr.cbuf34.index, instr.cbuf34.GetOffset())};          case OpCode::Id::BFI_IMM_R:              return {Immediate(instr.alu.GetSignedImm20_20()), GetRegister(instr.gpr39)};          default: | 
