diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h index 7d2062d3691..e878a63409d 100644 --- a/src/compiler/nir/nir.h +++ b/src/compiler/nir/nir.h @@ -3264,6 +3264,12 @@ typedef struct nir_lower_tex_options { */ unsigned lower_srgb; + /** + * If true, lower nir_texop_tex on shaders that doesn't support implicit + * LODs to nir_texop_txl. + */ + bool lower_tex_without_implicit_lod; + /** * If true, lower nir_texop_txd on cube maps with nir_texop_txl. */ diff --git a/src/compiler/nir/nir_lower_tex.c b/src/compiler/nir/nir_lower_tex.c index c5762b860fd..e814e65bf2c 100644 --- a/src/compiler/nir/nir_lower_tex.c +++ b/src/compiler/nir/nir_lower_tex.c @@ -1127,6 +1127,8 @@ nir_lower_tex_block(nir_block *block, nir_builder *b, (tex->op == nir_texop_tex && !shader_supports_implicit_lod))) { b->cursor = nir_before_instr(&tex->instr); nir_tex_instr_add_src(tex, nir_tex_src_lod, nir_src_for_ssa(nir_imm_int(b, 0))); + if (tex->op == nir_texop_tex && options->lower_tex_without_implicit_lod) + tex->op = nir_texop_txl; progress = true; continue; }