diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h index 96484cc69f7..03d9cc70942 100644 --- a/src/compiler/nir/nir.h +++ b/src/compiler/nir/nir.h @@ -2195,21 +2195,17 @@ void nir_rewrite_image_intrinsic(nir_intrinsic_instr *instr, static inline bool nir_intrinsic_can_reorder(nir_intrinsic_instr *instr) { - if (nir_intrinsic_has_access(instr) && - nir_intrinsic_access(instr) & ACCESS_VOLATILE) - return false; + if (nir_intrinsic_has_access(instr)) { + enum gl_access_qualifier access = nir_intrinsic_access(instr); + if (access & ACCESS_VOLATILE) + return false; + if (access & ACCESS_CAN_REORDER) + return true; + } if (instr->intrinsic == nir_intrinsic_load_deref) { nir_deref_instr *deref = nir_src_as_deref(instr->src[0]); - return nir_deref_mode_is_in_set(deref, nir_var_read_only_modes) || - (nir_intrinsic_access(instr) & ACCESS_CAN_REORDER); - } else if (instr->intrinsic == nir_intrinsic_load_ssbo || - instr->intrinsic == nir_intrinsic_bindless_image_load || - instr->intrinsic == nir_intrinsic_image_deref_load || - instr->intrinsic == nir_intrinsic_image_load || - instr->intrinsic == nir_intrinsic_ald_nv || - instr->intrinsic == nir_intrinsic_load_sysval_nv) { - return nir_intrinsic_access(instr) & ACCESS_CAN_REORDER; + return nir_deref_mode_is_in_set(deref, nir_var_read_only_modes); } else { const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic];