Unverified Commit 22fea29c authored by Mike Gabriel's avatar Mike Gabriel

Merge branch 'uli42-pr/fb_fastpath' into 3.6.x

parents 8d6a4a9b 034228d7
...@@ -67,38 +67,50 @@ fbBlt (FbBits *srcLine, ...@@ -67,38 +67,50 @@ fbBlt (FbBits *srcLine,
int n, nmiddle; int n, nmiddle;
Bool destInvarient; Bool destInvarient;
int startbyte, endbyte; int startbyte, endbyte;
FbDeclareMergeRop (); FbDeclareMergeRop ();
#ifdef FB_24BIT if (alu == GXcopy && pm == FB_ALLONES &&
if (bpp == 24 && !FbCheck24Pix (pm)) !(srcX & 7) && !(dstX & 7) && !(width & 7))
{ {
fbBlt24 (srcLine, srcStride, srcX, dstLine, dstStride, dstX, CARD8 *src_byte = (CARD8 *) srcLine + (srcX >> 3);
width, height, alu, pm, reverse, upsidedown); CARD8 *dst_byte = (CARD8 *) dstLine + (dstX >> 3);
return; FbStride src_byte_stride = srcStride << (FB_SHIFT - 3);
} FbStride dst_byte_stride = dstStride << (FB_SHIFT - 3);
#endif int width_byte = (width >> 3);
if (alu == GXcopy && pm == FB_ALLONES && !reverse && /* Make sure there's no overlap; we can't use memcpy in that
!(srcX & 7) && !(dstX & 7) && !(width & 7)) { * case as it's not well defined, so fall through to the
* general code
*/
if (src_byte + width_byte <= dst_byte ||
dst_byte + width_byte <= src_byte)
{
int i; int i;
CARD8 *src = (CARD8 *) srcLine;
CARD8 *dst = (CARD8 *) dstLine;
srcStride *= sizeof(FbBits);
dstStride *= sizeof(FbBits);
width >>= 3;
src += (srcX >> 3);
dst += (dstX >> 3);
if (!upsidedown) if (!upsidedown)
for (i = 0; i < height; i++) for (i = 0; i < height; i++)
memcpy(dst + i * dstStride, src + i * srcStride, width); memcpy(dst_byte + i * dst_byte_stride,
src_byte + i * src_byte_stride,
width_byte);
else else
for (i = height - 1; i >= 0; i--) for (i = height - 1; i >= 0; i--)
memcpy(dst + i * dstStride, src + i * srcStride, width); memcpy(dst_byte + i * dst_byte_stride,
src_byte + i * src_byte_stride,
width_byte);
return; return;
} }
}
#ifdef FB_24BIT
if (bpp == 24 && !FbCheck24Pix (pm))
{
fbBlt24 (srcLine, srcStride, srcX, dstLine, dstStride, dstX,
width, height, alu, pm, reverse, upsidedown);
return;
}
#endif
FbInitializeMergeRop(alu, pm); FbInitializeMergeRop(alu, pm);
destInvarient = FbDestInvarientMergeRop(); destInvarient = FbDestInvarientMergeRop();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment