diff options
author | Tom Stellard <[email protected]> | 2011-10-15 17:55:40 -0400 |
---|---|---|
committer | Tom Stellard <[email protected]> | 2011-10-16 19:54:48 -0700 |
commit | 8327fd18c9e2e89629696fb8dea729c7f3c773b5 (patch) | |
tree | f869485d1b008ddecd360cb4bec5184d9dafd9f7 /src/gallium/drivers/r300/compiler | |
parent | 653c7af3d6659ed824ae248e398ac4aec94e0a41 (diff) |
r300/compiler: More agressive RGB to Alpha conversions
Diffstat (limited to 'src/gallium/drivers/r300/compiler')
-rw-r--r-- | src/gallium/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 7ecdc7c43d8..94cf9a77cea 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 |