freedreno/ir3: disable texture prefetch for 1d array textures
authorJonathan Marek <jonathan@marek.ca>
Fri, 15 Nov 2019 17:38:28 +0000 (12:38 -0500)
committerJonathan Marek <jonathan@marek.ca>
Sun, 17 Nov 2019 17:01:18 +0000 (17:01 +0000)
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 <jonathan@marek.ca>
Reviewed-by: Rob Clark <robdclark@gmail.com>
src/freedreno/ir3/ir3_nir_lower_tex_prefetch.c

index 2faeb9b4169f0c57fc76d66354f578fa1d671c34..b2f58809766a2d1899741213209e496f7a5a2860 100644 (file)
@@ -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];