diff options
Diffstat (limited to 'src/gallium')
-rw-r--r-- | src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp | 19 |
1 files changed, 10 insertions, 9 deletions
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); } |