r600: quick hack to get KIL_NV working - does condition TR only for now
authorAndre Maasikas <amaasikas@gmail.com>
Fri, 4 Dec 2009 10:58:36 +0000 (12:58 +0200)
committerAndre Maasikas <amaasikas@gmail.com>
Tue, 8 Dec 2009 13:39:20 +0000 (15:39 +0200)
src/mesa/drivers/dri/r600/r700_assembler.c

index 87c1638de480af06eace31ed3fae803d00a199d1..3738edbc2f9889cf606b683b379b6e9564acc54f 100644 (file)
@@ -3554,7 +3554,10 @@ GLboolean assemble_FRC(r700_AssemblerBase *pAsm)
  
 GLboolean assemble_KIL(r700_AssemblerBase *pAsm, GLuint opcode)
 {  
-    checkop2(pAsm);
+    struct prog_instruction *pILInst = &(pAsm->pILInst[pAsm->uiCurInst]);
+
+    if(pILInst->Opcode == OPCODE_KIL)
+        checkop1(pAsm);
 
     pAsm->D.dst.opcode = opcode;  
     //pAsm->D.dst.math = 1;
@@ -3573,16 +3576,23 @@ GLboolean assemble_KIL(r700_AssemblerBase *pAsm, GLuint opcode)
     setswizzle_PVSSRC(&(pAsm->S[0].src), SQ_SEL_0);
     noneg_PVSSRC(&(pAsm->S[0].src));
 
-    if( GL_FALSE == assemble_src(pAsm, 0, 1) )
+    if(pILInst->Opcode == OPCODE_KIL_NV)
     {
-        return GL_FALSE;
+        setaddrmode_PVSSRC(&(pAsm->S[1].src), ADDR_ABSOLUTE);
+        pAsm->S[1].src.rtype = SRC_REG_TEMPORARY;
+        pAsm->S[1].src.reg = 0;
+        setswizzle_PVSSRC(&(pAsm->S[1].src), SQ_SEL_1);
+        neg_PVSSRC(&(pAsm->S[1].src));
     }
-
-    /*if( GL_FALSE == assemble_src(pAsm, 1, -1) )
+    else
     {
-        return GL_FALSE;
+        if( GL_FALSE == assemble_src(pAsm, 0, 1) )
+        {
+            return GL_FALSE;
+        }
+
     }
-    */ 
+
     if ( GL_FALSE == next_ins(pAsm) )
     {
         return GL_FALSE;