diff --git a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp
index 7aaee9464ed2d34945f15b75a4ce82c612cf1683..2395945c3bf2555537e960caeb2aa5f27c4bdf13 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:
         default: {
             switch (instr.opcode.EffectiveOpCode()) {
             case OpCode::Id::EXIT: {
+                ASSERT_MSG(instr.pred.pred_index == static_cast<u64>(Pred::UnusedIndex),
+                           "Predicated exits not implemented");
                 shader.AddLine("return true;");
                 offset = PROGRAM_END - 1;
                 break;
             }
+            case OpCode::Id::KIL: {
+                shader.AddLine("discard;");
+                break;
+            }
             case OpCode::Id::IPA: {
                 const auto& attribute = instr.attribute.fmt28;
                 std::string dest = GetRegister(instr.gpr0);
@@ -589,7 +595,7 @@ private:
         }
 
         // Close the predicate condition scope.
-        if (instr.pred != Pred::UnusedIndex) {
+        if (instr.pred.pred_index != static_cast<u64>(Pred::UnusedIndex)) {
             --shader.scope;
             shader.AddLine('}');
         }