From 9807a8ddaf3d0b6d8bf8b3e7c0b01cc4c7db4f30 Mon Sep 17 00:00:00 2001 From: Ilia Mirkin Date: Sun, 6 Jul 2014 03:06:55 -0400 Subject: nvc0/ir: unset s/r indirect sources before moving everything With the current logic, it's very likely that s/r indirect sources are right after the "regular" ones. Unset them before moving the texture arguments over rather than after, as one of those arguments would likely have assumed one of the s/r positions. Signed-off-by: Ilia Mirkin --- .../drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp index e6bf1a0740c..c102bc5214c 100644 --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp @@ -600,14 +600,19 @@ NVC0LoweringPass::handleTEX(TexInstruction *i) if (i->tex.target.isArray() || i->tex.rIndirectSrc >= 0 || i->tex.sIndirectSrc >= 0) { LValue *src = new_LValue(func, FILE_GPR); // 0xttxsaaaa + Value *ticRel = i->getIndirectR(); + Value *tscRel = i->getIndirectS(); + + if (ticRel) + i->setSrc(i->tex.rIndirectSrc, NULL); + if (tscRel) + i->setSrc(i->tex.sIndirectSrc, NULL); + Value *arrayIndex = i->tex.target.isArray() ? i->getSrc(lyr) : NULL; for (int s = dim; s >= 1; --s) i->setSrc(s, i->getSrc(s - 1)); i->setSrc(0, arrayIndex); - Value *ticRel = i->getIndirectR(); - Value *tscRel = i->getIndirectS(); - if (arrayIndex) { int sat = (i->op == OP_TXF) ? 1 : 0; DataType sTy = (i->op == OP_TXF) ? TYPE_U32 : TYPE_F32; @@ -616,14 +621,10 @@ NVC0LoweringPass::handleTEX(TexInstruction *i) bld.loadImm(src, 0); } - if (ticRel) { - i->setSrc(i->tex.rIndirectSrc, NULL); + if (ticRel) bld.mkOp3(OP_INSBF, TYPE_U32, src, ticRel, bld.mkImm(0x0917), src); - } - if (tscRel) { - i->setSrc(i->tex.sIndirectSrc, NULL); + if (tscRel) bld.mkOp3(OP_INSBF, TYPE_U32, src, tscRel, bld.mkImm(0x0710), src); - } i->setSrc(0, src); } -- cgit v1.2.3