nv50: TXF already has integer arguments, don't try to convert from f32
authorIlia Mirkin <imirkin@alum.mit.edu>
Fri, 29 Nov 2013 06:18:57 +0000 (01:18 -0500)
committerMaarten Lankhorst <maarten.lankhorst@canonical.com>
Mon, 9 Dec 2013 14:10:37 +0000 (15:10 +0100)
Fixes the texelFetch piglit tests

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nv50.cpp

index caaf09f6787a565251524ab00fdcc7525fe2acc6..07f3a217e59816c1509c6c1687c7d081b9f64737 100644 (file)
@@ -575,14 +575,16 @@ NV50LoweringPreSSA::handleTEX(TexInstruction *i)
       if (i->op == OP_TXB || i->op == OP_TXL)
          i->swapSources(dref, lod);
 
-   // array index must be converted to u32
    if (i->tex.target.isArray()) {
-      Value *layer = i->getSrc(arg - 1);
-      LValue *src = new_LValue(func, FILE_GPR);
-      bld.mkCvt(OP_CVT, TYPE_U32, src, TYPE_F32, layer);
-      bld.mkOp2(OP_MIN, TYPE_U32, src, src, bld.loadImm(NULL, 511));
-      i->setSrc(arg - 1, src);
-
+      if (i->op != OP_TXF) {
+         // array index must be converted to u32, but it's already an integer
+         // for TXF
+         Value *layer = i->getSrc(arg - 1);
+         LValue *src = new_LValue(func, FILE_GPR);
+         bld.mkCvt(OP_CVT, TYPE_U32, src, TYPE_F32, layer);
+         bld.mkOp2(OP_MIN, TYPE_U32, src, src, bld.loadImm(NULL, 511));
+         i->setSrc(arg - 1, src);
+      }
       if (i->tex.target.isCube()) {
          std::vector<Value *> acube, a2d;
          int c;