diff options
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 | } |