From f917c735288835a18b8aba799b8e48acc75bdcf9 Mon Sep 17 00:00:00 2001 From: Danylo Piliaiev Date: Tue, 1 Feb 2022 14:32:02 +0200 Subject: [PATCH] ir3: opt_deref in opt loop to remove unnecessary tex casts Otherwise we may be left with such casts: vec1 32 ssa_72 = deref_var &shadow_map (uniform sampler2D) vec1 32 ssa_73 = deref_cast (texture2D *)ssa_72 (uniform texture2D) vec1 32 ssa_74 = deref_cast (sampler *)ssa_72 (uniform sampler) vec1 32 ssa_76 = (float32)tex ssa_73 (texture_deref), ssa_74 (sampler_deref), ssa_75 (coord), ssa_64 (comparator) And crash in ycbcr lowering since we aren't able to follow deref chain. Fixes crash in GFXBench Aztec Ruins Vulkan tests. See issue: https://gitlab.freedesktop.org/mesa/mesa/-/issues/5945 Cc: mesa-stable Signed-off-by: Danylo Piliaiev Part-of: --- src/freedreno/ir3/ir3_nir.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/freedreno/ir3/ir3_nir.c b/src/freedreno/ir3/ir3_nir.c index 331576db804..25029dc2c99 100644 --- a/src/freedreno/ir3/ir3_nir.c +++ b/src/freedreno/ir3/ir3_nir.c @@ -87,6 +87,7 @@ ir3_optimize_loop(struct ir3_compiler *compiler, nir_shader *s) progress |= OPT(s, nir_lower_phis_to_scalar, false); progress |= OPT(s, nir_copy_prop); + progress |= OPT(s, nir_opt_deref); progress |= OPT(s, nir_opt_dce); progress |= OPT(s, nir_opt_cse); static int gcm = -1;