diff options
| -rw-r--r-- | src/video_core/shader/decode/xmad.cpp | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/src/video_core/shader/decode/xmad.cpp b/src/video_core/shader/decode/xmad.cpp index fbd7e9a17..6191ffba1 100644 --- a/src/video_core/shader/decode/xmad.cpp +++ b/src/video_core/shader/decode/xmad.cpp | |||
| @@ -31,7 +31,7 @@ u32 ShaderIR::DecodeXmad(NodeBlock& bb, u32 pc) { | |||
| 31 | const bool is_signed_b = instr.xmad.sign_b == 1; | 31 | const bool is_signed_b = instr.xmad.sign_b == 1; |
| 32 | const bool is_signed_c = is_signed_a; | 32 | const bool is_signed_c = is_signed_a; |
| 33 | 33 | ||
| 34 | auto [is_merge, is_psl, is_high_b, mode, op_b, | 34 | auto [is_merge, is_psl, is_high_b, mode, op_b_binding, |
| 35 | op_c] = [&]() -> std::tuple<bool, bool, bool, Tegra::Shader::XmadMode, Node, Node> { | 35 | op_c] = [&]() -> std::tuple<bool, bool, bool, Tegra::Shader::XmadMode, Node, Node> { |
| 36 | switch (opcode->get().GetId()) { | 36 | switch (opcode->get().GetId()) { |
| 37 | case OpCode::Id::XMAD_CR: | 37 | case OpCode::Id::XMAD_CR: |
| @@ -67,9 +67,10 @@ u32 ShaderIR::DecodeXmad(NodeBlock& bb, u32 pc) { | |||
| 67 | op_a = SignedOperation(OperationCode::IBitfieldExtract, is_signed_a, std::move(op_a), | 67 | op_a = SignedOperation(OperationCode::IBitfieldExtract, is_signed_a, std::move(op_a), |
| 68 | instr.xmad.high_a ? Immediate(16) : Immediate(0), Immediate(16)); | 68 | instr.xmad.high_a ? Immediate(16) : Immediate(0), Immediate(16)); |
| 69 | 69 | ||
| 70 | const Node original_b = op_b; | 70 | const Node original_b = op_b_binding; |
| 71 | op_b = SignedOperation(OperationCode::IBitfieldExtract, is_signed_b, std::move(op_b), | 71 | const Node op_b = |
| 72 | is_high_b ? Immediate(16) : Immediate(0), Immediate(16)); | 72 | SignedOperation(OperationCode::IBitfieldExtract, is_signed_b, std::move(op_b_binding), |
| 73 | is_high_b ? Immediate(16) : Immediate(0), Immediate(16)); | ||
| 73 | 74 | ||
| 74 | // we already check sign_a and sign_b is difference or not before so just use one in here. | 75 | // we already check sign_a and sign_b is difference or not before so just use one in here. |
| 75 | Node product = SignedOperation(OperationCode::IMul, is_signed_a, op_a, op_b); | 76 | Node product = SignedOperation(OperationCode::IMul, is_signed_a, op_a, op_b); |