nv50/ir: use levelZero for non-frag tex/txp ops
authorIlia Mirkin <imirkin@alum.mit.edu>
Tue, 18 Oct 2016 04:25:38 +0000 (00:25 -0400)
committerIlia Mirkin <imirkin@alum.mit.edu>
Sat, 22 Oct 2016 16:02:35 +0000 (12:02 -0400)
radeonsi also does the same thing. I suspect that this is likely to be a
no-op in reality, but it brings nouveau code closer to what the blob
produces. Plus it makes sense to not try to do auto-derivatives on this.

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
src/gallium/drivers/nouveau/codegen/nv50_ir_from_tgsi.cpp

index 3e4f26c6bb1ad13bac9451366ad870be01a8fac6..b47fc497c87caac584aee52209aba7f98c115a13 100644 (file)
@@ -2227,6 +2227,11 @@ Converter::handleTEX(Value *dst[4], int R, int S, int L, int C, int Dx, int Dy)
 
    if (tgsi.getOpcode() == TGSI_OPCODE_SAMPLE_C_LZ)
       texi->tex.levelZero = true;
+   if (prog->getType() != Program::TYPE_FRAGMENT &&
+       (tgsi.getOpcode() == TGSI_OPCODE_TEX ||
+        tgsi.getOpcode() == TGSI_OPCODE_TEX2 ||
+        tgsi.getOpcode() == TGSI_OPCODE_TXP))
+      texi->tex.levelZero = true;
    if (tgsi.getOpcode() == TGSI_OPCODE_TG4 && !tgt.isShadow())
       texi->tex.gatherComp = tgsi.getSrc(1).getValueU32(0, info);