diff options
author | bunnei <bunneidev@gmail.com> | 2018-06-19 04:24:57 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-06-19 04:24:57 +0200 |
commit | 7a0bb406d5ad6f9f649f69978c820d904e59d9cb (patch) | |
tree | 95818043d690ca1df635baf5565f67a7963b832e | |
parent | Merge pull request #561 from DarkLordZach/fix-odyssey-input-crash (diff) | |
parent | GPU: Perform negation after absolute value in the float shader instructions. (diff) | |
download | yuzu-7a0bb406d5ad6f9f649f69978c820d904e59d9cb.tar yuzu-7a0bb406d5ad6f9f649f69978c820d904e59d9cb.tar.gz yuzu-7a0bb406d5ad6f9f649f69978c820d904e59d9cb.tar.bz2 yuzu-7a0bb406d5ad6f9f649f69978c820d904e59d9cb.tar.lz yuzu-7a0bb406d5ad6f9f649f69978c820d904e59d9cb.tar.xz yuzu-7a0bb406d5ad6f9f649f69978c820d904e59d9cb.tar.zst yuzu-7a0bb406d5ad6f9f649f69978c820d904e59d9cb.zip |
-rw-r--r-- | src/video_core/renderer_opengl/gl_shader_decompiler.cpp | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp index 6dc695def..fc80d4b29 100644 --- a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp +++ b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp @@ -822,22 +822,25 @@ private: switch (opcode->GetType()) { case OpCode::Type::Arithmetic: { - std::string op_a = instr.alu.negate_a ? "-" : ""; - op_a += regs.GetRegisterAsFloat(instr.gpr8); + std::string op_a = regs.GetRegisterAsFloat(instr.gpr8); if (instr.alu.abs_a) { op_a = "abs(" + op_a + ')'; } - std::string op_b = instr.alu.negate_b ? "-" : ""; + if (instr.alu.negate_a) { + op_a = "-(" + op_a + ')'; + } + + std::string op_b; if (instr.is_b_imm) { - op_b += GetImmediate19(instr); + op_b = GetImmediate19(instr); } else { if (instr.is_b_gpr) { - op_b += regs.GetRegisterAsFloat(instr.gpr20); + op_b = regs.GetRegisterAsFloat(instr.gpr20); } else { - op_b += regs.GetUniform(instr.cbuf34.index, instr.cbuf34.offset, - GLSLRegister::Type::Float); + op_b = regs.GetUniform(instr.cbuf34.index, instr.cbuf34.offset, + GLSLRegister::Type::Float); } } @@ -845,6 +848,10 @@ private: op_b = "abs(" + op_b + ')'; } + if (instr.alu.negate_b) { + op_b = "-(" + op_b + ')'; + } + switch (opcode->GetId()) { case OpCode::Id::MOV_C: case OpCode::Id::MOV_R: { |