From 899ba14a7868a27f9a9cb8d9d6323a2dab29bb81 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Sun, 25 Jan 2009 05:14:29 +0000 Subject: [PATCH] Fixed Altivec blitters for PPC --- src/video/SDL_blit_N.c | 51 +++++++++++++++++++++--------------------- 1 file changed, 25 insertions(+), 26 deletions(-) diff --git a/src/video/SDL_blit_N.c b/src/video/SDL_blit_N.c index 9ea573741..0ed174c3f 100644 --- a/src/video/SDL_blit_N.c +++ b/src/video/SDL_blit_N.c @@ -114,11 +114,10 @@ calc_swizzle32(const SDL_PixelFormat * srcfmt, const SDL_PixelFormat * dstfmt) */ /* ARGB */ const static struct SDL_PixelFormat default_pixel_format = { - NULL, 0, 0, + NULL, 32, 4, 0, 0, 0, 0, 16, 8, 0, 24, - 0x00FF0000, 0x0000FF00, 0x000000FF, 0xFF000000, - 0, 0 + 0x00FF0000, 0x0000FF00, 0x000000FF, 0xFF000000 }; if (!srcfmt) { srcfmt = &default_pixel_format; @@ -163,7 +162,7 @@ Blit_RGB888_RGB565Altivec(SDL_BlitInfo * info) int srcskip = info->src_skip; Uint8 *dst = (Uint8 *) info->dst; int dstskip = info->dst_skip; - SDL_PixelFormat *srcfmt = info->src; + SDL_PixelFormat *srcfmt = info->src_fmt; vector unsigned char valpha = vec_splat_u8(0); vector unsigned char vpermute = calc_swizzle32(srcfmt, NULL); vector unsigned char vgmerge = VECUINT8_LITERAL(0x00, 0x02, 0x00, 0x06, @@ -267,8 +266,8 @@ Blit_RGB565_32Altivec(SDL_BlitInfo * info) int srcskip = info->src_skip; Uint8 *dst = (Uint8 *) info->dst; int dstskip = info->dst_skip; - SDL_PixelFormat *srcfmt = info->src; - SDL_PixelFormat *dstfmt = info->dst; + SDL_PixelFormat *srcfmt = info->src_fmt; + SDL_PixelFormat *dstfmt = info->dst_fmt; unsigned alpha; vector unsigned char valpha; vector unsigned char vpermute; @@ -415,8 +414,8 @@ Blit_RGB555_32Altivec(SDL_BlitInfo * info) int srcskip = info->src_skip; Uint8 *dst = (Uint8 *) info->dst; int dstskip = info->dst_skip; - SDL_PixelFormat *srcfmt = info->src; - SDL_PixelFormat *dstfmt = info->dst; + SDL_PixelFormat *srcfmt = info->src_fmt; + SDL_PixelFormat *dstfmt = info->dst_fmt; unsigned alpha; vector unsigned char valpha; vector unsigned char vpermute; @@ -561,12 +560,12 @@ Blit32to32KeyAltivec(SDL_BlitInfo * info) { int height = info->dst_h; Uint32 *srcp = (Uint32 *) info->src; - int srcskip = info->src_skip; + int srcskip = info->src_skip / 4; Uint32 *dstp = (Uint32 *) info->dst; - int dstskip = info->dst_skip; - SDL_PixelFormat *srcfmt = info->src; + int dstskip = info->dst_skip / 4; + SDL_PixelFormat *srcfmt = info->src_fmt; int srcbpp = srcfmt->BytesPerPixel; - SDL_PixelFormat *dstfmt = info->dst; + SDL_PixelFormat *dstfmt = info->dst_fmt; int dstbpp = dstfmt->BytesPerPixel; int copy_alpha = (srcfmt->Amask && dstfmt->Amask); unsigned alpha = dstfmt->Amask ? info->a : 0; @@ -666,8 +665,8 @@ Blit32to32KeyAltivec(SDL_BlitInfo * info) } ONE_PIXEL_BLEND((extrawidth), extrawidth); #undef ONE_PIXEL_BLEND - srcp += srcskip >> 2; - dstp += dstskip >> 2; + srcp += srcskip; + dstp += dstskip; } } } @@ -679,11 +678,11 @@ ConvertAltivec32to32_noprefetch(SDL_BlitInfo * info) { int height = info->dst_h; Uint32 *src = (Uint32 *) info->src; - int srcskip = info->src_skip; + int srcskip = info->src_skip / 4; Uint32 *dst = (Uint32 *) info->dst; - int dstskip = info->dst_skip; - SDL_PixelFormat *srcfmt = info->src; - SDL_PixelFormat *dstfmt = info->dst; + int dstskip = info->dst_skip / 4; + SDL_PixelFormat *srcfmt = info->src_fmt; + SDL_PixelFormat *dstfmt = info->dst_fmt; vector unsigned int vzero = vec_splat_u32(0); vector unsigned char vpermute = calc_swizzle32(srcfmt, dstfmt); if (dstfmt->Amask && !srcfmt->Amask) { @@ -742,8 +741,8 @@ ConvertAltivec32to32_noprefetch(SDL_BlitInfo * info) extrawidth--; } - src += srcskip >> 2; /* move to next row, accounting for pitch. */ - dst += dstskip >> 2; + src += srcskip; + dst += dstskip; } } @@ -758,11 +757,11 @@ ConvertAltivec32to32_prefetch(SDL_BlitInfo * info) int height = info->dst_h; Uint32 *src = (Uint32 *) info->src; - int srcskip = info->src_skip; + int srcskip = info->src_skip / 4; Uint32 *dst = (Uint32 *) info->dst; - int dstskip = info->dst_skip; - SDL_PixelFormat *srcfmt = info->src; - SDL_PixelFormat *dstfmt = info->dst; + int dstskip = info->dst_skip / 4; + SDL_PixelFormat *srcfmt = info->src_fmt; + SDL_PixelFormat *dstfmt = info->dst_fmt; vector unsigned int vzero = vec_splat_u32(0); vector unsigned char vpermute = calc_swizzle32(srcfmt, dstfmt); if (dstfmt->Amask && !srcfmt->Amask) { @@ -829,8 +828,8 @@ ConvertAltivec32to32_prefetch(SDL_BlitInfo * info) extrawidth--; } - src += srcskip >> 2; /* move to next row, accounting for pitch. */ - dst += dstskip >> 2; + src += srcskip; + dst += dstskip; } vec_dss(DST_CHAN_SRC);