Module: Mesa Branch: master Commit: 9d3c57281e4fe3842b41578c65bab5a6e23d76c8 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=9d3c57281e4fe3842b41578c65bab5a6e23d76c8
Author: Tom Stellard <[email protected]> Date: Fri May 14 02:15:49 2010 +0200 r300/compiler: fix peephole optimizer Tested-by: Marek Olšák <[email protected]> --- .../drivers/dri/r300/compiler/radeon_optimize.c | 15 ++++++++++++++- 1 files changed, 14 insertions(+), 1 deletions(-) diff --git a/src/mesa/drivers/dri/r300/compiler/radeon_optimize.c b/src/mesa/drivers/dri/r300/compiler/radeon_optimize.c index 80e3eea..fd608cc 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) { _______________________________________________ mesa-commit mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/mesa-commit
