Module: Mesa Branch: master Commit: d6ab3106cf7475cdaddf788a3e650bdd5833f73c URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=d6ab3106cf7475cdaddf788a3e650bdd5833f73c
Author: Christoph Bumiller <e0425...@student.tuwien.ac.at> Date: Fri Apr 27 23:27:34 2012 +0200 nvc0/ir: try to use the optimal texture op mode Don't really know what they are yet but for groups of textures, the last one should use mode "p" and the others "t". --- .../drivers/nvc0/codegen/nv50_ir_emit_nvc0.cpp | 18 +++++++++++++++--- 1 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/gallium/drivers/nvc0/codegen/nv50_ir_emit_nvc0.cpp b/src/gallium/drivers/nvc0/codegen/nv50_ir_emit_nvc0.cpp index c91c56c..026a6a0 100644 --- a/src/gallium/drivers/nvc0/codegen/nv50_ir_emit_nvc0.cpp +++ b/src/gallium/drivers/nvc0/codegen/nv50_ir_emit_nvc0.cpp @@ -965,13 +965,25 @@ void CodeEmitterNVC0::emitTEXCSAA(const TexInstruction *i) srcId(i->src(0), 20); } +static inline bool +isNextIndependentTex(const TexInstruction *i) +{ + if (!i->next || !isTextureOp(i->next->op)) + return false; + if (i->getDef(0)->interfers(i->next->getSrc(0))) + return false; + return !i->next->srcExists(1) || !i->getDef(0)->interfers(i->next->getSrc(1)); +} + void CodeEmitterNVC0::emitTEX(const TexInstruction *i) { code[0] = 0x00000006; - if (1) - code[0] |= 0x80; // normal/t/p mode = t, XXX: what is this ? + if (isNextIndependentTex(i)) + code[0] |= 0x080; // t mode + else + code[0] |= 0x100; // p mode if (i->tex.liveOnly) code[0] |= 1 << 9; @@ -1021,7 +1033,7 @@ CodeEmitterNVC0::emitTEX(const TexInstruction *i) if (i->tex.target.isShadow()) code[1] |= 1 << 24; - const int src1 = MAX2(i->predSrc + 1, 1); // if predSrc == 1, no 2nd src + const int src1 = (i->predSrc == 1) ? 2 : 1; // if predSrc == 1, !srcExists(2) if (i->srcExists(src1) && i->src(src1).getFile() == FILE_IMMEDIATE) { // lzero _______________________________________________ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit