Mesa (master): r300/compiler: fix peephole optimizer
Marek Olšák
mareko at kemper.freedesktop.org
Sun May 16 18:34:43 UTC 2010
Module: Mesa
Branch: master
Commit: 9d3c57281e4fe3842b41578c65bab5a6e23d76c8
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=9d3c57281e4fe3842b41578c65bab5a6e23d76c8
Author: Tom Stellard <tstellar at gmail.com>
Date: Fri May 14 02:15:49 2010 +0200
r300/compiler: fix peephole optimizer
Tested-by: Marek Olšák <maraeo at gmail.com>
---
.../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) {
More information about the mesa-commit
mailing list