summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichel Dänzer <daenzer@vmware.com>2009-05-15 15:48:37 +0200
committerMichel Dänzer <daenzer@vmware.com>2009-05-15 15:48:37 +0200
commit850675d4de4373e5df95507dbf2cd9affaaf54bc (patch)
treebad789481074fed23539d6312278e914bd5825a3
parentc1bbac2708bbccbec01cecba39cdf2b8160c1dc3 (diff)
EXA: Take GC client clip type into account for migration.
Fixes http://bugs.freedesktop.org/show_bug.cgi?id=18950 . Signed-off-by: Michel Dänzer <daenzer@vmware.com>
-rw-r--r--exa/exa_accel.c35
-rw-r--r--exa/exa_priv.h10
-rw-r--r--exa/exa_render.c2
-rw-r--r--exa/exa_unaccel.c2
4 files changed, 25 insertions, 24 deletions
diff --git a/exa/exa_accel.c b/exa/exa_accel.c
index d284ff560..39f343784 100644
--- a/exa/exa_accel.c
+++ b/exa/exa_accel.c
@@ -408,3 +408,4 @@ exaHWCopyNtoN (DrawablePtr pSrcDrawable,
if (!pGC || !exaGCReadsDestination(pDstDrawable, pGC->planemask,
- pGC->fillStyle, pGC->alu)) {
+ pGC->fillStyle, pGC->alu,
+ pGC->clientClipType)) {
dstregion = REGION_CREATE(pScreen, NullBox, 0);
@@ -736,3 +737,4 @@ exaPolySegment (DrawablePtr pDrawable, GCPtr pGC, int nseg,
static Bool exaFillRegionSolid (DrawablePtr pDrawable, RegionPtr pRegion,
- Pixel pixel, CARD32 planemask, CARD32 alu);
+ Pixel pixel, CARD32 planemask, CARD32 alu,
+ unsigned int clientClipType);
@@ -789,6 +791,7 @@ exaPolyFillRect(DrawablePtr pDrawable,
pGC->fgPixel : pGC->tile.pixel, pGC->planemask,
- pGC->alu)) ||
+ pGC->alu, pGC->clientClipType)) ||
(pGC->fillStyle == FillTiled && !pGC->tileIsPixel &&
exaFillRegionTiled(pDrawable, pReg, pGC->tile.pixmap, &pGC->patOrg,
- pGC->planemask, pGC->alu))) {
+ pGC->planemask, pGC->alu,
+ pGC->clientClipType))) {
goto out;
@@ -954,7 +957,4 @@ exaCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc)
static Bool
-exaFillRegionSolid (DrawablePtr pDrawable,
- RegionPtr pRegion,
- Pixel pixel,
- CARD32 planemask,
- CARD32 alu)
+exaFillRegionSolid (DrawablePtr pDrawable, RegionPtr pRegion, Pixel pixel,
+ CARD32 planemask, CARD32 alu, unsigned int clientClipType)
{
@@ -971,3 +971,4 @@ exaFillRegionSolid (DrawablePtr pDrawable,
pixmaps[0].pReg = exaGCReadsDestination(pDrawable, planemask, FillSolid,
- alu) ? NULL : pRegion;
+ alu, clientClipType)
+ ? NULL : pRegion;
@@ -1034,8 +1035,5 @@ out:
Bool
-exaFillRegionTiled (DrawablePtr pDrawable,
- RegionPtr pRegion,
- PixmapPtr pTile,
- DDXPointPtr pPatOrg,
- CARD32 planemask,
- CARD32 alu)
+exaFillRegionTiled (DrawablePtr pDrawable, RegionPtr pRegion, PixmapPtr pTile,
+ DDXPointPtr pPatOrg, CARD32 planemask, CARD32 alu,
+ unsigned int clientClipType)
{
@@ -1062,3 +1060,3 @@ exaFillRegionTiled (DrawablePtr pDrawable,
exaGetPixmapFirstPixel (pTile), planemask,
- alu);
+ alu, clientClipType);
@@ -1068,3 +1066,4 @@ exaFillRegionTiled (DrawablePtr pDrawable,
pixmaps[0].pReg = exaGCReadsDestination(pDrawable, planemask, FillTiled,
- alu) ? NULL : pRegion;
+ alu, clientClipType)
+ ? NULL : pRegion;
pixmaps[1].as_dst = FALSE;
diff --git a/exa/exa_priv.h b/exa/exa_priv.h
index 9efbbc98c..874e7e987 100644
--- a/exa/exa_priv.h
+++ b/exa/exa_priv.h
@@ -417,7 +417,8 @@ static _X_INLINE Bool
exaGCReadsDestination(DrawablePtr pDrawable, unsigned long planemask,
- unsigned int fillStyle, unsigned char alu)
+ unsigned int fillStyle, unsigned char alu,
+ unsigned int clientClipType)
{
- return ((alu != GXcopy && alu != GXclear &&alu != GXset &&
+ return ((alu != GXcopy && alu != GXclear && alu != GXset &&
alu != GXcopyInverted) || fillStyle == FillStippled ||
- !EXA_PM_IS_SOLID(pDrawable, planemask));
+ clientClipType != CT_NONE || !EXA_PM_IS_SOLID(pDrawable, planemask));
}
@@ -429,3 +430,4 @@ Bool
exaFillRegionTiled (DrawablePtr pDrawable, RegionPtr pRegion, PixmapPtr pTile,
- DDXPointPtr pPatOrg, CARD32 planemask, CARD32 alu);
+ DDXPointPtr pPatOrg, CARD32 planemask, CARD32 alu,
+ unsigned int clientClipType);
diff --git a/exa/exa_render.c b/exa/exa_render.c
index a9344977f..14d710b57 100644
--- a/exa/exa_render.c
+++ b/exa/exa_render.c
@@ -947,3 +947,3 @@ exaComposite(CARD8 op,
(PixmapPtr)pSrc->pDrawable,
- &patOrg, FB_ALLONES, GXcopy);
+ &patOrg, FB_ALLONES, GXcopy, CT_NONE);
diff --git a/exa/exa_unaccel.c b/exa/exa_unaccel.c
index 4279c877c..0d53b67d8 100644
--- a/exa/exa_unaccel.c
+++ b/exa/exa_unaccel.c
@@ -108,3 +108,3 @@ ExaCheckPutImage (DrawablePtr pDrawable, GCPtr pGC, int depth,
if (exaGCReadsDestination(pDrawable, pGC->planemask, pGC->fillStyle,
- pGC->alu))
+ pGC->alu, pGC->clientClipType))
exaPrepareAccess (pDrawable, EXA_PREPARE_DEST);