From 0a9f43021ecb8ec5d68d178b87cbc2cc070a536b6f24722ea95253a0bf3928a7 Mon Sep 17 00:00:00 2001 From: Stefan Dirsch Date: Tue, 30 Oct 2012 10:55:51 +0000 Subject: [PATCH] - 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 --- ...-mask-pixmaps-more-explicitly-for-Co.patch | 88 +++++++++++++++++++ xorg-x11-server.changes | 11 +++ xorg-x11-server.spec | 2 + 3 files changed, 101 insertions(+) create mode 100644 U_EXA-Track-source-mask-pixmaps-more-explicitly-for-Co.patch diff --git a/U_EXA-Track-source-mask-pixmaps-more-explicitly-for-Co.patch b/U_EXA-Track-source-mask-pixmaps-more-explicitly-for-Co.patch new file mode 100644 index 0000000..0d58125 --- /dev/null +++ b/U_EXA-Track-source-mask-pixmaps-more-explicitly-for-Co.patch @@ -0,0 +1,88 @@ +From 1ca096d5e07221025c4c4110528772b7d94f15ee Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Michel=20D=C3=A4nzer?= +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 +Reviewed-by: Alex Deucher +Signed-off-by: Keith Packard +--- + 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 + diff --git a/xorg-x11-server.changes b/xorg-x11-server.changes index e4a5053..4d99c20 100644 --- a/xorg-x11-server.changes +++ b/xorg-x11-server.changes @@ -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 diff --git a/xorg-x11-server.spec b/xorg-x11-server.spec index 6cfa0f2..0944cb7 100644 --- a/xorg-x11-server.spec +++ b/xorg-x11-server.spec @@ -175,6 +175,7 @@ Patch220: N_Use-external-tool-for-creating-backtraces-on-crashes.patch Patch222: N_sync-fix.patch Patch225: u_Do-not-use-intel-driver-on-Poulsbo-Oaktrail-Medfield.patch Patch226: u_vgaHW-no-legacy.patch +Patch227: U_EXA-Track-source-mask-pixmaps-more-explicitly-for-Co.patch %description This package contains the X.Org Server. @@ -293,6 +294,7 @@ cp %{SOURCE96} . #%patch222 -p1 %patch225 -p1 %patch226 -p0 +%patch227 -p1 %build autoreconf -fi