[Mesa-dev] [PATCH] mesa: fix unpack_ARGB1555_REV()
Michel Dänzer
michel at daenzer.net
Thu Dec 1 06:53:30 PST 2011
On Don, 2011-12-01 at 07:44 -0700, Brian Paul wrote:
> We weren't doing the necessary byte swap.
>
> v2: use same arithmetic as unpack_ARGB1555() to be consistent.
> ---
> src/mesa/main/format_unpack.c | 9 +++++----
> 1 files changed, 5 insertions(+), 4 deletions(-)
>
> diff --git a/src/mesa/main/format_unpack.c b/src/mesa/main/format_unpack.c
> index 4b4ee6b..2332ce8 100644
> --- a/src/mesa/main/format_unpack.c
> +++ b/src/mesa/main/format_unpack.c
> @@ -275,10 +275,11 @@ unpack_ARGB1555_REV(const void *src, GLfloat dst[][4], GLuint n)
> const GLushort *s = ((const GLushort *) src);
> GLuint i;
> for (i = 0; i < n; i++) {
> - dst[i][RCOMP] = UBYTE_TO_FLOAT( ((s[i] >> 7) & 0xf8) | ((s[i] >> 12) & 0x7) );
> - dst[i][GCOMP] = UBYTE_TO_FLOAT( ((s[i] >> 2) & 0xf8) | ((s[i] >> 7) & 0x7) );
> - dst[i][BCOMP] = UBYTE_TO_FLOAT( ((s[i] << 3) & 0xf8) | ((s[i] >> 2) & 0x7) );
> - dst[i][ACOMP] = UBYTE_TO_FLOAT( ((s[i] >> 15) & 0x01) * 255 );
> + GLushort tmp = (s[i] << 8) | (s[i] >> 8); /* byteswap */
> + dst[i][RCOMP] = ((tmp >> 10) & 0x1f) * (1.0F / 31.0F);
> + dst[i][GCOMP] = ((tmp >> 5) & 0x1f) * (1.0F / 31.0F);
> + dst[i][BCOMP] = ((tmp >> 0) & 0x1f) * (1.0F / 31.0F);
> + dst[i][ACOMP] = ((tmp >> 15) & 0x01) * 1.0F;
> }
> }
Reviewed-by: Michel Dänzer <michel at daenzer.net>
--
Earthling Michel Dänzer | http://www.amd.com
Libre software enthusiast | Debian, X and DRI developer
More information about the mesa-dev
mailing list