diff --git a/src/radeon_video.c b/src/radeon_video.c index 26857a5..5ca00de 100644 --- a/src/radeon_video.c +++ b/src/radeon_video.c @@ -2199,7 +2199,7 @@ RADEONCopyRGB24Data( unsigned int w ){ CARD32 *dptr; - CARD8 *sptr = 0; + CARD8 *sptr; int i,j; RADEONInfoPtr info = RADEONPTR(pScrn); #ifdef XF86DRI @@ -2209,26 +2209,32 @@ RADEONCopyRGB24Data( CARD32 bufPitch, dstPitchOff; int x, y; unsigned int hpass; + CARD8 *buf; /* XXX Fix endian flip on R300 */ RADEONHostDataParams( pScrn, dst, dstPitch, 4, &dstPitchOff, &x, &y ); - while ( (dptr = ( CARD32* )RADEONHostDataBlit( pScrn, 4, w, dstPitch, - &bufPitch, x, &y, &h, - &hpass )) ) + while ( (buf = RADEONHostDataBlit( pScrn, 4, w, dstPitchOff, + &bufPitch, x, &y, &h, + &hpass )) ) { for( j = 0; j < hpass; j++ ) { sptr = src; + dptr = ( CARD32* )buf; for ( i = 0 ; i < w; i++, sptr += 3 ) { - *dptr++ = (sptr[0] << 24) | (sptr[1] << 16) | sptr[2]; +#if X_BYTE_ORDER == X_BIG_ENDIAN + *dptr++ = (sptr[0] << 16) | (sptr[1] << 8) | sptr[2]; +#else + *dptr++ = (sptr[2] << 16) | (sptr[1] << 8) | sptr[0]; +#endif } - src += hpass * srcPitch; - dptr += hpass * bufPitch; + src += srcPitch; + buf += bufPitch; } } @@ -2251,7 +2257,11 @@ RADEONCopyRGB24Data( sptr=src+j*srcPitch; for(i=w;i>0;i--){ - dptr[0]=((sptr[0])<<24)|((sptr[1])<<16)|(sptr[2]); +#if X_BYTE_ORDER == X_BIG_ENDIAN + dptr[0]=((sptr[0])<<16)|((sptr[1])<<8)|(sptr[2]); +#else + dptr[0]=((sptr[2])<<16)|((sptr[1])<<8)|(sptr[0]); +#endif dptr++; sptr+=3; }