diff --git a/src/compiler/nir/nir_divergence_analysis.c b/src/compiler/nir/nir_divergence_analysis.c index ddec11ff5cd..b64f673b18c 100644 --- a/src/compiler/nir/nir_divergence_analysis.c +++ b/src/compiler/nir/nir_divergence_analysis.c @@ -679,6 +679,13 @@ visit_intrinsic(nir_intrinsic_instr *instr, struct divergence_state *state) is_divergent = src_divergent(instr->src[0], state); break; + case nir_intrinsic_quad_swizzle_amd: + case nir_intrinsic_masked_swizzle_amd: + /* Without fetch inactive, reads for inactive lanes have to return 0. */ + is_divergent = !nir_intrinsic_fetch_inactive(instr) || + src_divergent(instr->src[0], state); + break; + /* Intrinsics with divergence depending on sources */ case nir_intrinsic_convert_alu_types: case nir_intrinsic_ddx: @@ -736,8 +743,6 @@ visit_intrinsic(nir_intrinsic_instr *instr, struct divergence_state *state) case nir_intrinsic_load_converted_mem_pan: case nir_intrinsic_atomic_counter_read: case nir_intrinsic_atomic_counter_read_deref: - case nir_intrinsic_quad_swizzle_amd: - case nir_intrinsic_masked_swizzle_amd: case nir_intrinsic_is_sparse_texels_resident: case nir_intrinsic_is_sparse_resident_zink: case nir_intrinsic_sparse_residency_code_and: