diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/compiler/nir/nir_lower_tex.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/compiler/nir/nir_lower_tex.c b/src/compiler/nir/nir_lower_tex.c index eee1b3105d5..54db7b761cb 100644 --- a/src/compiler/nir/nir_lower_tex.c +++ b/src/compiler/nir/nir_lower_tex.c @@ -1111,14 +1111,18 @@ nir_lower_tex_block(nir_block *block, nir_builder *b, continue; } + bool shader_supports_implicit_lod = + b->shader->info.stage == MESA_SHADER_FRAGMENT || + (b->shader->info.stage == MESA_SHADER_COMPUTE && + b->shader->info.cs.derivative_group != DERIVATIVE_GROUP_NONE); + /* TXF, TXS and TXL require a LOD but not everything we implement using those * three opcodes provides one. Provide a default LOD of 0. */ if ((nir_tex_instr_src_index(tex, nir_tex_src_lod) == -1) && (tex->op == nir_texop_txf || tex->op == nir_texop_txs || tex->op == nir_texop_txl || tex->op == nir_texop_query_levels || - (tex->op == nir_texop_tex && - b->shader->info.stage != MESA_SHADER_FRAGMENT))) { + (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))); progress = true; |