diff options
| author | 2018-04-20 09:17:39 -0500 | |
|---|---|---|
| committer | 2018-04-20 21:09:34 -0500 | |
| commit | 17a0ef1e1eb65ceb41232e694f779e1645e2b2d7 (patch) | |
| tree | 99c74915936c3716266b18e6203aad76b9265da0 /src | |
| parent | ShaderGen: Implemented predicated instruction execution. (diff) | |
| download | yuzu-17a0ef1e1eb65ceb41232e694f779e1645e2b2d7.tar.gz yuzu-17a0ef1e1eb65ceb41232e694f779e1645e2b2d7.tar.xz yuzu-17a0ef1e1eb65ceb41232e694f779e1645e2b2d7.zip | |
ShaderGen: Implemented the KIL instruction, which is equivalent to 'discard'.
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 | } |