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: case FillSolid:
#ifdef USE_MMX #ifdef USE_MMX
if (!pPriv->and && fbHaveMMX()) 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); fbFinishAccess (pDrawable);
return; return;
} }
}
#endif #endif
fbSolid (dst + (y + dstYoff) * dstStride, fbSolid (dst + (y + dstYoff) * dstStride,
dstStride, dstStride,

View File

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

View File

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