From 1c3f8727b2349c9b988eaa744f11366322d42538 Mon Sep 17 00:00:00 2001 From: Adam Jackson Date: Wed, 18 Jan 2006 19:42:56 +0000 Subject: [PATCH] More kdrive merge, fast path fbBlt to use memcpy() when possible. Good for -5% to 60% speedup on XGetImage, and 0% to 10% speedup on copies within host memory. Based on work by Jaymz Julian. --- ChangeLog | 7 +++++++ fb/fbblt.c | 23 +++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/ChangeLog b/ChangeLog index 92790849f..d90cfe09a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2006-01-18 Adam Jackson + + * fb/fbblt.c: + More kdrive merge, fast path fbBlt to use memcpy() when possible. + Good for -5% to 60% speedup on XGetImage, and 0% to 10% speedup on + copies within host memory. Based on work by Jaymz Julian. + 2006-01-18 Dave Airlie Update XGL server from the xserver tree, and fix to work diff --git a/fb/fbblt.c b/fb/fbblt.c index c2617a718..e173b447c 100644 --- a/fb/fbblt.c +++ b/fb/fbblt.c @@ -77,6 +77,29 @@ fbBlt (FbBits *srcLine, return; } #endif + + if (alu == GXcopy && pm == FB_ALLONES && !reverse && + !(srcX & 7) && !(dstX & 7) && !(width & 7)) { + 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) + for (i = 0; i < height; i++) + memcpy(dst + i * dstStride, src + i * srcStride, width); + else + for (i = height - 1; i >= 0; i--) + memcpy(dst + i * dstStride, src + i * srcStride, width); + + return; + } + FbInitializeMergeRop(alu, pm); destInvarient = FbDestInvarientMergeRop(); if (upsidedown)