spirv: Fix alpha test
This commit is contained in:
		| @@ -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(); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user