summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--exa/exa.c15
-rw-r--r--exa/exa_accel.c15
-rw-r--r--exa/exa_migration.c15
-rw-r--r--fb/fb.h52
-rw-r--r--fb/fbbits.h10
-rw-r--r--fb/fbcopy.c8
-rw-r--r--fb/fbfill.c6
-rw-r--r--fb/fbmmx.c36
-rw-r--r--fb/fbpict.h2
-rw-r--r--fb/fbpoint.c14
-rw-r--r--fb/fbwindow.c4
-rw-r--r--hw/xfree86/exa/exa.c15
-rw-r--r--hw/xfree86/exa/exa_accel.c15
-rw-r--r--hw/xfree86/exa/exa_migration.c15
-rw-r--r--miext/cw/cw.c10
-rw-r--r--miext/cw/cw.h5
16 files changed, 137 insertions, 100 deletions
diff --git a/exa/exa.c b/exa/exa.c
index b7ba3b319..fb46f4449 100644
--- a/exa/exa.c
+++ b/exa/exa.c
@@ -31,6 +31,7 @@
#include "xf86str.h"
#include "xf86.h"
#include "exa.h"
+#include "cw.h"
#if DEBUG_MIGRATE
#define DBG_MIGRATE(a) ErrorF a
@@ -1232,19 +1233,17 @@ exaFillRegionTiled (DrawablePtr pDrawable,
{
int nbox = REGION_NUM_RECTS (pRegion);
BoxPtr pBox = REGION_RECTS (pRegion);
- int xRot = pDrawable->x + xoff;
- int yRot = pDrawable->y + yoff;
while (nbox--)
{
int height = pBox->y2 - pBox->y1;
- int dstY = pBox->y1 + yoff;
+ int dstY = pBox->y1;
int tileY;
- modulus (dstY - yRot, tileHeight, tileY);
+ tileY = (dstY - pDrawable->y) % tileHeight;
while (height > 0) {
int width = pBox->x2 - pBox->x1;
- int dstX = pBox->x1 + xoff;
+ int dstX = pBox->x1;
int tileX;
int h = tileHeight - tileY;
@@ -1252,7 +1251,7 @@ exaFillRegionTiled (DrawablePtr pDrawable,
h = height;
height -= h;
- modulus (dstX - xRot, tileWidth, tileX);
+ tileX = (dstX - pDrawable->x) % tileWidth;
while (width > 0) {
int w = tileWidth - tileX;
if (w > width)
@@ -1261,7 +1260,7 @@ exaFillRegionTiled (DrawablePtr pDrawable,
(*pExaScr->info->accel.Copy) (pPixmap,
tileX, tileY,
- dstX, dstY,
+ dstX + xoff, dstY + yoff,
w, h);
dstX += w;
tileX = 0;
@@ -1428,6 +1427,8 @@ exaDriverInit (ScreenPtr pScreen,
}
#endif
+ miDisableCompositeWrapper(pScreen);
+
/*
* Hookup offscreen pixmaps
*/
diff --git a/exa/exa_accel.c b/exa/exa_accel.c
index b7ba3b319..fb46f4449 100644
--- a/exa/exa_accel.c
+++ b/exa/exa_accel.c
@@ -31,6 +31,7 @@
#include "xf86str.h"
#include "xf86.h"
#include "exa.h"
+#include "cw.h"
#if DEBUG_MIGRATE
#define DBG_MIGRATE(a) ErrorF a
@@ -1232,19 +1233,17 @@ exaFillRegionTiled (DrawablePtr pDrawable,
{
int nbox = REGION_NUM_RECTS (pRegion);
BoxPtr pBox = REGION_RECTS (pRegion);
- int xRot = pDrawable->x + xoff;
- int yRot = pDrawable->y + yoff;
while (nbox--)
{
int height = pBox->y2 - pBox->y1;
- int dstY = pBox->y1 + yoff;
+ int dstY = pBox->y1;
int tileY;
- modulus (dstY - yRot, tileHeight, tileY);
+ tileY = (dstY - pDrawable->y) % tileHeight;
while (height > 0) {
int width = pBox->x2 - pBox->x1;
- int dstX = pBox->x1 + xoff;
+ int dstX = pBox->x1;
int tileX;
int h = tileHeight - tileY;
@@ -1252,7 +1251,7 @@ exaFillRegionTiled (DrawablePtr pDrawable,
h = height;
height -= h;
- modulus (dstX - xRot, tileWidth, tileX);
+ tileX = (dstX - pDrawable->x) % tileWidth;
while (width > 0) {
int w = tileWidth - tileX;
if (w > width)
@@ -1261,7 +1260,7 @@ exaFillRegionTiled (DrawablePtr pDrawable,
(*pExaScr->info->accel.Copy) (pPixmap,
tileX, tileY,
- dstX, dstY,
+ dstX + xoff, dstY + yoff,
w, h);
dstX += w;
tileX = 0;
@@ -1428,6 +1427,8 @@ exaDriverInit (ScreenPtr pScreen,
}
#endif
+ miDisableCompositeWrapper(pScreen);
+
/*
* Hookup offscreen pixmaps
*/
diff --git a/exa/exa_migration.c b/exa/exa_migration.c
index b7ba3b319..fb46f4449 100644
--- a/exa/exa_migration.c
+++ b/exa/exa_migration.c
@@ -31,6 +31,7 @@
#include "xf86str.h"
#include "xf86.h"
#include "exa.h"
+#include "cw.h"
#if DEBUG_MIGRATE
#define DBG_MIGRATE(a) ErrorF a
@@ -1232,19 +1233,17 @@ exaFillRegionTiled (DrawablePtr pDrawable,
{
int nbox = REGION_NUM_RECTS (pRegion);
BoxPtr pBox = REGION_RECTS (pRegion);
- int xRot = pDrawable->x + xoff;
- int yRot = pDrawable->y + yoff;
while (nbox--)
{
int height = pBox->y2 - pBox->y1;
- int dstY = pBox->y1 + yoff;
+ int dstY = pBox->y1;
int tileY;
- modulus (dstY - yRot, tileHeight, tileY);
+ tileY = (dstY - pDrawable->y) % tileHeight;
while (height > 0) {
int width = pBox->x2 - pBox->x1;
- int dstX = pBox->x1 + xoff;
+ int dstX = pBox->x1;
int tileX;
int h = tileHeight - tileY;
@@ -1252,7 +1251,7 @@ exaFillRegionTiled (DrawablePtr pDrawable,
h = height;
height -= h;
- modulus (dstX - xRot, tileWidth, tileX);
+ tileX = (dstX - pDrawable->x) % tileWidth;
while (width > 0) {
int w = tileWidth - tileX;
if (w > width)
@@ -1261,7 +1260,7 @@ exaFillRegionTiled (DrawablePtr pDrawable,
(*pExaScr->info->accel.Copy) (pPixmap,
tileX, tileY,
- dstX, dstY,
+ dstX + xoff, dstY + yoff,
w, h);
dstX += w;
tileX = 0;
@@ -1428,6 +1427,8 @@ exaDriverInit (ScreenPtr pScreen,
}
#endif
+ miDisableCompositeWrapper(pScreen);
+
/*
* Hookup offscreen pixmaps
*/
diff --git a/fb/fb.h b/fb/fb.h
index 42e167777..ae2ab33e6 100644
--- a/fb/fb.h
+++ b/fb/fb.h
@@ -22,7 +22,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $XdotOrg: xc/programs/Xserver/fb/fb.h,v 1.9 2005/04/20 12:25:19 daniels Exp $ */
+/* $XdotOrg: xc/programs/Xserver/fb/fb.h,v 1.12 2005/08/24 11:18:33 daniels Exp $ */
#ifndef _FB_H_
#define _FB_H_
@@ -648,37 +648,53 @@ typedef struct {
#endif
#ifdef ROOTLESS
-#define __fbPixOriginX(pPix) ((pPix)->drawable.x)
-#define __fbPixOriginY(pPix) ((pPix)->drawable.y)
+#define __fbPixDrawableX(pPix) ((pPix)->drawable.x)
+#define __fbPixDrawableY(pPix) ((pPix)->drawable.y)
#else
-#define __fbPixOriginX(pPix) 0
-#define __fbPixOriginY(pPix) 0
+#define __fbPixDrawableX(pPix) 0
+#define __fbPixDrawableY(pPix) 0
#endif
+#ifdef COMPOSITE
+#define __fbPixOffXWin(pPix) (__fbPixDrawableX(pPix) - (pPix)->screen_x)
+#define __fbPixOffYWin(pPix) (__fbPixDrawableY(pPix) - (pPix)->screen_y)
+#else
+#define __fbPixOffXWin(pPix) (__fbPixDrawableX(pPix))
+#define __fbPixOffYWin(pPix) (__fbPixDrawableY(pPix))
+#endif
+#define __fbPixOffXPix(pPix) (__fbPixDrawableX(pPix))
+#define __fbPixOffYPix(pPix) (__fbPixDrawableY(pPix))
+
#define fbGetDrawable(pDrawable, pointer, stride, bpp, xoff, yoff) { \
PixmapPtr _pPix; \
- if ((pDrawable)->type != DRAWABLE_PIXMAP) \
+ if ((pDrawable)->type != DRAWABLE_PIXMAP) { \
_pPix = fbGetWindowPixmap(pDrawable); \
- else \
+ (xoff) = __fbPixOffXWin(_pPix); \
+ (yoff) = __fbPixOffYWin(_pPix); \
+ } else { \
_pPix = (PixmapPtr) (pDrawable); \
+ (xoff) = __fbPixOffXPix(_pPix); \
+ (yoff) = __fbPixOffYPix(_pPix); \
+ } \
(pointer) = (FbBits *) _pPix->devPrivate.ptr; \
(stride) = ((int) _pPix->devKind) / sizeof (FbBits); (void)(stride); \
(bpp) = _pPix->drawable.bitsPerPixel; (void)(bpp); \
- (xoff) = __fbPixOriginX(_pPix); (void)(xoff); \
- (yoff) = __fbPixOriginY(_pPix); (void)(yoff); \
}
#define fbGetStipDrawable(pDrawable, pointer, stride, bpp, xoff, yoff) { \
PixmapPtr _pPix; \
- if ((pDrawable)->type != DRAWABLE_PIXMAP) \
+ if ((pDrawable)->type != DRAWABLE_PIXMAP) { \
_pPix = fbGetWindowPixmap(pDrawable); \
- else \
+ (xoff) = __fbPixOffXWin(_pPix); \
+ (yoff) = __fbPixOffYWin(_pPix); \
+ } else { \
_pPix = (PixmapPtr) (pDrawable); \
+ (xoff) = __fbPixOffXPix(_pPix); \
+ (yoff) = __fbPixOffYPix(_pPix); \
+ } \
(pointer) = (FbStip *) _pPix->devPrivate.ptr; \
(stride) = ((int) _pPix->devKind) / sizeof (FbStip); (void)(stride); \
(bpp) = _pPix->drawable.bitsPerPixel; (void)(bpp); \
- (xoff) = __fbPixOriginX(_pPix); (void)(xoff); \
- (yoff) = __fbPixOriginY(_pPix); (void)(yoff); \
}
/*
@@ -836,6 +852,8 @@ fbDots8 (FbBits *dst,
BoxPtr pBox,
xPoint *pts,
int npt,
+ int xorg,
+ int yorg,
int xoff,
int yoff,
FbBits and,
@@ -908,6 +926,8 @@ fbDots16(FbBits *dst,
BoxPtr pBox,
xPoint *pts,
int npt,
+ int xorg,
+ int yorg,
int xoff,
int yoff,
FbBits and,
@@ -981,6 +1001,8 @@ fbDots24(FbBits *dst,
BoxPtr pBox,
xPoint *pts,
int npt,
+ int xorg,
+ int yorg,
int xoff,
int yoff,
FbBits and,
@@ -1054,6 +1076,8 @@ fbDots32(FbBits *dst,
BoxPtr pBox,
xPoint *pts,
int npt,
+ int xorg,
+ int yorg,
int xoff,
int yoff,
FbBits and,
@@ -1600,6 +1624,8 @@ fbDots (FbBits *dstOrig,
BoxPtr pBox,
xPoint *pts,
int npt,
+ int xorg,
+ int yorg,
int xoff,
int yoff,
FbBits andOrig,
diff --git a/fb/fbbits.h b/fb/fbbits.h
index 699782229..7dfff58b4 100644
--- a/fb/fbbits.h
+++ b/fb/fbbits.h
@@ -274,6 +274,8 @@ DOTS (FbBits *dst,
BoxPtr pBox,
xPoint *ptsOrig,
int npt,
+ int xorg,
+ int yorg,
int xoff,
int yoff,
FbBits and,
@@ -288,10 +290,10 @@ DOTS (FbBits *dst,
INT32 ul, lr;
INT32 pt;
- ul = coordToInt(pBox->x1 - xoff, pBox->y1 - yoff);
- lr = coordToInt(pBox->x2 - xoff - 1, pBox->y2 - yoff - 1);
+ ul = coordToInt(pBox->x1 - xorg, pBox->y1 - yorg);
+ lr = coordToInt(pBox->x2 - xorg - 1, pBox->y2 - yorg - 1);
- bits += bitsStride * yoff + xoff * MUL;
+ bits += bitsStride * (yorg + yoff) + (xorg + xoff) * MUL;
if (and == 0)
{
@@ -827,6 +829,8 @@ POLYSEGMENT (DrawablePtr pDrawable,
ul = coordToInt(pBox->x1 - xoff, pBox->y1 - yoff);
lr = coordToInt(pBox->x2 - xoff - 1, pBox->y2 - yoff - 1);
+ bits += bitsStride * yoff + xoff * MUL;
+
capNotLast = pGC->capStyle == CapNotLast;
while (nseg--)
diff --git a/fb/fbcopy.c b/fb/fbcopy.c
index eb295a397..510af19a3 100644
--- a/fb/fbcopy.c
+++ b/fb/fbcopy.c
@@ -68,11 +68,11 @@ fbCopyNtoN (DrawablePtr pSrcDrawable,
if (!fbCopyAreammx (pSrcDrawable,
pDstDrawable,
- (pbox->x1 + dx + srcXoff),
- (pbox->y1 + dy + srcYoff),
+ (pbox->x1 + dx),
+ (pbox->y1 + dy),
- (pbox->x1 + dstXoff),
- (pbox->y1 + dstYoff),
+ (pbox->x1),
+ (pbox->y1),
(pbox->x2 - pbox->x1),
(pbox->y2 - pbox->y1)))
diff --git a/fb/fbfill.c b/fb/fbfill.c
index 3c4959959..c61ff3b4c 100644
--- a/fb/fbfill.c
+++ b/fb/fbfill.c
@@ -92,7 +92,7 @@ fbFill (DrawablePtr pDrawable,
dstBpp,
(pGC->patOrg.x + pDrawable->x + dstXoff),
- pGC->patOrg.y + pDrawable->y + dstYoff - y);
+ pGC->patOrg.y + pDrawable->y - y);
}
else
{
@@ -129,7 +129,7 @@ fbFill (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;
}
@@ -157,7 +157,7 @@ fbFill (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;
}
}
diff --git a/fb/fbmmx.c b/fb/fbmmx.c
index a1cad900a..c3aff3d2c 100644
--- a/fb/fbmmx.c
+++ b/fb/fbmmx.c
@@ -2034,16 +2034,6 @@ fbCompositeSrcAdd_8888x8888mmx (CARD8 op,
_mm_empty();
}
-#define GetStart(drw,x,y,type,stride,line,bpp) {\
- FbBits *__bits__; \
- FbStride __stride__; \
- int __xoff__,__yoff__; \
- \
- fbGetDrawable((drw),__bits__,__stride__,bpp,__xoff__,__yoff__); \
- (stride) = __stride__ * sizeof (FbBits) / sizeof (type); \
- (line) = ((type *) __bits__) + (stride) * ((y) - __yoff__) + ((x) - __xoff__); \
-}
-
Bool
fbSolidFillmmx (DrawablePtr pDraw,
int x,
@@ -2074,14 +2064,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 + yoff) + (x + xoff));
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 + yoff) + (x + xoff));
byte_width = 4 * width;
stride *= 4;
}
@@ -2173,36 +2163,28 @@ fbCopyAreammx (DrawablePtr pSrc,
fbGetDrawable(pSrc, src_bits, src_stride, src_bpp, src_xoff, src_yoff);
fbGetDrawable(pDst, dst_bits, dst_stride, dst_bpp, dst_xoff, dst_yoff);
- if (src_bpp != 16 && src_bpp != 32)
- return FALSE;
-
- if (dst_bpp != 16 && dst_bpp != 32)
- return FALSE;
-
if (src_bpp != dst_bpp)
- {
return FALSE;
- }
if (src_bpp == 16)
{
src_stride = src_stride * sizeof (FbBits) / 2;
dst_stride = dst_stride * sizeof (FbBits) / 2;
- src_bytes = (CARD8 *)(((CARD16 *)src_bits) + src_stride * (src_y - src_yoff) + (src_x - src_xoff));
- dst_bytes = (CARD8 *)(((CARD16 *)dst_bits) + dst_stride * (dst_y - dst_yoff) + (dst_x - dst_xoff));
+ src_bytes = (CARD8 *)(((CARD16 *)src_bits) + src_stride * (src_y + src_yoff) + (src_x + src_xoff));
+ dst_bytes = (CARD8 *)(((CARD16 *)dst_bits) + dst_stride * (dst_y + dst_yoff) + (dst_x + dst_xoff));
byte_width = 2 * width;
src_stride *= 2;
dst_stride *= 2;
- }
- else
- {
+ } else if (src_bpp == 32) {
src_stride = src_stride * sizeof (FbBits) / 4;
dst_stride = dst_stride * sizeof (FbBits) / 4;
- src_bytes = (CARD8 *)(((CARD32 *)src_bits) + src_stride * (src_y - src_yoff) + (src_x - src_xoff));
- dst_bytes = (CARD8 *)(((CARD32 *)dst_bits) + dst_stride * (dst_y - dst_yoff) + (dst_x - dst_xoff));
+ src_bytes = (CARD8 *)(((CARD32 *)src_bits) + src_stride * (src_y + src_yoff) + (src_x + src_xoff));
+ dst_bytes = (CARD8 *)(((CARD32 *)dst_bits) + dst_stride * (dst_y + dst_yoff) + (dst_x + dst_xoff));
byte_width = 4 * width;
src_stride *= 4;
dst_stride *= 4;
+ } else {
+ return FALSE;
}
while (height--)
diff --git a/fb/fbpict.h b/fb/fbpict.h
index 0e6a7f4ff..665b92dd1 100644
--- a/fb/fbpict.h
+++ b/fb/fbpict.h
@@ -110,7 +110,7 @@
\
fbGetDrawable((pict)->pDrawable,__bits__,__stride__,__bpp__,__xoff__,__yoff__); \
(stride) = __stride__ * sizeof (FbBits) / sizeof (type); \
- (line) = ((type *) __bits__) + (stride) * ((y) - __yoff__) + (mul) * ((x) - __xoff__); \
+ (line) = ((type *) __bits__) + (stride) * ((y) + __yoff__) + (mul) * ((x) + __xoff__); \
}
#define cvt8888to0565(s) ((((s) >> 3) & 0x001f) | \
(((s) >> 5) & 0x07e0) | \
diff --git a/fb/fbpoint.c b/fb/fbpoint.c
index 5ba24e0e5..5229d6970 100644
--- a/fb/fbpoint.c
+++ b/fb/fbpoint.c
@@ -35,6 +35,8 @@ typedef void (*FbDots) (FbBits *dst,
BoxPtr pBox,
xPoint *pts,
int npt,
+ int xorg,
+ int yorg,
int xoff,
int yoff,
FbBits and,
@@ -47,6 +49,8 @@ fbDots (FbBits *dstOrig,
BoxPtr pBox,
xPoint *pts,
int npt,
+ int xorg,
+ int yorg,
int xoff,
int yoff,
FbBits andOrig,
@@ -66,13 +70,13 @@ fbDots (FbBits *dstOrig,
y2 = pBox->y2;
while (npt--)
{
- x = pts->x + xoff;
- y = pts->y + yoff;
+ x = pts->x + xorg;
+ y = pts->y + yorg;
pts++;
if (x1 <= x && x < x2 && y1 <= y && y < y2)
{
- x *= dstBpp;
- d = dst + (y * dstStride) + (x >> FB_STIP_SHIFT);
+ x = (x + xoff) * dstBpp;
+ d = dst + ((y + yoff) * dstStride) + (x >> FB_STIP_SHIFT);
x &= FB_STIP_MASK;
#ifdef FB_24BIT
if (dstBpp == 24)
@@ -156,5 +160,5 @@ fbPolyPoint (DrawablePtr pDrawable,
for (nBox = REGION_NUM_RECTS (pClip), pBox = REGION_RECTS (pClip);
nBox--; pBox++)
(*dots) (dst, dstStride, dstBpp, pBox, pptInit, nptInit,
- pDrawable->x + dstXoff, pDrawable->y + dstYoff, and, xor);
+ pDrawable->x, pDrawable->y, dstXoff, dstYoff, and, xor);
}
diff --git a/fb/fbwindow.c b/fb/fbwindow.c
index 8820856b0..7b96f18c3 100644
--- a/fb/fbwindow.c
+++ b/fb/fbwindow.c
@@ -1,4 +1,4 @@
-/* $XdotOrg: xc/programs/Xserver/fb/fbwindow.c,v 1.6 2004/12/06 15:53:00 eich Exp $ */
+/* $XdotOrg: xc/programs/Xserver/fb/fbwindow.c,v 1.8 2005/07/03 07:01:23 daniels Exp $ */
/*
* Id: fbwindow.c,v 1.1 1999/11/02 03:54:45 keithp Exp $
*
@@ -291,7 +291,7 @@ fbFillRegionTiled (DrawablePtr pDrawable,
FB_ALLONES,
dstBpp,
xRot * dstBpp,
- yRot - pbox->y1);
+ yRot - (pbox->y1 + dstYoff));
pbox++;
}
}
diff --git a/hw/xfree86/exa/exa.c b/hw/xfree86/exa/exa.c
index b7ba3b319..fb46f4449 100644
--- a/hw/xfree86/exa/exa.c
+++ b/hw/xfree86/exa/exa.c
@@ -31,6 +31,7 @@
#include "xf86str.h"
#include "xf86.h"
#include "exa.h"
+#include "cw.h"
#if DEBUG_MIGRATE
#define DBG_MIGRATE(a) ErrorF a
@@ -1232,19 +1233,17 @@ exaFillRegionTiled (DrawablePtr pDrawable,
{
int nbox = REGION_NUM_RECTS (pRegion);
BoxPtr pBox = REGION_RECTS (pRegion);
- int xRot = pDrawable->x + xoff;
- int yRot = pDrawable->y + yoff;
while (nbox--)
{
int height = pBox->y2 - pBox->y1;
- int dstY = pBox->y1 + yoff;
+ int dstY = pBox->y1;
int tileY;
- modulus (dstY - yRot, tileHeight, tileY);
+ tileY = (dstY - pDrawable->y) % tileHeight;
while (height > 0) {
int width = pBox->x2 - pBox->x1;
- int dstX = pBox->x1 + xoff;
+ int dstX = pBox->x1;
int tileX;
int h = tileHeight - tileY;
@@ -1252,7 +1251,7 @@ exaFillRegionTiled (DrawablePtr pDrawable,
h = height;
height -= h;
- modulus (dstX - xRot, tileWidth, tileX);
+ tileX = (dstX - pDrawable->x) % tileWidth;
while (width > 0) {
int w = tileWidth - tileX;
if (w > width)
@@ -1261,7 +1260,7 @@ exaFillRegionTiled (DrawablePtr pDrawable,
(*pExaScr->info->accel.Copy) (pPixmap,
tileX, tileY,
- dstX, dstY,
+ dstX + xoff, dstY + yoff,
w, h);
dstX += w;
tileX = 0;
@@ -1428,6 +1427,8 @@ exaDriverInit (ScreenPtr pScreen,
}
#endif
+ miDisableCompositeWrapper(pScreen);
+
/*
* Hookup offscreen pixmaps
*/
diff --git a/hw/xfree86/exa/exa_accel.c b/hw/xfree86/exa/exa_accel.c
index b7ba3b319..fb46f4449 100644
--- a/hw/xfree86/exa/exa_accel.c
+++ b/hw/xfree86/exa/exa_accel.c
@@ -31,6 +31,7 @@
#include "xf86str.h"
#include "xf86.h"
#include "exa.h"
+#include "cw.h"
#if DEBUG_MIGRATE
#define DBG_MIGRATE(a) ErrorF a
@@ -1232,19 +1233,17 @@ exaFillRegionTiled (DrawablePtr pDrawable,
{
int nbox = REGION_NUM_RECTS (pRegion);
BoxPtr pBox = REGION_RECTS (pRegion);
- int xRot = pDrawable->x + xoff;
- int yRot = pDrawable->y + yoff;
while (nbox--)
{
int height = pBox->y2 - pBox->y1;
- int dstY = pBox->y1 + yoff;
+ int dstY = pBox->y1;
int tileY;
- modulus (dstY - yRot, tileHeight, tileY);
+ tileY = (dstY - pDrawable->y) % tileHeight;
while (height > 0) {
int width = pBox->x2 - pBox->x1;
- int dstX = pBox->x1 + xoff;
+ int dstX = pBox->x1;
int tileX;
int h = tileHeight - tileY;
@@ -1252,7 +1251,7 @@ exaFillRegionTiled (DrawablePtr pDrawable,
h = height;
height -= h;
- modulus (dstX - xRot, tileWidth, tileX);
+ tileX = (dstX - pDrawable->x) % tileWidth;
while (width > 0) {
int w = tileWidth - tileX;
if (w > width)
@@ -1261,7 +1260,7 @@ exaFillRegionTiled (DrawablePtr pDrawable,
(*pExaScr->info->accel.Copy) (pPixmap,
tileX, tileY,
- dstX, dstY,
+ dstX + xoff, dstY + yoff,
w, h);
dstX += w;
tileX = 0;
@@ -1428,6 +1427,8 @@ exaDriverInit (ScreenPtr pScreen,
}
#endif
+ miDisableCompositeWrapper(pScreen);
+
/*
* Hookup offscreen pixmaps
*/
diff --git a/hw/xfree86/exa/exa_migration.c b/hw/xfree86/exa/exa_migration.c
index b7ba3b319..fb46f4449 100644
--- a/hw/xfree86/exa/exa_migration.c
+++ b/hw/xfree86/exa/exa_migration.c
@@ -31,6 +31,7 @@
#include "xf86str.h"
#include "xf86.h"
#include "exa.h"
+#include "cw.h"
#if DEBUG_MIGRATE
#define DBG_MIGRATE(a) ErrorF a
@@ -1232,19 +1233,17 @@ exaFillRegionTiled (DrawablePtr pDrawable,
{
int nbox = REGION_NUM_RECTS (pRegion);
BoxPtr pBox = REGION_RECTS (pRegion);
- int xRot = pDrawable->x + xoff;
- int yRot = pDrawable->y + yoff;
while (nbox--)
{
int height = pBox->y2 - pBox->y1;
- int dstY = pBox->y1 + yoff;
+ int dstY = pBox->y1;
int tileY;
- modulus (dstY - yRot, tileHeight, tileY);
+ tileY = (dstY - pDrawable->y) % tileHeight;
while (height > 0) {
int width = pBox->x2 - pBox->x1;
- int dstX = pBox->x1 + xoff;
+ int dstX = pBox->x1;
int tileX;
int h = tileHeight - tileY;
@@ -1252,7 +1251,7 @@ exaFillRegionTiled (DrawablePtr pDrawable,
h = height;
height -= h;
- modulus (dstX - xRot, tileWidth, tileX);
+ tileX = (dstX - pDrawable->x) % tileWidth;
while (width > 0) {
int w = tileWidth - tileX;
if (w > width)
@@ -1261,7 +1260,7 @@ exaFillRegionTiled (DrawablePtr pDrawable,
(*pExaScr->info->accel.Copy) (pPixmap,
tileX, tileY,
- dstX, dstY,
+ dstX + xoff, dstY + yoff,
w, h);
dstX += w;
tileX = 0;
@@ -1428,6 +1427,8 @@ exaDriverInit (ScreenPtr pScreen,
}
#endif
+ miDisableCompositeWrapper(pScreen);
+
/*
* Hookup offscreen pixmaps
*/
diff --git a/miext/cw/cw.c b/miext/cw/cw.c
index 2b8010f50..4ebf8ab8a 100644
--- a/miext/cw/cw.c
+++ b/miext/cw/cw.c
@@ -48,6 +48,7 @@ int cwWindowIndex;
#ifdef RENDER
int cwPictureIndex;
#endif
+static Bool cwDisabled[MAXSCREENS];
static unsigned long cwGeneration = 0;
extern GCOps cwGCOps;
@@ -617,6 +618,9 @@ miInitializeCompositeWrapper(ScreenPtr pScreen)
{
cwScreenPtr pScreenPriv;
+ if (cwDisabled[pScreen->myNum])
+ return;
+
if (cwGeneration != serverGeneration)
{
cwScreenIndex = AllocateScreenPrivateIndex();
@@ -660,6 +664,12 @@ miInitializeCompositeWrapper(ScreenPtr pScreen)
#endif
}
+void
+miDisableCompositeWrapper(ScreenPtr pScreen)
+{
+ cwDisabled[pScreen->myNum] = TRUE;
+}
+
static Bool
cwCloseScreen (int i, ScreenPtr pScreen)
{
diff --git a/miext/cw/cw.h b/miext/cw/cw.h
index 1f8c400e2..67ce9cd31 100644
--- a/miext/cw/cw.h
+++ b/miext/cw/cw.h
@@ -164,5 +164,10 @@ void
cwFiniRender (ScreenPtr pScreen);
/* cw.c */
+
void
miInitializeCompositeWrapper(ScreenPtr pScreen);
+
+/* Must be called before miInitializeCompositeWrapper */
+void
+miDisableCompositeWrapper(ScreenPtr pScreen);