diff options
| author | 2018-04-10 00:02:12 -0400 | |
|---|---|---|
| committer | 2018-04-17 15:25:54 -0400 | |
| commit | 5d529698c94da9c13f8a685d817c9f660fd8abee (patch) | |
| tree | d46f9497d066ced9f35c815df40eac7c0d491905 /src | |
| parent | Merge pull request #341 from shinyquagsire23/pfs-hfs-impl (diff) | |
| download | yuzu-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.cpp | 13 |
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 | } |