From bf5cea7232f9ee2934c212211ebefb6fe766526d Mon Sep 17 00:00:00 2001 From: Rhys Perry Date: Fri, 6 Nov 2020 16:10:30 +0000 Subject: [PATCH] nir: allow reordering of loads from read-only modes MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit fossil-db (Navi): Totals from 710 (0.51% of 138917) affected shaders: SGPRs: 45007 -> 44791 (-0.48%) VGPRs: 36116 -> 36284 (+0.47%); split: -0.03%, +0.50% CodeSize: 3811540 -> 3795332 (-0.43%); split: -0.43%, +0.00% MaxWaves: 8018 -> 8005 (-0.16%) Instrs: 758383 -> 755084 (-0.44%); split: -0.44%, +0.01% Cycles: 5786240 -> 5758848 (-0.47%); split: -0.48%, +0.00% Signed-off-by: Rhys Perry Reviewed-by: Daniel Schürmann Part-of: --- src/compiler/nir/nir.h | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h index 9529972..7cf6a85 100644 --- a/src/compiler/nir/nir.h +++ b/src/compiler/nir/nir.h @@ -2161,11 +2161,14 @@ void nir_rewrite_image_intrinsic(nir_intrinsic_instr *instr, static inline bool nir_intrinsic_can_reorder(nir_intrinsic_instr *instr) { - if (instr->intrinsic == nir_intrinsic_load_deref || - 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) { + 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) { return nir_intrinsic_access(instr) & ACCESS_CAN_REORDER; } else { const nir_intrinsic_info *info = -- 2.7.4