nir,agx: add "active threads in subgroup" intrinsic
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30633>
This commit is contained in:
@@ -1489,6 +1489,10 @@ agx_emit_intrinsic(agx_builder *b, nir_intrinsic_instr *instr)
|
||||
return agx_get_sr_coverage_to(b, dst,
|
||||
AGX_SR_ACTIVE_THREAD_INDEX_IN_SUBGROUP);
|
||||
|
||||
case nir_intrinsic_load_active_subgroup_count_agx:
|
||||
return agx_get_sr_coverage_to(b, dst,
|
||||
AGX_SR_TOTAL_ACTIVE_THREADS_IN_SUBGROUP);
|
||||
|
||||
case nir_intrinsic_reduce: {
|
||||
assert((instr->def.bit_size == 1 || instr->def.bit_size == 16 ||
|
||||
instr->def.bit_size == 32) &&
|
||||
|
||||
@@ -423,6 +423,8 @@ agx_validate_sr(const agx_instr *I)
|
||||
switch (I->sr) {
|
||||
case AGX_SR_ACTIVE_THREAD_INDEX_IN_QUAD:
|
||||
case AGX_SR_ACTIVE_THREAD_INDEX_IN_SUBGROUP:
|
||||
case AGX_SR_TOTAL_ACTIVE_THREADS_IN_QUAD:
|
||||
case AGX_SR_TOTAL_ACTIVE_THREADS_IN_SUBGROUP:
|
||||
case AGX_SR_COVERAGE_MASK:
|
||||
case AGX_SR_IS_ACTIVE_THREAD:
|
||||
return coverage;
|
||||
|
||||
@@ -270,6 +270,7 @@ visit_intrinsic(nir_intrinsic_instr *instr, struct divergence_state *state)
|
||||
case nir_intrinsic_load_printf_base_identifier:
|
||||
case nir_intrinsic_load_core_id_agx:
|
||||
case nir_intrinsic_load_samples_log2_agx:
|
||||
case nir_intrinsic_load_active_subgroup_count_agx:
|
||||
is_divergent = false;
|
||||
break;
|
||||
|
||||
|
||||
@@ -1850,6 +1850,10 @@ intrinsic("load_fep_w_v3d", dest_comp=1, flags=[CAN_ELIMINATE, CAN_REORDER])
|
||||
# Equivalent to popcount(ballot(true) & ((1 << subgroup_invocation) - 1))
|
||||
intrinsic("load_active_subgroup_invocation_agx", dest_comp=1, flags=[CAN_ELIMINATE])
|
||||
|
||||
# Total active invocations within the subgroup.
|
||||
# Equivalent to popcount(ballot(true))
|
||||
intrinsic("load_active_subgroup_count_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])
|
||||
|
||||
|
||||
Reference in New Issue
Block a user