nv50/ir: fix support for shader input + immediate in gp
authorIlia Mirkin <imirkin@alum.mit.edu>
Sat, 18 Jan 2014 08:18:19 +0000 (03:18 -0500)
committerMaarten Lankhorst <maarten.lankhorst@canonical.com>
Mon, 27 Jan 2014 15:40:42 +0000 (16:40 +0100)
This only works for up to $a3, hopefully we won't go that high.

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

index a28c9175a6d7ff136e37010f2bed30895dd6211f..173497723c2e4f2ecb72b946b164309040636fd9 100644 (file)
@@ -398,9 +398,14 @@ CodeEmitterNV50::setSrcFileBits(const Instruction *i, int enc)
    case 0x0c: // rir
       break;
    case 0x0d: // gir
-      code[0] |= 0x01000000;
       assert(progType == Program::TYPE_GEOMETRY ||
              progType == Program::TYPE_COMPUTE);
+      code[0] |= 0x01000000;
+      if (progType == Program::TYPE_GEOMETRY && i->src(0).isIndirect(0)) {
+         int reg = i->src(0).getIndirect(0)->rep()->reg.data.id;
+         assert(reg < 3);
+         code[0] |= (reg + 1) << 26;
+      }
       break;
    case 0x08: // rcr
       code[0] |= (enc == NV50_OP_ENC_LONG_ALT) ? 0x01000000 : 0x00800000;
index ecf5d1c70a2010b56a831ddaf4849294765d3ebb..1dc50c44b966e3e061f56a994dac92be91787d4b 100644 (file)
@@ -313,6 +313,7 @@ TargetNV50::insnCanLoad(const Instruction *i, int s,
    case 0x0d:
       if (ld->bb->getProgram()->getType() != Program::TYPE_GEOMETRY)
          return false;
+      break;
    default:
       return false;
    }