On Mit, 2011-11-30 at 20:36 -0700, Brian Paul wrote: > We weren't doing the necessary byte swap.
I just stumbled over this as well. > --- > 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..fc0db34 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 */ A BSWAP16() macro might be nice for this, but I wouldn't let that hold up this fix. > + dst[i][RCOMP] = UBYTE_TO_FLOAT( ((tmp >> 7) & 0xf8) | ((tmp >> 12) & > 0x7) ); > + dst[i][GCOMP] = UBYTE_TO_FLOAT( ((tmp >> 2) & 0xf8) | ((tmp >> 7) & > 0x7) ); > + dst[i][BCOMP] = UBYTE_TO_FLOAT( ((tmp << 3) & 0xf8) | ((tmp >> 2) & > 0x7) ); Don't these lines need to be changed to be the same as in unpack_ARGB1555()? -- Earthling Michel Dänzer | http://www.amd.com Libre software enthusiast | Debian, X and DRI developer _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev