Mesa (7.9): r300/compiler: Use correct swizzles for all presubtract sources

Tom Stellard tstellar at kemper.freedesktop.org
Mon Nov 22 20:08:31 UTC 2010


Module: Mesa
Branch: 7.9
Commit: 930c168df600a745f1b0977e4a2355a1c26a91e7
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=930c168df600a745f1b0977e4a2355a1c26a91e7

Author: Tom Stellard <tstellar at gmail.com>
Date:   Mon Nov 22 12:00:10 2010 -0800

r300/compiler: Use correct swizzles for all presubtract sources

---

 .../drivers/dri/r300/compiler/radeon_optimize.c    |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/src/mesa/drivers/dri/r300/compiler/radeon_optimize.c b/src/mesa/drivers/dri/r300/compiler/radeon_optimize.c
index 423ebbf..bebe806 100644
--- a/src/mesa/drivers/dri/r300/compiler/radeon_optimize.c
+++ b/src/mesa/drivers/dri/r300/compiler/radeon_optimize.c
@@ -566,6 +566,7 @@ static int presub_helper(
 		for(i = 0; i < info->NumSrcRegs; i++) {
 			unsigned int mask = src_reads_dst_mask(
 				inst->U.I.SrcReg[i], s->Inst->U.I.DstReg);
+			struct rc_src_register src = inst->U.I.SrcReg[i];
 			/* XXX We could be more aggressive here using
 			 * presubtract.  It is okay if SrcReg[i] only reads
 			 * from some of the mask components. */
@@ -577,6 +578,11 @@ static int presub_helper(
 					continue;
 				}
 			}
+			src.File = RC_FILE_PRESUB;
+			if (!c->SwizzleCaps->IsNative(inst->U.I.Opcode, src)){
+				can_remove = 0;
+				break;
+			}
 			if (cant_sub || !can_use_presub) {
 				can_remove = 0;
 				break;




More information about the mesa-commit mailing list