summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Subv2018-04-20 09:17:39 -0500
committerGravatar Subv2018-04-20 21:09:34 -0500
commit17a0ef1e1eb65ceb41232e694f779e1645e2b2d7 (patch)
tree99c74915936c3716266b18e6203aad76b9265da0 /src
parentShaderGen: Implemented predicated instruction execution. (diff)
downloadyuzu-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.cpp8
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 }