diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/video_core/renderer_opengl/gl_shader_decompiler.cpp | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp index 7aaee9464..2395945c3 100644 --- a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp +++ b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp | |||
| @@ -566,10 +566,16 @@ private: | |||
| 566 | default: { | 566 | default: { |
| 567 | switch (instr.opcode.EffectiveOpCode()) { | 567 | switch (instr.opcode.EffectiveOpCode()) { |
| 568 | case OpCode::Id::EXIT: { | 568 | case OpCode::Id::EXIT: { |
| 569 | ASSERT_MSG(instr.pred.pred_index == static_cast<u64>(Pred::UnusedIndex), | ||
| 570 | "Predicated exits not implemented"); | ||
| 569 | shader.AddLine("return true;"); | 571 | shader.AddLine("return true;"); |
| 570 | offset = PROGRAM_END - 1; | 572 | offset = PROGRAM_END - 1; |
| 571 | break; | 573 | break; |
| 572 | } | 574 | } |
| 575 | case OpCode::Id::KIL: { | ||
| 576 | shader.AddLine("discard;"); | ||
| 577 | break; | ||
| 578 | } | ||
| 573 | case OpCode::Id::IPA: { | 579 | case OpCode::Id::IPA: { |
| 574 | const auto& attribute = instr.attribute.fmt28; | 580 | const auto& attribute = instr.attribute.fmt28; |
| 575 | std::string dest = GetRegister(instr.gpr0); | 581 | std::string dest = GetRegister(instr.gpr0); |
| @@ -589,7 +595,7 @@ private: | |||
| 589 | } | 595 | } |
| 590 | 596 | ||
| 591 | // Close the predicate condition scope. | 597 | // Close the predicate condition scope. |
| 592 | if (instr.pred != Pred::UnusedIndex) { | 598 | if (instr.pred.pred_index != static_cast<u64>(Pred::UnusedIndex)) { |
| 593 | --shader.scope; | 599 | --shader.scope; |
| 594 | shader.AddLine('}'); | 600 | shader.AddLine('}'); |
| 595 | } | 601 | } |