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 <git@karolherbst.de>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24343>
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)
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;
}