r600: disallow negative offsets for relative addressing for now
authorAndre Maasikas <amaasikas@gmail.com>
Mon, 21 Dec 2009 09:47:12 +0000 (11:47 +0200)
committerAndre Maasikas <amaasikas@gmail.com>
Mon, 21 Dec 2009 13:23:27 +0000 (15:23 +0200)
otherwise for example const[ADDR-3] gets us 253 - ALU_SRC_LITERAL which
expects immediate floats to follow and hangs

src/mesa/drivers/dri/r600/r700_assembler.c

index e10b23b97f1130126c125d86415a09c39d163016..51692a11ffb251280794f8c05dde7a7458735aea 100644 (file)
@@ -1262,7 +1262,15 @@ GLboolean assemble_src(r700_AssemblerBase *pAsm,
             }
 
             pAsm->S[fld].src.rtype = SRC_REG_CONSTANT;
-            pAsm->S[fld].src.reg   = pILInst->SrcReg[src].Index;
+            if(pILInst->SrcReg[src].Index < 0)
+            {
+                WARN_ONCE("Negative register offsets not supported yet!\n");
+                pAsm->S[fld].src.reg  = 0;
+            } 
+            else
+            {
+                pAsm->S[fld].src.reg = pILInst->SrcReg[src].Index;
+            }
             break;      
         case PROGRAM_INPUT:
             setaddrmode_PVSSRC(&(pAsm->S[fld].src), ADDR_ABSOLUTE);