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: bb032d8b62 ("nv50/ir/nir: implement nir_instr_type_tex")
Signed-off-by: Karol Herbst <git@karolherbst.de>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24343>
This commit is contained in:
Karol Herbst
2023-07-27 00:23:20 +02:00
committed by Marge Bot
parent 6b2956e569
commit 85a31fa1fc

View File

@@ -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;
}