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