[Mesa-dev] [PATCH] mesa/formats: Fix swizzle flipping for big-endian targets
Iago Toral
itoral at igalia.com
Tue Aug 11 07:47:25 PDT 2015
Reviewed-by: Iago Toral Quiroga <itoral at igalia.com>
El 2015-08-11 14:25, Oded Gabbay escribió:
> On Mon, Aug 10, 2015 at 9:50 AM, Jason Ekstrand <jason at jlekstrand.net>
> wrote:
>> The swizzle defines where in the format you should look for any given
>> channel. When we flip the format around for BE targets, we need to
>> change
>> the destinations of the swizzles, not the sources. For example, say
>> the
>> format is an RGBX format with a swizzle of xyz1 on LE. Then it should
>> be
>> wzy1 on BE; however, the code as it was before, would have made it
>> 1zyx on
>> BE which is clearly wrong.
>>
>> Cc: Iago Toral <itoral at igalia.com>
>> Cc: Oded Gabbay <oded.gabbay at gmail.com>
>> ---
>> src/mesa/main/formats.c | 16 ++++++++++++----
>> 1 file changed, 12 insertions(+), 4 deletions(-)
>>
>> diff --git a/src/mesa/main/formats.c b/src/mesa/main/formats.c
>> index d927073..27590ed 100644
>> --- a/src/mesa/main/formats.c
>> +++ b/src/mesa/main/formats.c
>> @@ -354,14 +354,22 @@
>> mi_mesa_array_format_flip_channels(mesa_array_format format)
>> return format;
>>
>> if (num_channels == 2) {
>> - _mesa_array_format_set_swizzle(&format, swizzle[1], swizzle[0],
>> - swizzle[2], swizzle[3]);
>> + /* Assert that the swizzle makes sense for 2 channels */
>> + for (unsigned i = 0; i < 4; i++)
>> + assert(swizzle[i] != 2 && swizzle[i] != 3);
>> +
>> + static const uint8_t flip_xy[6] = { 1, 0, 2, 3, 4, 5 };
>> + _mesa_array_format_set_swizzle(&format,
>> + flip_xy[swizzle[0]],
>> flip_xy[swizzle[1]],
>> + flip_xy[swizzle[2]],
>> flip_xy[swizzle[3]]);
>> return format;
>> }
>>
>> if (num_channels == 4) {
>> - _mesa_array_format_set_swizzle(&format, swizzle[3], swizzle[2],
>> - swizzle[1], swizzle[0]);
>> + static const uint8_t flip[6] = { 3, 2, 1, 0, 4, 5 };
>> + _mesa_array_format_set_swizzle(&format,
>> + flip[swizzle[0]],
>> flip[swizzle[1]],
>> + flip[swizzle[2]],
>> flip[swizzle[3]]);
>> return format;
>> }
>>
>> --:-)
>> 2.4.3
>>
>
> Reviewed-by: Oded Gabbay <oded.gabbay at gmail.com>
More information about the mesa-dev
mailing list