From 3210902a7334f3d8d6c18a34a3cb3f55803b0043 Mon Sep 17 00:00:00 2001 From: Søren Sandmann Pedersen Date: Mon, 11 Jun 2007 13:14:50 -0400 Subject: Split fbCopyAreammx() into a new fbBltmmx() function; call this function from fbCopyNToN(). --- fb/fbcopy.c | 18 ++++++---------- fb/fbmmx.c | 72 ++++++++++++++++++++++++++++++++++++++----------------------- fb/fbmmx.h | 9 ++++++++ 3 files changed, 61 insertions(+), 38 deletions(-) (limited to 'fb') diff --git a/fb/fbcopy.c b/fb/fbcopy.c index 164cd3d67..74ff35848 100644 --- a/fb/fbcopy.c +++ b/fb/fbcopy.c @@ -64,17 +64,13 @@ fbCopyNtoN (DrawablePtr pSrcDrawable, if (pm == FB_ALLONES && alu == GXcopy && !reverse && !upsidedown && fbHaveMMX()) { - if (!fbCopyAreammx (pSrcDrawable, - pDstDrawable, - - (pbox->x1 + dx), - (pbox->y1 + dy), - - (pbox->x1), - (pbox->y1), - - (pbox->x2 - pbox->x1), - (pbox->y2 - pbox->y1))) + if (!fbBltmmx (src, dst, srcStride, dstStride, srcBpp, dstBpp, + (pbox->x1 + dx + srcXoff), + (pbox->y1 + dy + srcYoff), + (pbox->x1 + srcXoff), + (pbox->y1 + srcYoff), + (pbox->x2 - pbox->x1), + (pbox->y2 - pbox->y1))) goto fallback; else goto next; diff --git a/fb/fbmmx.c b/fb/fbmmx.c index b2fe94bc0..7fb4b15d5 100644 --- a/fb/fbmmx.c +++ b/fb/fbmmx.c @@ -208,34 +208,20 @@ fbSolidFillmmx (DrawablePtr pDraw, } Bool -fbCopyAreammx (DrawablePtr pSrc, - DrawablePtr pDst, - int src_x, - int src_y, - int dst_x, - int dst_y, - int width, - int height) +fbBltmmx (FbBits *src_bits, + FbBits *dst_bits, + FbStride src_stride, + FbStride dst_stride, + int src_bpp, + int dst_bpp, + int src_x, int src_y, + int dst_x, int dst_y, + int width, int height) { - FbBits * src_bits; - FbStride src_stride; - int src_bpp; - int src_xoff; - int src_yoff; - - FbBits * dst_bits; - FbStride dst_stride; - int dst_bpp; - int dst_xoff; - int dst_yoff; - CARD8 * src_bytes; CARD8 * dst_bytes; int byte_width; - fbGetDrawable(pSrc, src_bits, src_stride, src_bpp, src_xoff, src_yoff); - fbGetDrawable(pDst, dst_bits, dst_stride, dst_bpp, dst_xoff, dst_yoff); - if (src_bpp != dst_bpp) return FALSE; @@ -243,16 +229,16 @@ fbCopyAreammx (DrawablePtr pSrc, { src_stride = src_stride * sizeof (FbBits) / 2; dst_stride = dst_stride * sizeof (FbBits) / 2; - src_bytes = (CARD8 *)(((CARD16 *)src_bits) + src_stride * (src_y + src_yoff) + (src_x + src_xoff)); - dst_bytes = (CARD8 *)(((CARD16 *)dst_bits) + dst_stride * (dst_y + dst_yoff) + (dst_x + dst_xoff)); + src_bytes = (CARD8 *)(((CARD16 *)src_bits) + src_stride * (src_y) + (src_x)); + dst_bytes = (CARD8 *)(((CARD16 *)dst_bits) + dst_stride * (dst_y) + (dst_x)); byte_width = 2 * width; src_stride *= 2; dst_stride *= 2; } else if (src_bpp == 32) { src_stride = src_stride * sizeof (FbBits) / 4; dst_stride = dst_stride * sizeof (FbBits) / 4; - src_bytes = (CARD8 *)(((CARD32 *)src_bits) + src_stride * (src_y + src_yoff) + (src_x + src_xoff)); - dst_bytes = (CARD8 *)(((CARD32 *)dst_bits) + dst_stride * (dst_y + dst_yoff) + (dst_x + dst_xoff)); + src_bytes = (CARD8 *)(((CARD32 *)src_bits) + src_stride * (src_y) + (src_x)); + dst_bytes = (CARD8 *)(((CARD32 *)dst_bits) + dst_stride * (dst_y) + (dst_x)); byte_width = 4 * width; src_stride *= 4; dst_stride *= 4; @@ -353,8 +339,40 @@ fbCopyAreammx (DrawablePtr pSrc, } _mm_empty(); + return TRUE; } +Bool +fbCopyAreammx (DrawablePtr pSrc, + DrawablePtr pDst, + int src_x, + int src_y, + int dst_x, + int dst_y, + int width, + int height) +{ + FbBits * src_bits; + FbStride src_stride; + int src_bpp; + int src_xoff; + int src_yoff; + + FbBits * dst_bits; + FbStride dst_stride; + int dst_bpp; + int dst_xoff; + int dst_yoff; + + fbGetDrawable(pSrc, src_bits, src_stride, src_bpp, src_xoff, src_yoff); + fbGetDrawable(pDst, dst_bits, dst_stride, dst_bpp, dst_xoff, dst_yoff); + + return fbBltmmx (src_bits, dst_bits, src_stride, dst_stride, src_bpp, dst_bpp, + src_x + src_xoff, src_y + src_yoff, + dst_x + dst_xoff, dst_y + dst_yoff, + width, height); +} + #endif /* RENDER */ #endif /* USE_MMX */ diff --git a/fb/fbmmx.h b/fb/fbmmx.h index 47964389a..a529526c5 100644 --- a/fb/fbmmx.h +++ b/fb/fbmmx.h @@ -44,6 +44,15 @@ Bool fbHaveMMX(void); #ifdef USE_MMX +Bool fbBltmmx (FbBits *src_bits, + FbBits *dst_bits, + FbStride src_stride, + FbStride dst_stride, + int src_bpp, + int dst_bpp, + int src_x, int src_y, + int dst_x, int dst_y, + int width, int height); Bool fbCopyAreammx (DrawablePtr pSrc, DrawablePtr pDst, int src_x, -- cgit v1.2.3