Mesa (master): r600: fix dst reg indexing

Alex Deucher agd5f at kemper.freedesktop.org
Mon Jul 20 23:01:17 UTC 2009


Module: Mesa
Branch: master
Commit: cc893d9a98255d3c26df7123ba5cc02e478c9328
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=cc893d9a98255d3c26df7123ba5cc02e478c9328

Author: Kevin DeKorte <kdekorte at gmail.com>
Date:   Mon Jul 20 18:56:47 2009 -0400

r600: fix dst reg indexing

This fixes segfaults in apps like teapot and tunnel

---

 src/mesa/drivers/dri/r600/r700_assembler.c |   11 +++++++++--
 1 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/src/mesa/drivers/dri/r600/r700_assembler.c b/src/mesa/drivers/dri/r600/r700_assembler.c
index 1d41c5c..2d40dfa 100644
--- a/src/mesa/drivers/dri/r600/r700_assembler.c
+++ b/src/mesa/drivers/dri/r600/r700_assembler.c
@@ -2193,6 +2193,7 @@ GLboolean assemble_alu_instruction(r700_AssemblerBase *pAsm)
 GLboolean next_ins(r700_AssemblerBase *pAsm)
 {
     struct prog_instruction *pILInst = &(pAsm->pILInst[pAsm->uiCurInst]);
+    uint index;
 
     if( GL_TRUE == IsTex(pILInst->Opcode) )
     {
@@ -2213,14 +2214,20 @@ GLboolean next_ins(r700_AssemblerBase *pAsm)
       
     if(pAsm->D.dst.rtype == DST_REG_OUT) 
     {
+	    if (pAsm->starting_export_register_number >= pAsm->D.dst.reg) {
+		    index = 0;
+	    } else {
+		    index = pAsm->D.dst.reg - pAsm->starting_export_register_number;
+	    }
+
         if(pAsm->D.dst.op3) 
         {        
             // There is no mask for OP3 instructions, so all channels are written        
-            pAsm->pucOutMask[pAsm->D.dst.reg - pAsm->starting_export_register_number] = 0xF;
+            pAsm->pucOutMask[index] = 0xF;
         }
         else 
         {
-            pAsm->pucOutMask[pAsm->D.dst.reg - pAsm->starting_export_register_number] 
+            pAsm->pucOutMask[index]
                |= (unsigned char)pAsm->pILInst[pAsm->uiCurInst].DstReg.WriteMask;
         }
     }




More information about the mesa-commit mailing list