diff --git a/src/compiler/nir/nir_divergence_analysis.c b/src/compiler/nir/nir_divergence_analysis.c index 15ba95f52ff..9fa6e27c537 100644 --- a/src/compiler/nir/nir_divergence_analysis.c +++ b/src/compiler/nir/nir_divergence_analysis.c @@ -651,12 +651,6 @@ visit_intrinsic(nir_intrinsic_instr *instr, struct divergence_state *state) is_divergent = src_divergent(instr->src[0], state); break; - case nir_intrinsic_load_global_amd: - is_divergent = (src_divergent(instr->src[0], state) || - src_divergent(instr->src[1], state)) && - !(nir_intrinsic_access(instr) & ACCESS_SMEM_AMD); - break; - /* Intrinsics with divergence depending on sources */ case nir_intrinsic_convert_alu_types: case nir_intrinsic_ddx: @@ -684,6 +678,7 @@ visit_intrinsic(nir_intrinsic_instr *instr, struct divergence_state *state) case nir_intrinsic_quad_vote_all: case nir_intrinsic_load_shared2_amd: case nir_intrinsic_load_global_constant: + case nir_intrinsic_load_global_amd: case nir_intrinsic_load_uniform: case nir_intrinsic_load_constant: case nir_intrinsic_load_sample_pos_from_id: @@ -984,6 +979,10 @@ visit_intrinsic(nir_intrinsic_instr *instr, struct divergence_state *state) (nir_intrinsic_access(instr) & ACCESS_SKIP_HELPERS)) is_divergent = true; + if (nir_intrinsic_has_access(instr) && + (nir_intrinsic_access(instr) & ACCESS_SMEM_AMD)) + is_divergent = false; + instr->def.divergent = is_divergent; return is_divergent; }