summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar bunnei2018-04-10 00:02:12 -0400
committerGravatar bunnei2018-04-17 15:25:54 -0400
commit5d529698c94da9c13f8a685d817c9f660fd8abee (patch)
treed46f9497d066ced9f35c815df40eac7c0d491905 /src
parentMerge pull request #341 from shinyquagsire23/pfs-hfs-impl (diff)
downloadyuzu-5d529698c94da9c13f8a685d817c9f660fd8abee.tar.gz
yuzu-5d529698c94da9c13f8a685d817c9f660fd8abee.tar.xz
yuzu-5d529698c94da9c13f8a685d817c9f660fd8abee.zip
gl_shader_decompiler: Partially implement MUFU.
Diffstat (limited to 'src')
-rw-r--r--src/video_core/renderer_opengl/gl_shader_decompiler.cpp13
1 files 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:
270 SetDest(0, dest, op_a + " + " + op_b, 1, 1); 270 SetDest(0, dest, op_a + " + " + op_b, 1, 1);
271 break; 271 break;
272 } 272 }
273 case OpCode::Id::MUFU: {
274 switch (instr.sub_op) {
275 case SubOp::Rcp:
276 SetDest(0, dest, "1.0 / " + op_a, 1, 1);
277 break;
278 default:
279 LOG_ERROR(HW_GPU, "Unhandled sub op: 0x%02x", (int)instr.sub_op.Value());
280 throw DecompileFail("Unhandled sub op");
281 }
282 break;
283 }
273 default: { 284 default: {
274 LOG_CRITICAL(HW_GPU, "Unhandled arithmetic instruction: 0x%02x (%s): 0x%08x", 285 LOG_CRITICAL(HW_GPU, "Unhandled arithmetic instruction: 0x%02x (%s): 0x%08x",
275 static_cast<unsigned>(instr.opcode.EffectiveOpCode()), 286 static_cast<unsigned>(instr.opcode.EffectiveOpCode()),
@@ -298,7 +309,6 @@ private:
298 SetDest(0, dest, op_a + " * " + op_b + " + " + op_c, 1, 1); 309 SetDest(0, dest, op_a + " * " + op_b + " + " + op_c, 1, 1);
299 break; 310 break;
300 } 311 }
301
302 default: { 312 default: {
303 LOG_CRITICAL(HW_GPU, "Unhandled arithmetic FFMA instruction: 0x%02x (%s): 0x%08x", 313 LOG_CRITICAL(HW_GPU, "Unhandled arithmetic FFMA instruction: 0x%02x (%s): 0x%08x",
304 static_cast<unsigned>(instr.opcode.EffectiveOpCode()), 314 static_cast<unsigned>(instr.opcode.EffectiveOpCode()),
@@ -347,7 +357,6 @@ private:
347 LOG_CRITICAL(HW_GPU, "Unhandled instruction: 0x%02x (%s): 0x%08x", 357 LOG_CRITICAL(HW_GPU, "Unhandled instruction: 0x%02x (%s): 0x%08x",
348 static_cast<unsigned>(instr.opcode.EffectiveOpCode()), 358 static_cast<unsigned>(instr.opcode.EffectiveOpCode()),
349 OpCode::GetInfo(instr.opcode).name.c_str(), instr.hex); 359 OpCode::GetInfo(instr.opcode).name.c_str(), instr.hex);
350 throw DecompileFail("Unhandled instruction");
351 break; 360 break;
352 } 361 }
353 } 362 }