From 765bf9a25be2a69bdd94bac6d95afb022973110e Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Fri, 19 Apr 2024 22:02:33 -0400 Subject: [PATCH] agx: switch to demote internally Signed-off-by: Alyssa Rosenzweig Part-of: --- src/asahi/compiler/agx_nir_lower_cull_distance.c | 2 +- src/asahi/compiler/agx_nir_lower_discard_zs_emit.c | 7 +++++-- src/asahi/lib/agx_nir_prolog_epilog.c | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/asahi/compiler/agx_nir_lower_cull_distance.c b/src/asahi/compiler/agx_nir_lower_cull_distance.c index ae124e0482f..bd092769ada 100644 --- a/src/asahi/compiler/agx_nir_lower_cull_distance.c +++ b/src/asahi/compiler/agx_nir_lower_cull_distance.c @@ -107,7 +107,7 @@ agx_nir_lower_cull_distance_fs(nir_shader *s, unsigned nr_distances) } /* Emulate primitive culling by discarding fragments */ - nir_discard_if(b, culled); + nir_demote_if(b, culled); s->info.inputs_read |= BITFIELD64_RANGE(VARYING_SLOT_CULL_PRIMITIVE, DIV_ROUND_UP(nr_distances, 4)); diff --git a/src/asahi/compiler/agx_nir_lower_discard_zs_emit.c b/src/asahi/compiler/agx_nir_lower_discard_zs_emit.c index 9e5bb963231..1d8f1fcd0c9 100644 --- a/src/asahi/compiler/agx_nir_lower_discard_zs_emit.c +++ b/src/asahi/compiler/agx_nir_lower_discard_zs_emit.c @@ -84,7 +84,9 @@ static bool lower_discard(nir_builder *b, nir_intrinsic_instr *intr, UNUSED void *data) { if (intr->intrinsic != nir_intrinsic_discard && - intr->intrinsic != nir_intrinsic_discard_if) + intr->intrinsic != nir_intrinsic_discard_if && + intr->intrinsic != nir_intrinsic_demote && + intr->intrinsic != nir_intrinsic_demote_if) return false; b->cursor = nir_before_instr(&intr->instr); @@ -93,7 +95,8 @@ lower_discard(nir_builder *b, nir_intrinsic_instr *intr, UNUSED void *data) nir_def *no_samples = nir_imm_intN_t(b, 0, 16); nir_def *killed_samples = all_samples; - if (intr->intrinsic == nir_intrinsic_discard_if) + if (intr->intrinsic == nir_intrinsic_discard_if || + intr->intrinsic == nir_intrinsic_demote_if) killed_samples = nir_bcsel(b, intr->src[0].ssa, all_samples, no_samples); /* This will get lowered later as needed */ diff --git a/src/asahi/lib/agx_nir_prolog_epilog.c b/src/asahi/lib/agx_nir_prolog_epilog.c index 8de8a1a3674..2b1d84b0ad2 100644 --- a/src/asahi/lib/agx_nir_prolog_epilog.c +++ b/src/asahi/lib/agx_nir_prolog_epilog.c @@ -47,7 +47,7 @@ agx_nir_lower_poly_stipple(nir_shader *s) nir_imm_int(b, 1)); /* Discard fragments where the pattern is 0 */ - nir_discard_if(b, nir_ieq_imm(b, bit, 0)); + nir_demote_if(b, nir_ieq_imm(b, bit, 0)); s->info.fs.uses_discard = true; nir_metadata_preserve(b->impl,