Mesa (master): r300/compiler: More agressive RGB to Alpha conversions

Tom Stellard tstellar at kemper.freedesktop.org
Sun Oct 16 19:58:33 PDT 2011


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

Author: Tom Stellard <tstellar at gmail.com>
Date:   Sat Oct 15 17:55:40 2011 -0400

r300/compiler: More agressive RGB to Alpha conversions

---

 .../drivers/r300/compiler/radeon_pair_schedule.c   |   18 ++++++++++--------
 1 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/src/gallium/drivers/r300/compiler/radeon_pair_schedule.c b/src/gallium/drivers/r300/compiler/radeon_pair_schedule.c
index 7ecdc7c..94cf9a7 100644
--- a/src/gallium/drivers/r300/compiler/radeon_pair_schedule.c
+++ b/src/gallium/drivers/r300/compiler/radeon_pair_schedule.c
@@ -781,7 +781,7 @@ static void is_rgb_to_alpha_possible(
 	struct rc_pair_instruction_arg * arg,
 	struct rc_pair_instruction_source * src)
 {
-	unsigned int chan_count = 0;
+	unsigned int read_chan = RC_SWIZZLE_UNUSED;
 	unsigned int alpha_sources = 0;
 	unsigned int i;
 	struct rc_reader_data * reader_data = userdata;
@@ -803,8 +803,9 @@ static void is_rgb_to_alpha_possible(
 		return;
 	}
 
-	/* Make sure the source only reads from one component.
-	 * XXX We should allow the source to read from the same component twice.
+	/* Make sure the source only reads the register component that we
+	 * are going to be convering from.  It is OK if the instruction uses
+	 * this component more than once.
 	 * XXX If the index we will be converting to is the same as the
 	 * current index, then it is OK to read from more than one component.
 	 */
@@ -815,16 +816,17 @@ static void is_rgb_to_alpha_possible(
 		case RC_SWIZZLE_Y:
 		case RC_SWIZZLE_Z:
 		case RC_SWIZZLE_W:
-			chan_count++;
+			if (read_chan == RC_SWIZZLE_UNUSED) {
+				read_chan = swz;
+			} else if (read_chan != swz) {
+				reader_data->Abort = 1;
+				return;
+			}
 			break;
 		default:
 			break;
 		}
 	}
-	if (chan_count > 1) {
-		reader_data->Abort = 1;
-		return;
-	}
 
 	/* Make sure there are enough alpha sources.
 	 * XXX If we know what register all the readers are going



More information about the mesa-commit mailing list