From 5d529698c94da9c13f8a685d817c9f660fd8abee Mon Sep 17 00:00:00 2001 From: bunnei Date: Tue, 10 Apr 2018 00:02:12 -0400 Subject: [PATCH] gl_shader_decompiler: Partially implement MUFU. --- .../renderer_opengl/gl_shader_decompiler.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp index e11711533..a439da470 100644 --- a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp +++ b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp @@ -270,6 +270,17 @@ private: SetDest(0, dest, op_a + " + " + op_b, 1, 1); break; } + case OpCode::Id::MUFU: { + switch (instr.sub_op) { + case SubOp::Rcp: + SetDest(0, dest, "1.0 / " + op_a, 1, 1); + break; + default: + LOG_ERROR(HW_GPU, "Unhandled sub op: 0x%02x", (int)instr.sub_op.Value()); + throw DecompileFail("Unhandled sub op"); + } + break; + } default: { LOG_CRITICAL(HW_GPU, "Unhandled arithmetic instruction: 0x%02x (%s): 0x%08x", static_cast(instr.opcode.EffectiveOpCode()), @@ -298,7 +309,6 @@ private: SetDest(0, dest, op_a + " * " + op_b + " + " + op_c, 1, 1); break; } - default: { LOG_CRITICAL(HW_GPU, "Unhandled arithmetic FFMA instruction: 0x%02x (%s): 0x%08x", static_cast(instr.opcode.EffectiveOpCode()), @@ -347,7 +357,6 @@ private: LOG_CRITICAL(HW_GPU, "Unhandled instruction: 0x%02x (%s): 0x%08x", static_cast(instr.opcode.EffectiveOpCode()), OpCode::GetInfo(instr.opcode).name.c_str(), instr.hex); - throw DecompileFail("Unhandled instruction"); break; } }