summaryrefslogtreecommitdiff
path: root/miext
diff options
context:
space:
mode:
authorJeremy Huddleston <jeremy@tifa.local>2007-11-22 12:21:59 -0800
committerJeremy Huddleston <jeremy@tifa.local>2007-11-22 12:21:59 -0800
commit4e18c626350c7c2e0fb540aa64a98957699f3abe (patch)
treebe2beab259d354d0aad824fe07b9e12ce4345dc3 /miext
parented9524d36e42a310bb128284f2b507f76b8c40d9 (diff)
Rootless: Pulled in changes from fb{Blt,Fill} into rl{Blt,Fill}
(cherry picked from commit 3f857e129df7ce492191e0c51b8e53eaf6179366) (cherry picked from commit 70374a58937d7a6f01c210bd6ac66cafb63e895a)
Diffstat (limited to 'miext')
-rw-r--r--miext/rootless/accel/rlBlt.c44
-rw-r--r--miext/rootless/accel/rlFill.c6
2 files changed, 44 insertions, 6 deletions
diff --git a/miext/rootless/accel/rlBlt.c b/miext/rootless/accel/rlBlt.c
index 2cf72eb22..b5fe74085 100644
--- a/miext/rootless/accel/rlBlt.c
+++ b/miext/rootless/accel/rlBlt.c
@@ -32,10 +32,22 @@
#endif
#include <stddef.h> /* For NULL */
+#include <string.h>
#include "fb.h"
#include "rootlessCommon.h"
#include "rlAccel.h"
+#define InitializeShifts(sx,dx,ls,rs) { \
+ if (sx != dx) { \
+ if (sx > dx) { \
+ ls = sx - dx; \
+ rs = FB_UNIT - ls; \
+ } else { \
+ rs = dx - sx; \
+ ls = FB_UNIT - rs; \
+ } \
+ } \
+}
void
rlBlt (FbBits *srcLine,
@@ -74,6 +86,29 @@ rlBlt (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)
@@ -325,9 +360,12 @@ rlBlt (FbBits *srcLine,
bits1 = *src++;
if (startmask)
{
- bits = FbScrLeft(bits1, leftShift);
- bits1 = *src++;
- bits |= FbScrRight(bits1, rightShift);
+ bits = FbScrLeft(bits1, leftShift);
+ if (FbScrLeft(startmask, rightShift))
+ {
+ bits1 = *src++;
+ bits |= FbScrRight(bits1, rightShift);
+ }
FbDoLeftMaskByteMergeRop (dst, bits, startbyte, startmask);
dst++;
}
diff --git a/miext/rootless/accel/rlFill.c b/miext/rootless/accel/rlFill.c
index 0d0d01251..a80c7769f 100644
--- a/miext/rootless/accel/rlFill.c
+++ b/miext/rootless/accel/rlFill.c
@@ -89,7 +89,7 @@ rlFill (DrawablePtr pDrawable,
dstBpp,
(pGC->patOrg.x + pDrawable->x + dstXoff),
- pGC->patOrg.y + pDrawable->y + dstYoff - y);
+ pGC->patOrg.y + pDrawable->y - y);
}
else
{
@@ -126,7 +126,7 @@ rlFill (DrawablePtr pDrawable,
fgand, fgxor,
bgand, bgxor,
pGC->patOrg.x + pDrawable->x + dstXoff,
- pGC->patOrg.y + pDrawable->y + dstYoff - y);
+ pGC->patOrg.y + pDrawable->y - y);
}
break;
}
@@ -154,7 +154,7 @@ rlFill (DrawablePtr pDrawable,
pPriv->pm,
dstBpp,
(pGC->patOrg.x + pDrawable->x + dstXoff) * dstBpp,
- pGC->patOrg.y + pDrawable->y + dstYoff - y);
+ pGC->patOrg.y + pDrawable->y - y);
break;
}
}