diff options
author | Ilia Mirkin <[email protected]> | 2014-03-11 08:30:01 -0400 |
---|---|---|
committer | Ilia Mirkin <[email protected]> | 2014-03-18 05:56:53 -0400 |
commit | cb3dcb14300613a7628941ff4ba1ad4c52e9772b (patch) | |
tree | 1b082f022f74049a04b30eae09f65b57c355cb9a /src/gallium/drivers/nouveau/codegen | |
parent | ce75a3e8d36e85214e98194ca212504282df47f9 (diff) |
nv50/ir/gk110: fill out texture instruction support
Signed-off-by: Ilia Mirkin <[email protected]>
Diffstat (limited to 'src/gallium/drivers/nouveau/codegen')
-rw-r--r-- | src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gk110.cpp | 33 |
1 files changed, 20 insertions, 13 deletions
diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gk110.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gk110.cpp index 29e246d1571..6a24b0a2299 100644 --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gk110.cpp +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gk110.cpp @@ -973,6 +973,9 @@ CodeEmitterGK110::emitTEX(const TexInstruction *i) case OP_TXD: code[1] = 0x7e000000; break; + case OP_TXF: + code[1] = 0x78000000; + break; default: code[1] = 0x7d800000; break; @@ -983,6 +986,10 @@ CodeEmitterGK110::emitTEX(const TexInstruction *i) code[0] = 0x00000002; code[1] = 0x76000000; break; + case OP_TXF: + code[0] = 0x00000002; + code[1] = 0x70000000; + break; default: code[0] = 0x00000001; code[1] = 0x60000000; @@ -993,25 +1000,25 @@ CodeEmitterGK110::emitTEX(const TexInstruction *i) code[1] |= isNextIndependentTex(i) ? 0x1 : 0x2; // t : p mode - // if (i->tex.liveOnly) - // ? + if (i->tex.liveOnly) + code[0] |= 0x80000000; switch (i->op) { case OP_TEX: break; case OP_TXB: code[1] |= 0x2000; break; case OP_TXL: code[1] |= 0x3000; break; - case OP_TXF: break; // XXX + case OP_TXF: break; case OP_TXG: break; // XXX case OP_TXD: break; default: assert(!"invalid texture op"); break; } - /* + if (i->op == OP_TXF) { if (!i->tex.levelZero) - code[1] |= 0x02000000; - } else */ + code[1] |= 0x1000; + } else if (i->tex.levelZero) { code[1] |= 0x1000; } @@ -1035,18 +1042,18 @@ CodeEmitterGK110::emitTEX(const TexInstruction *i) code[1] |= (i->tex.target.isCube() ? 3 : (i->tex.target.getDim() - 1)) << 7; if (i->tex.target.isArray()) code[1] |= 0x40; - // if (i->tex.target.isShadow()) - // ? - // if (i->tex.target == TEX_TARGET_2D_MS || - // i->tex.target == TEX_TARGET_2D_MS_ARRAY) - // ? + if (i->tex.target.isShadow()) + code[1] |= 0x400; + if (i->tex.target == TEX_TARGET_2D_MS || + i->tex.target == TEX_TARGET_2D_MS_ARRAY) + code[1] |= 0x800; if (i->srcExists(src1) && i->src(src1).getFile() == FILE_IMMEDIATE) { // ? } - // if (i->tex.useOffsets) - // ? + if (i->tex.useOffsets) + code[1] |= 0x200; } void |