xorg-server: Changes to 'debian-unstable'
debian/changelog | 7
debian/patches/07_Revert-kinput-allocate-enough-space-for-null-charact.diff | 13 -
debian/patches/09_EXA-Fall-back-earlier-and-more-thoroughly-from-exaGlyphs.diff | 127 ----------
debian/patches/09_EXA-Track-source-mask-pixmaps-more-explicitly-for-Co.diff | 86 ++++++
debian/patches/series | 2
5 files changed, 99 insertions(+), 136 deletions(-)
New commits:
commit 5865e42d2a3471a18e74d0a9e8262c9cc9a550e2
Author: Julien Cristau <jcristau@debian.org>
Date: Mon Nov 5 10:40:41 2012 +0100
Replace EXA patch from previous upload with the one actually applied upstream
Closes: #666468.
diff --git a/debian/changelog b/debian/changelog
index d62a530..393c4de 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,10 @@
+xorg-server (2:1.12.4-3) unstable; urgency=low
+
+ * Replace EXA patch from previous upload with the one actually applied
+ upstream (closes: #666468).
+
+ -- Julien Cristau <jcristau@debian.org> Mon, 05 Nov 2012 10:44:58 +0100
+
xorg-server (2:1.12.4-2) unstable; urgency=low
* Fix Xephyr command line option parsing (closes: #689246). Thanks, Andrzej
diff --git a/debian/patches/07_Revert-kinput-allocate-enough-space-for-null-charact.diff b/debian/patches/07_Revert-kinput-allocate-enough-space-for-null-charact.diff
index fbb6ac7..be1b598 100644
--- a/debian/patches/07_Revert-kinput-allocate-enough-space-for-null-charact.diff
+++ b/debian/patches/07_Revert-kinput-allocate-enough-space-for-null-charact.diff
@@ -36,11 +36,11 @@ Cc: Dave Airlie <airlied@redhat.com>
hw/kdrive/src/kinput.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
-diff --git a/hw/kdrive/src/kinput.c b/hw/kdrive/src/kinput.c
-index d35dcf8..b1068bb 100644
---- a/hw/kdrive/src/kinput.c
-+++ b/hw/kdrive/src/kinput.c
-@@ -1034,7 +1034,7 @@ KdGetOptions(InputOption **options, char *string)
+Index: xorg-server/hw/kdrive/src/kinput.c
+===================================================================
+--- xorg-server.orig/hw/kdrive/src/kinput.c
++++ xorg-server/hw/kdrive/src/kinput.c
+@@ -1055,7 +1055,7 @@ KdGetOptions(InputOption **options, char
if (strchr(string, '=')) {
tam_key = (strchr(string, '=') - string);
@@ -49,6 +49,3 @@ index d35dcf8..b1068bb 100644
if (!key)
goto out;
---
-1.7.10.4
-
diff --git a/debian/patches/09_EXA-Fall-back-earlier-and-more-thoroughly-from-exaGlyphs.diff b/debian/patches/09_EXA-Fall-back-earlier-and-more-thoroughly-from-exaGlyphs.diff
deleted file mode 100644
index 76fc2b6..0000000
--- a/debian/patches/09_EXA-Fall-back-earlier-and-more-thoroughly-from-exaGlyphs.diff
+++ /dev/null
@@ -1,127 +0,0 @@
-From: Michel Dänzer <michel@daenzer.net>
-Subject: EXA: Fall back earlier and more thoroughly from exaGlyphs. (v2)
-
-Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=47266
-
-[https://bugs.freedesktop.org/attachment.cgi?id=59437, rebased by jcristau]
-
-Index: xorg-server/exa/exa_glyphs.c
-===================================================================
---- xorg-server.orig/exa/exa_glyphs.c
-+++ xorg-server/exa/exa_glyphs.c
-@@ -686,6 +686,7 @@ exaGlyphs(CARD8 op,
- PixmapPtr pMaskPixmap = 0;
- PicturePtr pMask = NULL;
- ScreenPtr pScreen = pDst->pDrawable->pScreen;
-+ ExaScreenPriv(pScreen);
- int width = 0, height = 0;
- int x, y;
- int first_xOff = list->xOff, first_yOff = list->yOff;
-@@ -697,7 +698,6 @@ exaGlyphs(CARD8 op,
- ExaGlyphBuffer buffer;
-
- if (maskFormat) {
-- ExaScreenPriv(pScreen);
- GCPtr pGC;
- xRectangle rect;
-
-@@ -719,22 +719,20 @@ exaGlyphs(CARD8 op,
- maskFormat->depth,
- CREATE_PIXMAP_USAGE_SCRATCH);
- if (!pMaskPixmap)
-- return;
-+ goto fallback;
- component_alpha = NeedsComponent(maskFormat->format);
- pMask = CreatePicture(0, &pMaskPixmap->drawable,
- maskFormat, CPComponentAlpha, &component_alpha,
- serverClient, &error);
-- if (!pMask ||
-- (!component_alpha && pExaScr->info->CheckComposite &&
-- !(*pExaScr->info->CheckComposite) (PictOpAdd, pSrc, NULL, pMask)))
-+ (*pScreen->DestroyPixmap) (pMaskPixmap);
-+ if (!pMask)
-+ goto fallback;
-+
-+ if (!component_alpha && pExaScr->info->CheckComposite &&
-+ !(*pExaScr->info->CheckComposite) (PictOpAdd, pSrc, NULL, pMask))
- {
- PictFormatPtr argbFormat;
-
-- (*pScreen->DestroyPixmap) (pMaskPixmap);
--
-- if (!pMask)
-- return;
--
- /* The driver can't seem to composite to a8, let's try argb (but
- * without component-alpha) */
- FreePicture((pointer) pMask, (XID) 0);
-@@ -748,15 +746,25 @@ exaGlyphs(CARD8 op,
- maskFormat->depth,
- CREATE_PIXMAP_USAGE_SCRATCH);
- if (!pMaskPixmap)
-- return;
-+ goto fallback;
-
- pMask = CreatePicture(0, &pMaskPixmap->drawable, maskFormat, 0, 0,
- serverClient, &error);
-- if (!pMask) {
-- (*pScreen->DestroyPixmap) (pMaskPixmap);
-- return;
-- }
-+ (*pScreen->DestroyPixmap) (pMaskPixmap);
-+ if (!pMask)
-+ goto fallback;
-+ }
-+
-+ if (pExaScr->info->CheckComposite &&
-+ (!(*pExaScr->info->CheckComposite) (PictOpAdd, pSrc, NULL, pMask) ||
-+ (!(*pExaScr->info->CheckComposite) (op, pSrc, pMask, pDst) &&
-+ (op != PictOpOver ||
-+ !(*pExaScr->info->CheckComposite) (PictOpOutReverse, pSrc, pMask, pDst) ||
-+ !(*pExaScr->info->CheckComposite) (PictOpOver, pSrc, pMask, pDst))))) {
-+ FreePicture ((pointer) pMask, (XID) 0);
-+ goto fallback;
- }
-+
- pGC = GetScratchGC(pMaskPixmap->drawable.depth, pScreen);
- ValidateGC(&pMaskPixmap->drawable, pGC);
- rect.x = 0;
-@@ -769,6 +777,13 @@ exaGlyphs(CARD8 op,
- y = -extents.y1;
- }
- else {
-+ if (pExaScr->info->CheckComposite &&
-+ !(*pExaScr->info->CheckComposite) (op, pSrc, NULL, pDst) &&
-+ (op != PictOpOver ||
-+ !(*pExaScr->info->CheckComposite) (PictOpOutReverse, pSrc, NULL, pDst) ||
-+ !(*pExaScr->info->CheckComposite) (PictOpOver, pSrc, NULL, pDst)))
-+ goto fallback;
-+
- x = 0;
- y = 0;
- }
-@@ -834,6 +849,10 @@ exaGlyphs(CARD8 op,
- xSrc + x - first_xOff,
- ySrc + y - first_yOff, 0, 0, x, y, width, height);
- FreePicture((pointer) pMask, (XID) 0);
-- (*pScreen->DestroyPixmap) (pMaskPixmap);
- }
-+
-+ return;
-+
-+fallback:
-+ ExaCheckGlyphs(op, pSrc, pDst, maskFormat, xSrc, ySrc, nlist, list, glyphs);
- }
-Index: xorg-server/exa/exa_render.c
-===================================================================
---- xorg-server.orig/exa/exa_render.c
-+++ xorg-server/exa/exa_render.c
-@@ -878,7 +878,7 @@ exaComposite(CARD8 op,
- Bool saveMaskRepeat = pMask ? pMask->repeat : 0;
- RegionRec region;
-
-- if (pExaScr->swappedOut)
-+ if (pExaScr->fallback_counter || pExaScr->swappedOut)
- goto fallback;
-
- /* Remove repeat in source if useless */
diff --git a/debian/patches/09_EXA-Track-source-mask-pixmaps-more-explicitly-for-Co.diff b/debian/patches/09_EXA-Track-source-mask-pixmaps-more-explicitly-for-Co.diff
new file mode 100644
index 0000000..6fb782a
--- /dev/null
+++ b/debian/patches/09_EXA-Track-source-mask-pixmaps-more-explicitly-for-Co.diff
@@ -0,0 +1,86 @@
+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(-)
+
+Index: xorg-server/exa/exa_priv.h
+===================================================================
+--- xorg-server.orig/exa/exa_priv.h
++++ xorg-server/exa/exa_priv.h
+@@ -207,6 +207,7 @@ typedef struct {
+ RegionRec srcReg;
+ RegionRec maskReg;
+ PixmapPtr srcPix;
++ PixmapPtr maskPix;
+
+ } ExaScreenPrivRec, *ExaScreenPrivPtr;
+
+Index: xorg-server/exa/exa_unaccel.c
+===================================================================
+--- xorg-server.orig/exa/exa_unaccel.c
++++ xorg-server/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);
diff --git a/debian/patches/series b/debian/patches/series
index 4e75993..c89edaf 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -9,4 +9,4 @@
06_Revert-fb-reorder-Bresenham-error-correction-to-avoi.diff
07_Revert-kinput-allocate-enough-space-for-null-charact.diff
08_xfree86_fix_ia64_inx_outx.diff
-09_EXA-Fall-back-earlier-and-more-thoroughly-from-exaGlyphs.diff
+09_EXA-Track-source-mask-pixmaps-more-explicitly-for-Co.diff
Reply to: