diff --git a/src/shader_recompiler/backend/spirv/emit_spirv_special.cpp b/src/shader_recompiler/backend/spirv/emit_spirv_special.cpp
index 8bb94f546..ae8b39f41 100644
--- a/src/shader_recompiler/backend/spirv/emit_spirv_special.cpp
+++ b/src/shader_recompiler/backend/spirv/emit_spirv_special.cpp
@@ -65,6 +65,10 @@ void AlphaTest(EmitContext& ctx) {
     if (comparison == CompareFunction::Always) {
         return;
     }
+    if (!Sirit::ValidId(ctx.frag_color[0])) {
+        return;
+    }
+
     const Id type{ctx.F32[1]};
     const Id rt0_color{ctx.OpLoad(ctx.F32[4], ctx.frag_color[0])};
     const Id alpha{ctx.OpCompositeExtract(type, rt0_color, 3u)};
@@ -74,6 +78,7 @@ void AlphaTest(EmitContext& ctx) {
     const Id alpha_reference{ctx.Constant(ctx.F32[1], ctx.profile.alpha_test_reference)};
     const Id condition{ComparisonFunction(ctx, comparison, alpha, alpha_reference)};
 
+    ctx.OpSelectionMerge(true_label, spv::SelectionControlMask::MaskNone);
     ctx.OpBranchConditional(condition, true_label, discard_label);
     ctx.AddLabel(discard_label);
     ctx.OpKill();