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

Reply via email to