nir/gather_info: use subgroup/quadgroup flags

Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Reviewed-by: Faith Ekstrand <faith.ekstrand@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/33410>
This commit is contained in:
Alyssa Rosenzweig 2025-02-05 12:55:43 -05:00 committed by Marge Bot
parent b9ce851b6c
commit edb0164623

View file

@ -770,53 +770,6 @@ gather_intrinsic_info(nir_intrinsic_instr *instr, nir_shader *shader,
}
break;
case nir_intrinsic_ddx:
case nir_intrinsic_ddx_fine:
case nir_intrinsic_ddx_coarse:
case nir_intrinsic_ddy:
case nir_intrinsic_ddy_fine:
case nir_intrinsic_ddy_coarse:
if (shader->info.stage == MESA_SHADER_FRAGMENT)
shader->info.fs.needs_quad_helper_invocations = true;
break;
case nir_intrinsic_quad_vote_any:
case nir_intrinsic_quad_vote_all:
case nir_intrinsic_quad_broadcast:
case nir_intrinsic_quad_swap_horizontal:
case nir_intrinsic_quad_swap_vertical:
case nir_intrinsic_quad_swap_diagonal:
case nir_intrinsic_quad_swizzle_amd:
if (shader->info.stage == MESA_SHADER_FRAGMENT)
shader->info.fs.needs_quad_helper_invocations = true;
break;
case nir_intrinsic_vote_any:
case nir_intrinsic_vote_all:
case nir_intrinsic_vote_feq:
case nir_intrinsic_vote_ieq:
case nir_intrinsic_ballot:
case nir_intrinsic_first_invocation:
case nir_intrinsic_last_invocation:
case nir_intrinsic_read_invocation:
case nir_intrinsic_read_first_invocation:
case nir_intrinsic_elect:
case nir_intrinsic_reduce:
case nir_intrinsic_inclusive_scan:
case nir_intrinsic_exclusive_scan:
case nir_intrinsic_shuffle:
case nir_intrinsic_shuffle_xor:
case nir_intrinsic_shuffle_up:
case nir_intrinsic_shuffle_down:
case nir_intrinsic_rotate:
case nir_intrinsic_masked_swizzle_amd:
shader->info.uses_wide_subgroup_intrinsics = true;
if (shader->info.stage == MESA_SHADER_FRAGMENT &&
shader->info.fs.require_full_quads)
shader->info.fs.needs_quad_helper_invocations = true;
break;
case nir_intrinsic_end_primitive:
case nir_intrinsic_end_primitive_with_counter:
case nir_intrinsic_end_primitive_nv:
@ -868,6 +821,17 @@ gather_intrinsic_info(nir_intrinsic_instr *instr, nir_shader *shader,
if (nir_intrinsic_writes_external_memory(instr))
shader->info.writes_memory = true;
if (nir_intrinsic_has_semantic(instr, NIR_INTRINSIC_QUADGROUP)) {
if (shader->info.stage == MESA_SHADER_FRAGMENT)
shader->info.fs.needs_quad_helper_invocations = true;
} else if (nir_intrinsic_has_semantic(instr, NIR_INTRINSIC_SUBGROUP)) {
shader->info.uses_wide_subgroup_intrinsics = true;
if (shader->info.stage == MESA_SHADER_FRAGMENT &&
shader->info.fs.require_full_quads)
shader->info.fs.needs_quad_helper_invocations = true;
}
if (instr->intrinsic == nir_intrinsic_image_levels ||
instr->intrinsic == nir_intrinsic_image_size ||
instr->intrinsic == nir_intrinsic_image_samples ||