forked from pool/xorg-x11-server
- U_EXA-Track-source-mask-pixmaps-more-explicitly-for-Co.patch
Track source/mask pixmaps more explicitly for Composite fallback regions. In particular, make sure pExaScr->src/maskPix are cleared when the corresponding pictures aren't associated with drawables, i.e. solid or gradient pictures. Without this, we would in some cases associate the source/mask region with unrelated pixmaps from previous Composite fallbacks, resulting in random corruption. (bnc#786153, fdo#47266) OBS-URL: https://build.opensuse.org/package/show/X11:XOrg/xorg-x11-server?expand=0&rev=418
This commit is contained in:
parent
902ef062cc
commit
0a9f43021e
88
U_EXA-Track-source-mask-pixmaps-more-explicitly-for-Co.patch
Normal file
88
U_EXA-Track-source-mask-pixmaps-more-explicitly-for-Co.patch
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
From 1ca096d5e07221025c4c4110528772b7d94f15ee Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Michel=20D=C3=A4nzer?= <michel.daenzer@amd.com>
|
||||||
|
Date: Mon, 29 Oct 2012 12:57:54 +0100
|
||||||
|
Subject: [PATCH] EXA: Track source/mask pixmaps more explicitly for Composite fallback regions.
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
In particular, make sure pExaScr->src/maskPix are cleared when the
|
||||||
|
corresponding pictures aren't associated with drawables, i.e. solid or gradient
|
||||||
|
pictures. Without this, we would in some cases associate the source/mask region
|
||||||
|
with unrelated pixmaps from previous Composite fallbacks, resulting in random
|
||||||
|
corruption.
|
||||||
|
|
||||||
|
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=47266
|
||||||
|
|
||||||
|
Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
|
||||||
|
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
|
||||||
|
Signed-off-by: Keith Packard <keithp@keithp.com>
|
||||||
|
---
|
||||||
|
exa/exa_priv.h | 1 +
|
||||||
|
exa/exa_unaccel.c | 16 ++++++++++++----
|
||||||
|
2 files changed, 13 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/exa/exa_priv.h b/exa/exa_priv.h
|
||||||
|
index 7007578..1f56056 100644
|
||||||
|
--- a/exa/exa_priv.h
|
||||||
|
+++ b/exa/exa_priv.h
|
||||||
|
@@ -208,6 +208,7 @@ typedef struct {
|
||||||
|
RegionRec srcReg;
|
||||||
|
RegionRec maskReg;
|
||||||
|
PixmapPtr srcPix;
|
||||||
|
+ PixmapPtr maskPix;
|
||||||
|
|
||||||
|
DevPrivateKeyRec pixmapPrivateKeyRec;
|
||||||
|
DevPrivateKeyRec gcPrivateKeyRec;
|
||||||
|
diff --git a/exa/exa_unaccel.c b/exa/exa_unaccel.c
|
||||||
|
index 5716138..b0a0011 100644
|
||||||
|
--- a/exa/exa_unaccel.c
|
||||||
|
+++ b/exa/exa_unaccel.c
|
||||||
|
@@ -442,6 +442,13 @@ ExaSrcValidate(DrawablePtr pDrawable,
|
||||||
|
RegionPtr dst;
|
||||||
|
int xoff, yoff;
|
||||||
|
|
||||||
|
+ if (pExaScr->srcPix == pPix)
|
||||||
|
+ dst = &pExaScr->srcReg;
|
||||||
|
+ else if (pExaScr->maskPix == pPix)
|
||||||
|
+ dst = &pExaScr->maskReg;
|
||||||
|
+ else
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
exaGetDrawableDeltas(pDrawable, pPix, &xoff, &yoff);
|
||||||
|
|
||||||
|
box.x1 = x + xoff;
|
||||||
|
@@ -449,8 +456,6 @@ ExaSrcValidate(DrawablePtr pDrawable,
|
||||||
|
box.x2 = box.x1 + width;
|
||||||
|
box.y2 = box.y1 + height;
|
||||||
|
|
||||||
|
- dst = (pExaScr->srcPix == pPix) ? &pExaScr->srcReg : &pExaScr->maskReg;
|
||||||
|
-
|
||||||
|
RegionInit(®, &box, 1);
|
||||||
|
RegionUnion(dst, dst, ®);
|
||||||
|
RegionUninit(®);
|
||||||
|
@@ -495,16 +500,19 @@ ExaPrepareCompositeReg(ScreenPtr pScreen,
|
||||||
|
if (pSrc != pDst)
|
||||||
|
RegionTranslate(pSrc->pCompositeClip,
|
||||||
|
-pSrc->pDrawable->x, -pSrc->pDrawable->y);
|
||||||
|
- }
|
||||||
|
+ } else
|
||||||
|
+ pExaScr->srcPix = NULL;
|
||||||
|
|
||||||
|
if (pMask && pMask->pDrawable) {
|
||||||
|
pMaskPix = exaGetDrawablePixmap(pMask->pDrawable);
|
||||||
|
RegionNull(&pExaScr->maskReg);
|
||||||
|
maskReg = &pExaScr->maskReg;
|
||||||
|
+ pExaScr->maskPix = pMaskPix;
|
||||||
|
if (pMask != pDst && pMask != pSrc)
|
||||||
|
RegionTranslate(pMask->pCompositeClip,
|
||||||
|
-pMask->pDrawable->x, -pMask->pDrawable->y);
|
||||||
|
- }
|
||||||
|
+ } else
|
||||||
|
+ pExaScr->maskPix = NULL;
|
||||||
|
|
||||||
|
RegionTranslate(pDst->pCompositeClip,
|
||||||
|
-pDst->pDrawable->x, -pDst->pDrawable->y);
|
||||||
|
--
|
||||||
|
1.7.3.4
|
||||||
|
|
@ -1,3 +1,14 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Oct 30 10:45:57 UTC 2012 - sndirsch@suse.com
|
||||||
|
|
||||||
|
- U_EXA-Track-source-mask-pixmaps-more-explicitly-for-Co.patch
|
||||||
|
Track source/mask pixmaps more explicitly for Composite fallback regions.
|
||||||
|
In particular, make sure pExaScr->src/maskPix are cleared when the
|
||||||
|
corresponding pictures aren't associated with drawables, i.e. solid or
|
||||||
|
gradient pictures. Without this, we would in some cases associate the
|
||||||
|
source/mask region with unrelated pixmaps from previous Composite
|
||||||
|
fallbacks, resulting in random corruption. (bnc#786153, fdo#47266)
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Mon Oct 15 14:22:01 UTC 2012 - sndirsch@suse.com
|
Mon Oct 15 14:22:01 UTC 2012 - sndirsch@suse.com
|
||||||
|
|
||||||
|
@ -175,6 +175,7 @@ Patch220: N_Use-external-tool-for-creating-backtraces-on-crashes.patch
|
|||||||
Patch222: N_sync-fix.patch
|
Patch222: N_sync-fix.patch
|
||||||
Patch225: u_Do-not-use-intel-driver-on-Poulsbo-Oaktrail-Medfield.patch
|
Patch225: u_Do-not-use-intel-driver-on-Poulsbo-Oaktrail-Medfield.patch
|
||||||
Patch226: u_vgaHW-no-legacy.patch
|
Patch226: u_vgaHW-no-legacy.patch
|
||||||
|
Patch227: U_EXA-Track-source-mask-pixmaps-more-explicitly-for-Co.patch
|
||||||
|
|
||||||
%description
|
%description
|
||||||
This package contains the X.Org Server.
|
This package contains the X.Org Server.
|
||||||
@ -293,6 +294,7 @@ cp %{SOURCE96} .
|
|||||||
#%patch222 -p1
|
#%patch222 -p1
|
||||||
%patch225 -p1
|
%patch225 -p1
|
||||||
%patch226 -p0
|
%patch226 -p0
|
||||||
|
%patch227 -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
autoreconf -fi
|
autoreconf -fi
|
||||||
|
Loading…
Reference in New Issue
Block a user