From b15f3a1107f6ce54bea76fa583442773dd5ab634 Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Mon, 11 Jan 2021 13:52:53 -0500 Subject: [PATCH] pan/bi: Use TEXC for indices >= 8 Otherwise it can't fit, fixes dEQP-GLES3.functional.texture.units.all_units.only_2d.* dEQP-GLES3.functional.texture.units.all_units.only_cube.* dEQP-GLES3.functional.texture.units.all_units.mixed.* Signed-off-by: Alyssa Rosenzweig Tested-by: Maciej Matuszczyk Part-of: --- src/panfrost/bifrost/bifrost_compile.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/panfrost/bifrost/bifrost_compile.c b/src/panfrost/bifrost/bifrost_compile.c index 5f96b5a3eb6..f2306c5bc68 100644 --- a/src/panfrost/bifrost/bifrost_compile.c +++ b/src/panfrost/bifrost/bifrost_compile.c @@ -1625,7 +1625,8 @@ bi_emit_texc(bi_builder *b, nir_tex_instr *instr) } /* Simple textures ops correspond to NIR tex or txl with LOD = 0 on 2D (or cube - * map, TODO) textures. Anything else needs a complete texture op. */ + * map, TODO) textures with sufficiently small immediate indices. Anything else + * needs a complete texture op. */ static bool bi_is_simple_tex(nir_tex_instr *instr) @@ -1639,6 +1640,10 @@ bi_is_simple_tex(nir_tex_instr *instr) return false; } + /* Indices need to fit in 3 bits */ + if (MAX2(instr->sampler_index, instr->texture_index) >= (1 << 3)) + return false; + int lod_idx = nir_tex_instr_src_index(instr, nir_tex_src_lod); if (lod_idx < 0) return true;