gallium/radeon: Correctly translate colorswaps for big endian
authorOded Gabbay <oded.gabbay@gmail.com>
Tue, 23 Feb 2016 14:33:45 +0000 (16:33 +0200)
committerOded Gabbay <oded.gabbay@gmail.com>
Tue, 23 Feb 2016 18:55:40 +0000 (20:55 +0200)
commit4b7e219e616f64281a83c88319dc7c386809b9ec
treedec7f69a79b624ab1017070352c71f8a9e6c92c4
parent1807806add36327ba1e713c49554b61b2855d5f9
gallium/radeon: Correctly translate colorswaps for big endian

The current code in r600_translate_colorswap uses the swizzle information
to determine which colorswap to use.

This works for BE & LE when the nr_channels is <4, but when nr_channels==4
(e.g. PIPE_FORMAT_A8R8G8B8_UNORM), this method can not be used for both BE
and LE, because the swizzle info is the same for both of them.

As a result, r600g doesn't support 24bit color formats, only 16bit, which
forces the user to choose 16bit color in X server.

This patch fixes this bug by separating the checks for LE and BE and
adapting the swizzle conditions in the BE part of the checks.

Tested on an Evergreen GPU (Cedar GL FirePro 2270) running inside POWER7
Big-Endian Machine.

Signed-off-by: Oded Gabbay <oded.gabbay@gmail.com>
CC: "11.2" "11.1" <mesa-stable@lists.freedesktop.org>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/gallium/drivers/radeon/r600_texture.c