nvc0/ir: fix predicated PFETCH emission
authorIlia Mirkin <imirkin@alum.mit.edu>
Thu, 30 Apr 2015 03:05:44 +0000 (23:05 -0400)
committerIlia Mirkin <imirkin@alum.mit.edu>
Thu, 30 Apr 2015 03:34:22 +0000 (23:34 -0400)
src1 would contain the predicate, which would get emitted as a register
source by an undiscerning srcId helper. Work around this in the same way
as in emitTEX.

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Cc: mesa-stable@lists.freedesktop.org
src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gk110.cpp
src/gallium/drivers/nouveau/codegen/nv50_ir_emit_nvc0.cpp

index d7c6b808fbf8a0fb4763bb7cdf9c3e89f25452cf..a6e6c1fa120df727ce04bb74ce6cde7da01d7d38 100644 (file)
@@ -1333,8 +1333,10 @@ CodeEmitterGK110::emitPFETCH(const Instruction *i)
 
    emitPredicate(i);
 
+   const int src1 = (i->predSrc == 1) ? 2 : 1; // if predSrc == 1, !srcExists(2)
+
    defId(i->def(0), 2);
-   srcId(i->src(1), 10);
+   srcId(i, 1, 10);
 }
 
 void
index 1a4f6e09b75968cde753ab27c2b65534e2d26c2a..4ad098eed50fb89fbad39daa64b65170a5d76a83 100644 (file)
@@ -1495,8 +1495,10 @@ CodeEmitterNVC0::emitPFETCH(const Instruction *i)
 
    emitPredicate(i);
 
+   const int src1 = (i->predSrc == 1) ? 2 : 1; // if predSrc == 1, !srcExists(2)
+
    defId(i->def(0), 14);
-   srcId(i->src(1), 20);
+   srcId(i, 1, 20);
 }
 
 void