From 5d524ae62c839f02cf2cf0bca4ef232baa21e67c Mon Sep 17 00:00:00 2001 From: Rhys Perry Date: Tue, 25 Aug 2020 16:35:44 +0100 Subject: [PATCH] nir/opt_access: consider global stores Signed-off-by: Rhys Perry Reviewed-by: Connor Abbott Part-of: --- src/compiler/nir/nir_opt_access.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/compiler/nir/nir_opt_access.c b/src/compiler/nir/nir_opt_access.c index 183318f73d5..3ff5a719c43 100644 --- a/src/compiler/nir/nir_opt_access.c +++ b/src/compiler/nir/nir_opt_access.c @@ -109,20 +109,24 @@ gather_intrinsic(struct access_state *state, nir_intrinsic_instr *instr) case nir_intrinsic_deref_atomic_fadd: case nir_intrinsic_deref_atomic_fmin: case nir_intrinsic_deref_atomic_fmax: - case nir_intrinsic_deref_atomic_fcomp_swap: - if (!nir_deref_mode_is(nir_src_as_deref(instr->src[0]), nir_var_mem_ssbo)) + case nir_intrinsic_deref_atomic_fcomp_swap: { + nir_deref_instr *deref = nir_src_as_deref(instr->src[0]); + if (!nir_deref_mode_may_be(deref, nir_var_mem_ssbo | nir_var_mem_global)) break; - var = nir_get_binding_variable(state->shader, nir_chase_binding(instr->src[0])); - if (var) { - _mesa_set_add(state->vars_written, var); - } else { - nir_foreach_variable_with_modes(possible_var, state->shader, nir_var_mem_ssbo) - _mesa_set_add(state->vars_written, possible_var); + if (nir_deref_mode_is(deref, nir_var_mem_ssbo)) { + var = nir_get_binding_variable(state->shader, nir_chase_binding(instr->src[0])); + if (var) { + _mesa_set_add(state->vars_written, var); + } else { + nir_foreach_variable_with_modes(possible_var, state->shader, nir_var_mem_ssbo) + _mesa_set_add(state->vars_written, possible_var); + } } state->buffers_written = true; break; + } default: break;