-static nir_ssa_def *
-vc4_nir_pipe_compare_func(nir_builder *b, int func,
- nir_ssa_def *src0, nir_ssa_def *src1)
-{
- switch (func) {
- default:
- fprintf(stderr, "Unknown compare func %d\n", func);
- /* FALLTHROUGH */
- case PIPE_FUNC_NEVER:
- return nir_imm_int(b, 0);
- case PIPE_FUNC_ALWAYS:
- return nir_imm_int(b, ~0);
- case PIPE_FUNC_EQUAL:
- return nir_feq(b, src0, src1);
- case PIPE_FUNC_NOTEQUAL:
- return nir_fne(b, src0, src1);
- case PIPE_FUNC_GREATER:
- return nir_flt(b, src1, src0);
- case PIPE_FUNC_GEQUAL:
- return nir_fge(b, src0, src1);
- case PIPE_FUNC_LESS:
- return nir_flt(b, src0, src1);
- case PIPE_FUNC_LEQUAL:
- return nir_fge(b, src1, src0);
- }
-}
-
-static void
-vc4_nir_emit_alpha_test_discard(struct vc4_compile *c, nir_builder *b,
- nir_ssa_def *alpha)
-{
- if (!c->fs_key->alpha_test)
- return;
-
- nir_ssa_def *alpha_ref =
- vc4_nir_get_state_uniform(b, QUNIFORM_ALPHA_REF);
- nir_ssa_def *condition =
- vc4_nir_pipe_compare_func(b, c->fs_key->alpha_test_func,
- alpha, alpha_ref);
-
- nir_intrinsic_instr *discard =
- nir_intrinsic_instr_create(b->shader,
- nir_intrinsic_discard_if);
- discard->num_components = 1;
- discard->src[0] = nir_src_for_ssa(nir_inot(b, condition));
- nir_builder_instr_insert(b, &discard->instr);
-}
-