summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndre Maasikas <amaasikas@gmail.com>2010-01-27 10:20:15 +0200
committerAndre Maasikas <amaasikas@gmail.com>2010-01-27 10:22:32 +0200
commitfb24c2678a3f5150a2316a08a37bacdb3b9d2687 (patch)
treea567b076694bdeb5defb7ccc3867376a10fececd
parent2a0622182281bfa8402d3c64345c698583c383d7 (diff)
r600: fix XPD with writemask
same variable used for 2 different temp registers fixes e.g. glsl/bump
-rw-r--r--src/mesa/drivers/dri/r600/r700_assembler.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/src/mesa/drivers/dri/r600/r700_assembler.c b/src/mesa/drivers/dri/r600/r700_assembler.c
index c01b2fbb14..89adb77bf5 100644
--- a/src/mesa/drivers/dri/r600/r700_assembler.c
+++ b/src/mesa/drivers/dri/r600/r700_assembler.c
@@ -4491,20 +4491,21 @@ GLboolean assemble_TEX(r700_AssemblerBase *pAsm)
GLboolean assemble_XPD(r700_AssemblerBase *pAsm)
{
- BITS tmp;
+ BITS tmp1;
+ BITS tmp2 = 0;
if( GL_FALSE == checkop2(pAsm) )
{
return GL_FALSE;
}
- tmp = gethelpr(pAsm);
+ tmp1 = gethelpr(pAsm);
pAsm->D.dst.opcode = SQ_OP2_INST_MUL;
setaddrmode_PVSDST(&(pAsm->D.dst), ADDR_ABSOLUTE);
pAsm->D.dst.rtype = DST_REG_TEMPORARY;
- pAsm->D.dst.reg = tmp;
+ pAsm->D.dst.reg = tmp1;
nomask_PVSDST(&(pAsm->D.dst));
if( GL_FALSE == assemble_src(pAsm, 0, -1) )
@@ -4530,11 +4531,11 @@ GLboolean assemble_XPD(r700_AssemblerBase *pAsm)
if(0xF != pAsm->pILInst[pAsm->uiCurInst].DstReg.WriteMask)
{
- tmp = gethelpr(pAsm);
+ tmp2 = gethelpr(pAsm);
setaddrmode_PVSDST(&(pAsm->D.dst), ADDR_ABSOLUTE);
pAsm->D.dst.rtype = DST_REG_TEMPORARY;
- pAsm->D.dst.reg = tmp;
+ pAsm->D.dst.reg = tmp2;
nomask_PVSDST(&(pAsm->D.dst));
}
@@ -4562,7 +4563,7 @@ GLboolean assemble_XPD(r700_AssemblerBase *pAsm)
// result1 + (neg) result0
setaddrmode_PVSSRC(&(pAsm->S[2].src),ADDR_ABSOLUTE);
pAsm->S[2].src.rtype = SRC_REG_TEMPORARY;
- pAsm->S[2].src.reg = tmp;
+ pAsm->S[2].src.reg = tmp1;
neg_PVSSRC(&(pAsm->S[2].src));
noswizzle_PVSSRC(&(pAsm->S[2].src));
@@ -4585,7 +4586,7 @@ GLboolean assemble_XPD(r700_AssemblerBase *pAsm)
// Use tmp as source
setaddrmode_PVSSRC(&(pAsm->S[0].src), ADDR_ABSOLUTE);
pAsm->S[0].src.rtype = SRC_REG_TEMPORARY;
- pAsm->S[0].src.reg = tmp;
+ pAsm->S[0].src.reg = tmp2;
noneg_PVSSRC(&(pAsm->S[0].src));
noswizzle_PVSSRC(&(pAsm->S[0].src));