From edb0164623c9107d2b1a336610a6f4605d6cf090 Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Wed, 5 Feb 2025 12:55:43 -0500 Subject: [PATCH] nir/gather_info: use subgroup/quadgroup flags Signed-off-by: Alyssa Rosenzweig Reviewed-by: Faith Ekstrand Part-of: --- src/compiler/nir/nir_gather_info.c | 58 ++++++------------------------ 1 file changed, 11 insertions(+), 47 deletions(-) diff --git a/src/compiler/nir/nir_gather_info.c b/src/compiler/nir/nir_gather_info.c index 3c340d0e27f..1a619f535d8 100644 --- a/src/compiler/nir/nir_gather_info.c +++ b/src/compiler/nir/nir_gather_info.c @@ -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 ||