From: Tom Stellard Date: Sat, 15 Oct 2011 21:55:40 +0000 (-0400) Subject: r300/compiler: More agressive RGB to Alpha conversions X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=8327fd18c9e2e89629696fb8dea729c7f3c773b5;p=mesa.git r300/compiler: More agressive RGB to Alpha conversions --- 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