diff --git a/src/compiler/nir/nir_opt_load_skip_helpers.c b/src/compiler/nir/nir_opt_load_skip_helpers.c index 752ce89ea59..c00a850cdf1 100644 --- a/src/compiler/nir/nir_opt_load_skip_helpers.c +++ b/src/compiler/nir/nir_opt_load_skip_helpers.c @@ -161,7 +161,11 @@ nir_opt_load_skip_helpers(nir_shader *shader, nir_opt_load_skip_helpers_options case nir_instr_type_intrinsic: { nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); - if (nir_intrinsic_has_semantic(intr, NIR_INTRINSIC_SUBGROUP)) { + if (nir_intrinsic_has_semantic(intr, NIR_INTRINSIC_SUBGROUP) || + intr->intrinsic == nir_intrinsic_store_scratch) { + /* Subgroup ops might access data from helper lanes and we don't + * know how scratch data is used without more complex tracking. + */ nir_foreach_src(instr, set_src_needs_helpers, &hs); } else if (intr->intrinsic == nir_intrinsic_terminate_if) { /* Unlike demote, terminate disables invocations completely.