From: Jonathan Marek Date: Fri, 15 Nov 2019 17:38:28 +0000 (-0500) Subject: freedreno/ir3: disable texture prefetch for 1d array textures X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=0f5743429c76b385db9c513102b2010213ffbb8c;p=mesa.git freedreno/ir3: disable texture prefetch for 1d array textures Prefetch only supports the basic 2D texture case, checking is_array is needed because 1d array textures pass the coord num_components==2 test. Fixes: 2a0d45ae ("freedreno/ir3: Add a NIR pass to select tex instructions eligible for pre-fetch") Signed-off-by: Jonathan Marek Reviewed-by: Rob Clark --- diff --git a/src/freedreno/ir3/ir3_nir_lower_tex_prefetch.c b/src/freedreno/ir3/ir3_nir_lower_tex_prefetch.c index 2faeb9b4169..b2f58809766 100644 --- a/src/freedreno/ir3/ir3_nir_lower_tex_prefetch.c +++ b/src/freedreno/ir3/ir3_nir_lower_tex_prefetch.c @@ -99,13 +99,8 @@ coord_offset(nir_ssa_def *ssa) int ir3_nir_coord_offset(nir_ssa_def *ssa) { - /* only prefetch for simple 2d tex fetch case. Note this check only - * applies to the tex coord src itself, and not in the case where - * we recursively chase a vecN's src. - */ - if (ssa->num_components != 2) - return -1; + assert (ssa->num_components == 2); return coord_offset(ssa); } @@ -140,6 +135,10 @@ lower_tex_prefetch_block(nir_block *block) has_src(tex, nir_tex_src_sampler_offset)) continue; + /* only prefetch for simple 2d tex fetch case */ + if (tex->sampler_dim != GLSL_SAMPLER_DIM_2D || tex->is_array) + continue; + int idx = nir_tex_instr_src_index(tex, nir_tex_src_coord); /* First source should be the sampling coordinate. */ nir_tex_src *coord = &tex->src[idx];