diff --git a/src/asahi/compiler/agx_nir_lower_subgroups.c b/src/asahi/compiler/agx_nir_lower_subgroups.c index 30fd7292224..c92f796e24c 100644 --- a/src/asahi/compiler/agx_nir_lower_subgroups.c +++ b/src/asahi/compiler/agx_nir_lower_subgroups.c @@ -29,7 +29,7 @@ lower(nir_builder *b, nir_intrinsic_instr *intr, void *data) } case nir_intrinsic_first_invocation: { - nir_def *active_id = nir_load_active_subgroup_invocation_agx(b); + nir_def *active_id = nir_load_active_subgroup_invocation_agx(b, 16); nir_def *is_first = nir_ieq_imm(b, active_id, 0); nir_def *first_bit = nir_ballot(b, 1, 32, is_first); nir_def_rewrite_uses(&intr->def, nir_ufind_msb(b, first_bit)); diff --git a/src/compiler/nir/nir_intrinsics.py b/src/compiler/nir/nir_intrinsics.py index 74c5f21c533..319f0a9acfc 100644 --- a/src/compiler/nir/nir_intrinsics.py +++ b/src/compiler/nir/nir_intrinsics.py @@ -1801,7 +1801,7 @@ intrinsic("load_fep_w_v3d", dest_comp=1, flags=[CAN_ELIMINATE, CAN_REORDER]) # Active invocation index within the subgroup. # Equivalent to popcount(ballot(true) & ((1 << subgroup_invocation) - 1)) -system_value("active_subgroup_invocation_agx", 1) +intrinsic("load_active_subgroup_invocation_agx", dest_comp=1, flags=[CAN_ELIMINATE]) # Like ballot() but only within a quad. intrinsic("quad_ballot_agx", src_comp=[1], dest_comp=1, flags=[CAN_ELIMINATE])