From 9d3c57281e4fe3842b41578c65bab5a6e23d76c8 Mon Sep 17 00:00:00 2001 From: Tom Stellard Date: Fri, 14 May 2010 02:15:49 +0200 Subject: r300/compiler: fix peephole optimizer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Tested-by: Marek Olšák --- src/mesa/drivers/dri/r300/compiler/radeon_optimize.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'src/mesa/drivers') diff --git a/src/mesa/drivers/dri/r300/compiler/radeon_optimize.c b/src/mesa/drivers/dri/r300/compiler/radeon_optimize.c index 80e3eeacfc..fd608ccb72 100644 --- a/src/mesa/drivers/dri/r300/compiler/radeon_optimize.c +++ b/src/mesa/drivers/dri/r300/compiler/radeon_optimize.c @@ -82,6 +82,18 @@ static void peephole_scan_read(void * data, struct rc_instruction * inst, if (file != RC_FILE_TEMPORARY || index != s->Mov->U.I.DstReg.Index) return; + /* These instructions cannot read from the constants file. + * see radeonTransformTEX() + */ + if(s->Mov->U.I.SrcReg[0].File != RC_FILE_TEMPORARY && + s->Mov->U.I.SrcReg[0].File != RC_FILE_INPUT && + (inst->U.I.Opcode == RC_OPCODE_TEX || + inst->U.I.Opcode == RC_OPCODE_TXB || + inst->U.I.Opcode == RC_OPCODE_TXP || + inst->U.I.Opcode == RC_OPCODE_KIL)){ + s->Conflict = 1; + return; + } if ((mask & s->MovMask) == mask) { if (s->SourceClobbered) { s->Conflict = 1; @@ -109,7 +121,8 @@ static void peephole_scan_write(void * data, struct rc_instruction * inst, s->DefinedMask |= mask; else s->DefinedMask &= ~mask; - } else if (file == s->Mov->U.I.SrcReg[0].File && index == s->Mov->U.I.SrcReg[0].Index) { + } + if (file == s->Mov->U.I.SrcReg[0].File && index == s->Mov->U.I.SrcReg[0].Index) { if (mask & s->SourcedMask) s->SourceClobbered = 1; } else if (s->Mov->U.I.SrcReg[0].RelAddr && file == RC_FILE_ADDRESS) { -- cgit v1.2.3