Split fbSolidFillmmx() into a new FbFillmmx() function. Call that from fbFill().

This commit is contained in:
Søren Sandmann Pedersen 2007-06-11 13:26:24 -04:00
parent 3210902a73
commit d4a034370c
3 changed files with 43 additions and 18 deletions

View File

@ -49,10 +49,13 @@ fbFill (DrawablePtr pDrawable,
case FillSolid:
#ifdef USE_MMX
if (!pPriv->and && fbHaveMMX())
if (fbSolidFillmmx (pDrawable, x, y, width, height, pPriv->xor)) {
{
if (fbFillmmx (dst, dstStride, dstBpp, x + dstXoff, y + dstYoff, width, height, pPriv->xor))
{
fbFinishAccess (pDrawable);
return;
}
}
#endif
fbSolid (dst + (y + dstYoff) * dstStride,
dstStride,

View File

@ -74,29 +74,23 @@ typedef __m64 mmxdatafield;
#endif
Bool
fbSolidFillmmx (DrawablePtr pDraw,
fbFillmmx (FbBits *bits,
FbStride stride,
int bpp,
int x,
int y,
int width,
int height,
FbBits xor)
{
FbStride stride;
int bpp;
ullong fill;
__m64 vfill;
CARD32 byte_width;
CARD8 *byte_line;
FbBits *bits;
int xoff, yoff;
#ifdef __GNUC__
__m64 v1, v2, v3, v4, v5, v6, v7;
#endif
CHECKPOINT();
fbGetDrawable(pDraw, bits, stride, bpp, xoff, yoff);
if (bpp == 16 && (xor >> 16 != (xor & 0xffff)))
return FALSE;
@ -106,14 +100,14 @@ fbSolidFillmmx (DrawablePtr pDraw,
if (bpp == 16)
{
stride = stride * sizeof (FbBits) / 2;
byte_line = (CARD8 *)(((CARD16 *)bits) + stride * (y + yoff) + (x + xoff));
byte_line = (CARD8 *)(((CARD16 *)bits) + stride * y + x);
byte_width = 2 * width;
stride *= 2;
}
else
{
stride = stride * sizeof (FbBits) / 4;
byte_line = (CARD8 *)(((CARD32 *)bits) + stride * (y + yoff) + (x + xoff));
byte_line = (CARD8 *)(((CARD32 *)bits) + stride * y + x);
byte_width = 4 * width;
stride *= 4;
}
@ -207,6 +201,26 @@ fbSolidFillmmx (DrawablePtr pDraw,
return TRUE;
}
Bool
fbSolidFillmmx (DrawablePtr pDraw,
int x,
int y,
int width,
int height,
FbBits xor)
{
FbStride stride;
int bpp;
FbBits *bits;
int xoff, yoff;
CHECKPOINT();
fbGetDrawable(pDraw, bits, stride, bpp, xoff, yoff);
return fbFillmmx (bits, stride, bpp, x + xoff, y + yoff, width, height, xor);
}
Bool
fbBltmmx (FbBits *src_bits,
FbBits *dst_bits,

View File

@ -61,6 +61,14 @@ Bool fbCopyAreammx (DrawablePtr pSrc,
int dst_y,
int width,
int height);
Bool fbFillmmx (FbBits *bits,
FbStride stride,
int bpp,
int x,
int y,
int width,
int height,
FbBits xor);
Bool fbSolidFillmmx (DrawablePtr pDraw,
int x,
int y,