From 85a31fa1fc906d500e10a7fa5c9973aa17e7f1d6 Mon Sep 17 00:00:00 2001 From: Karol Herbst Date: Thu, 27 Jul 2023 00:23:20 +0200 Subject: [PATCH] nv50/ir/nir: fix txq emission on MS textures In GL and a lot of Vulkan if we end up with either a lod or an ms index. Sadly in Vulkan we can end up with both and have to choose properly. For TXQ we have to emit a zero LOD. For TXF we have to emit the ms index. Fixes: bb032d8b629 ("nv50/ir/nir: implement nir_instr_type_tex") Signed-off-by: Karol Herbst Part-of: --- src/nouveau/codegen/nv50_ir_from_nir.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/nouveau/codegen/nv50_ir_from_nir.cpp b/src/nouveau/codegen/nv50_ir_from_nir.cpp index 6c8b783..5527531 100644 --- a/src/nouveau/codegen/nv50_ir_from_nir.cpp +++ b/src/nouveau/codegen/nv50_ir_from_nir.cpp @@ -2964,8 +2964,12 @@ Converter::visit(nir_tex_instr *insn) srcs.push_back(loadImm(NULL, 0)); if (biasIdx != -1) srcs.push_back(getSrc(&insn->src[biasIdx].src, 0)); - if (lodIdx != -1) + // TXQ requires a lod argument for all queries we care about here. + // For other ops on MS textures we skip it. + if (lodIdx != -1 && !target.isMS()) srcs.push_back(getSrc(&insn->src[lodIdx].src, 0)); + else if (op == OP_TXQ) + srcs.push_back(zero); // TXQ always needs an LOD else if (op == OP_TXF) lz = true; if (msIdx != -1) @@ -3032,6 +3036,7 @@ Converter::visit(nir_tex_instr *insn) texi->tex.mask = 0x8; texi->tex.query = TXQ_DIMS; break; + // TODO: TXQ_SAMPLE_POSITION needs the sample id instead of the LOD emited further up. default: break; } -- 2.7.4