Mesa (master): r300/compiler: Clean up rc_pair_alloc_source()

Tom Stellard tstellar at kemper.freedesktop.org
Sat Sep 11 02:54:07 UTC 2010


Module: Mesa
Branch: master
Commit: 598e220f9581db750cf212c59275d25fda810fe1
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=598e220f9581db750cf212c59275d25fda810fe1

Author: Tom Stellard <tstellar at gmail.com>
Date:   Sat Sep  4 19:10:23 2010 -0700

r300/compiler: Clean up rc_pair_alloc_source()

---

 .../dri/r300/compiler/radeon_program_pair.c        |   32 +++++++------------
 1 files changed, 12 insertions(+), 20 deletions(-)

diff --git a/src/mesa/drivers/dri/r300/compiler/radeon_program_pair.c b/src/mesa/drivers/dri/r300/compiler/radeon_program_pair.c
index 5a50584..c31efdb 100644
--- a/src/mesa/drivers/dri/r300/compiler/radeon_program_pair.c
+++ b/src/mesa/drivers/dri/r300/compiler/radeon_program_pair.c
@@ -45,23 +45,16 @@ int rc_pair_alloc_source(struct rc_pair_instruction *pair,
 	if ((!rgb && !alpha) || file == RC_FILE_NONE)
 		return 0;
 
-	if (rgb && pair->RGB.Src[RC_PAIR_PRESUB_SRC].Used) {
-		if (file == RC_FILE_PRESUB) {
-			if (index != pair->RGB.Src[RC_PAIR_PRESUB_SRC].Index) {
+	/* Make sure only one presubtract operation is used per instruction. */
+	if (file == RC_FILE_PRESUB) {
+		if (rgb && pair->RGB.Src[RC_PAIR_PRESUB_SRC].Used
+			&& index != pair->RGB.Src[RC_PAIR_PRESUB_SRC].Index) {
 				return -1;
-			}
-		} else {
-			rgb_used++;
 		}
-	}
 
-	if (alpha && pair->Alpha.Src[RC_PAIR_PRESUB_SRC].Used) {
-		if (file == RC_FILE_PRESUB) {
-			if (index != pair->Alpha.Src[RC_PAIR_PRESUB_SRC].Index) {
+		if (alpha && pair->Alpha.Src[RC_PAIR_PRESUB_SRC].Used
+			&& index != pair->Alpha.Src[RC_PAIR_PRESUB_SRC].Index) {
 				return -1;
-			}
-		} else {
-			alpha_used++;
 		}
 	}
 
@@ -92,17 +85,16 @@ int rc_pair_alloc_source(struct rc_pair_instruction *pair,
 			candidate = i;
 		}
 	}
-	if (candidate < 0 || (rgb && rgb_used > 2) || (alpha && alpha_used > 2))
+
+	if (file == RC_FILE_PRESUB) {
+		candidate = RC_PAIR_PRESUB_SRC;
+	} else if (candidate < 0 || (rgb && rgb_used > 2)
+			|| (alpha && alpha_used > 2)) {
 		return -1;
+	}
 
 	/* candidate >= 0 */
 
-	/* Even if we have a presub src, the above loop needs to run,
-	 * because we still need to make sure there is a free source.
-	 */
-	if (file == RC_FILE_PRESUB)
-		candidate = RC_PAIR_PRESUB_SRC;
-
 	if (rgb) {
 		pair->RGB.Src[candidate].Used = 1;
 		pair->RGB.Src[candidate].File = file;




More information about the mesa-commit mailing list