r600 : reset stack flag with one channel only.
authorRichard Li <richardradeon@gmail.com>
Tue, 24 Nov 2009 21:00:25 +0000 (16:00 -0500)
committerRichard Li <richardradeon@gmail.com>
Tue, 24 Nov 2009 21:00:25 +0000 (16:00 -0500)
src/mesa/drivers/dri/r600/r700_assembler.c

index 0c16594adce648d2aaa0a58a8a197ed57d04f7ea..ba97d3e073756bdb0d0aa8950389e36171c197fa 100644 (file)
@@ -5663,6 +5663,8 @@ GLboolean setRetInLoopFlag(r700_AssemblerBase *pAsm, GLuint flagValue)
     pAsm->D2.dst2.literal      = 1;
     pAsm->D2.dst2.SaturateMode = SATURATE_OFF;
     pAsm->D.dst.predicated     = 0;
+    /* in reloc where dislink flag init inst, only one slot alu inst is handled. */
+    pAsm->D.dst.math           = 1; /* TODO : not math really, but one channel op, more generic alu assembler needed */
 #if 0
     pAsm->S[0].src.rtype = SRC_REC_LITERAL;
     //pAsm->S[0].src.reg   = 0;
@@ -6457,6 +6459,7 @@ GLboolean AssembleInstr(GLuint uiFirstInst,
 GLboolean InitShaderProgram(r700_AssemblerBase * pAsm)
 {
     setRetInLoopFlag(pAsm, SQ_SEL_0);
+    pAsm->alu_x_opcode = SQ_CF_INST_ALU;
     return GL_TRUE;
 }
 
@@ -6482,7 +6485,7 @@ GLboolean RelocProgram(r700_AssemblerBase * pAsm)
             if(SIT_CF_ALU == pInst->m_ShaderInstType)
             {
                 pCF_ALU = (R700ControlFlowALUClause *)pInst;
-                if(1 == pCF_ALU->m_Word1.f.count)
+                if(0 == pCF_ALU->m_Word1.f.count)
                 {
                     pCF_ALU->m_Word1.f.cf_inst = SQ_CF_INST_NOP;
                 }