Split fbCopyAreammx() into a new fbBltmmx() function; call this
function from fbCopyNToN().
This commit is contained in:
parent
8d5f4368ea
commit
3210902a73
18
fb/fbcopy.c
18
fb/fbcopy.c
|
@ -64,17 +64,13 @@ fbCopyNtoN (DrawablePtr pSrcDrawable,
|
||||||
if (pm == FB_ALLONES && alu == GXcopy && !reverse &&
|
if (pm == FB_ALLONES && alu == GXcopy && !reverse &&
|
||||||
!upsidedown && fbHaveMMX())
|
!upsidedown && fbHaveMMX())
|
||||||
{
|
{
|
||||||
if (!fbCopyAreammx (pSrcDrawable,
|
if (!fbBltmmx (src, dst, srcStride, dstStride, srcBpp, dstBpp,
|
||||||
pDstDrawable,
|
(pbox->x1 + dx + srcXoff),
|
||||||
|
(pbox->y1 + dy + srcYoff),
|
||||||
(pbox->x1 + dx),
|
(pbox->x1 + srcXoff),
|
||||||
(pbox->y1 + dy),
|
(pbox->y1 + srcYoff),
|
||||||
|
(pbox->x2 - pbox->x1),
|
||||||
(pbox->x1),
|
(pbox->y2 - pbox->y1)))
|
||||||
(pbox->y1),
|
|
||||||
|
|
||||||
(pbox->x2 - pbox->x1),
|
|
||||||
(pbox->y2 - pbox->y1)))
|
|
||||||
goto fallback;
|
goto fallback;
|
||||||
else
|
else
|
||||||
goto next;
|
goto next;
|
||||||
|
|
72
fb/fbmmx.c
72
fb/fbmmx.c
|
@ -208,34 +208,20 @@ fbSolidFillmmx (DrawablePtr pDraw,
|
||||||
}
|
}
|
||||||
|
|
||||||
Bool
|
Bool
|
||||||
fbCopyAreammx (DrawablePtr pSrc,
|
fbBltmmx (FbBits *src_bits,
|
||||||
DrawablePtr pDst,
|
FbBits *dst_bits,
|
||||||
int src_x,
|
FbStride src_stride,
|
||||||
int src_y,
|
FbStride dst_stride,
|
||||||
int dst_x,
|
int src_bpp,
|
||||||
int dst_y,
|
int dst_bpp,
|
||||||
int width,
|
int src_x, int src_y,
|
||||||
int height)
|
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 * src_bytes;
|
||||||
CARD8 * dst_bytes;
|
CARD8 * dst_bytes;
|
||||||
int byte_width;
|
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)
|
if (src_bpp != dst_bpp)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
@ -243,16 +229,16 @@ fbCopyAreammx (DrawablePtr pSrc,
|
||||||
{
|
{
|
||||||
src_stride = src_stride * sizeof (FbBits) / 2;
|
src_stride = src_stride * sizeof (FbBits) / 2;
|
||||||
dst_stride = dst_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));
|
src_bytes = (CARD8 *)(((CARD16 *)src_bits) + src_stride * (src_y) + (src_x));
|
||||||
dst_bytes = (CARD8 *)(((CARD16 *)dst_bits) + dst_stride * (dst_y + dst_yoff) + (dst_x + dst_xoff));
|
dst_bytes = (CARD8 *)(((CARD16 *)dst_bits) + dst_stride * (dst_y) + (dst_x));
|
||||||
byte_width = 2 * width;
|
byte_width = 2 * width;
|
||||||
src_stride *= 2;
|
src_stride *= 2;
|
||||||
dst_stride *= 2;
|
dst_stride *= 2;
|
||||||
} else if (src_bpp == 32) {
|
} else if (src_bpp == 32) {
|
||||||
src_stride = src_stride * sizeof (FbBits) / 4;
|
src_stride = src_stride * sizeof (FbBits) / 4;
|
||||||
dst_stride = dst_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));
|
src_bytes = (CARD8 *)(((CARD32 *)src_bits) + src_stride * (src_y) + (src_x));
|
||||||
dst_bytes = (CARD8 *)(((CARD32 *)dst_bits) + dst_stride * (dst_y + dst_yoff) + (dst_x + dst_xoff));
|
dst_bytes = (CARD8 *)(((CARD32 *)dst_bits) + dst_stride * (dst_y) + (dst_x));
|
||||||
byte_width = 4 * width;
|
byte_width = 4 * width;
|
||||||
src_stride *= 4;
|
src_stride *= 4;
|
||||||
dst_stride *= 4;
|
dst_stride *= 4;
|
||||||
|
@ -353,8 +339,40 @@ fbCopyAreammx (DrawablePtr pSrc,
|
||||||
}
|
}
|
||||||
|
|
||||||
_mm_empty();
|
_mm_empty();
|
||||||
|
|
||||||
return TRUE;
|
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 /* RENDER */
|
||||||
#endif /* USE_MMX */
|
#endif /* USE_MMX */
|
||||||
|
|
|
@ -44,6 +44,15 @@ Bool fbHaveMMX(void);
|
||||||
|
|
||||||
#ifdef USE_MMX
|
#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,
|
Bool fbCopyAreammx (DrawablePtr pSrc,
|
||||||
DrawablePtr pDst,
|
DrawablePtr pDst,
|
||||||
int src_x,
|
int src_x,
|
||||||
|
|
Loading…
Reference in New Issue