summarylogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.SRCINFO2
-rw-r--r--PKGBUILD18
-rw-r--r--damageRegionProcessPending.diff516
3 files changed, 527 insertions, 9 deletions
diff --git a/.SRCINFO b/.SRCINFO
index e70d5318d51b..9b68ebeaf700 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,6 +1,6 @@
pkgbase = xorg-server-dev
pkgver = 1.19.0
- pkgrel = 1
+ pkgrel = 3
url = http://xorg.freedesktop.org
arch = i686
arch = x86_64
diff --git a/PKGBUILD b/PKGBUILD
index b3925828d90b..a9356897be67 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -4,7 +4,7 @@
_pkgbase=xorg-server
pkgname=('xorg-server-dev' 'xorg-server-xephyr-dev' 'xorg-server-xdmx-dev' 'xorg-server-xvfb-dev' 'xorg-server-xnest-dev' 'xorg-server-xwayland-dev' 'xorg-server-common-dev' 'xorg-server-devel-dev')
pkgver=1.19.0 # http://lists.x.org/archives/xorg/2016-November/058437.html
-pkgrel=1
+pkgrel=3 # https://git.archlinux.org/svntogit/packages.git/commit/trunk?h=packages/xorg-server&id=0be9f6c67493ff0f5388262ac675f6db7a2b23a7
arch=('i686' 'x86_64')
license=('custom')
groups=('xorg')
@@ -18,21 +18,23 @@ makedepends=('pixman' 'libx11' 'mesa' 'libgl' 'xf86driproto' 'xcmiscproto' 'xtra
'libxshmfence' 'libunwind' 'xfont2-git' 'wayland-protocols')
source=(${url}/releases/individual/xserver/${_pkgbase}-${pkgver}.tar.bz2{,.sig}
xvfb-run
- xvfb-run.1)
+ xvfb-run.1*
+ damageRegionProcessPending.diff)
validpgpkeys=('7B27A3F1A6E18CD9588B4AE8310180050905E40C'
'C383B778255613DFDB409D91DB221A6900000011'
'DD38563A8A8224537D1F90E45B8A2D50A0ECD0D3')
sha256sums=('149a708b50befc2d5a40b98d45ddd2ebe0beec018e6d0c663c43bad6210e4da3'
'SKIP'
'ff0156309470fc1d378fd2e104338020a884295e285972cc88e250e031cc35b9'
- '2460adccd3362fefd4cdc5f1c70f332d7b578091fb9167bf88b5f91265bbd776')
+ '2460adccd3362fefd4cdc5f1c70f332d7b578091fb9167bf88b5f91265bbd776'
+ 'c8344b94d946005b28ad1e0771c77174afd7288100763ab7bb7c2b50be52f1e0')
-# prepare() {
- # cd "${_pkgbase}-${pkgver}"
+prepare() {
+ cd "${_pkgbase}-${pkgver}"
- # msg2 "Fix glamor failing to initialize with mesa"
- # patch -Np1 -i ../call-eglBindAPI-after-eglInitialize.patch
-# }
+ msg2 "Apply upstream commit to fix some EXA crashes"
+ patch -Np1 -i ../damageRegionProcessPending.diff
+}
build() {
cd "${_pkgbase}-${pkgver}"
diff --git a/damageRegionProcessPending.diff b/damageRegionProcessPending.diff
new file mode 100644
index 000000000000..cf25c76895c6
--- /dev/null
+++ b/damageRegionProcessPending.diff
@@ -0,0 +1,516 @@
+From d6da2086951693e047fdd22b0d21c539ea1bb1e1 Mon Sep 17 00:00:00 2001
+From: Adam Jackson <ajax@redhat.com>
+Date: Mon, 12 Dec 2016 13:08:17 -0500
+Subject: Revert "damage: Make damageRegionProcessPending take a damage not a
+ drawable"
+
+The commit message makes the assertion that the code below damage is not
+allowed to change whether there's a damage monitor for the drawable.
+That turns out not to be the case! exa's mixed code, at least, will
+create and destroy a damage in PrepareAccess. The destroy path can then
+be catastrophic, as damageRegionProcessPending will attempt to
+RegionEmpty memory from the middle of a freed block.
+
+I'd wanted that invariant for performance, but faster isn't worth
+broken, so revert it. I think what exa's doing is reasonable, so the
+better way to improve performance for the unmonitored case is to either
+revisit dynamically wrapping into the GC, or inline damage into dix.
+
+This reverts commit 4e124203f2260daaf54155f4a05fe469733e0b97.
+
+Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1389886
+Signed-off-by: Adam Jackson <ajax@redhat.com>
+(cherry picked from commit 32e632e85894eddc3ace83f16f1e973b1be478fe)
+
+diff --git a/miext/damage/damage.c b/miext/damage/damage.c
+index 17c2abf..d6a3614 100644
+--- a/miext/damage/damage.c
++++ b/miext/damage/damage.c
+@@ -282,8 +282,10 @@ damageRegionAppend(DrawablePtr pDrawable, RegionPtr pRegion, Bool clip,
+ }
+
+ static void
+-damageRegionProcessPending(DamagePtr pDamage)
++damageRegionProcessPending(DrawablePtr pDrawable)
+ {
++ drawableDamage(pDrawable);
++
+ for (; pDamage != NULL; pDamage = pDamage->pNext) {
+ if (pDamage->reportAfter) {
+ /* It's possible that there is only interest in postRendering reporting. */
+@@ -358,7 +360,6 @@ damageCreateGC(GCPtr pGC)
+
+ #define DAMAGE_GC_OP_PROLOGUE(pGC, pDrawable) \
+ damageGCPriv(pGC); \
+- drawableDamage(pDrawable); \
+ const GCFuncs *oldFuncs = pGC->funcs; \
+ unwrap(pGCPriv, pGC, funcs); \
+ unwrap(pGCPriv, pGC, ops); \
+@@ -456,7 +457,7 @@ damageDestroyClip(GCPtr pGC)
+ #define BOX_NOT_EMPTY(box) \
+ (((box.x2 - box.x1) > 0) && ((box.y2 - box.y1) > 0))
+
+-#define checkGCDamage(d,g) (d && \
++#define checkGCDamage(d,g) (getDrawableDamage(d) && \
+ (!g->pCompositeClip ||\
+ RegionNotEmpty(g->pCompositeClip)))
+
+@@ -468,7 +469,8 @@ damageDestroyClip(GCPtr pGC)
+ if(box.y2 > extents->y2) box.y2 = extents->y2; \
+ }
+
+-#define checkPictureDamage(d, p) (d && RegionNotEmpty(p->pCompositeClip))
++#define checkPictureDamage(p) (getDrawableDamage(p->pDrawable) && \
++ RegionNotEmpty(p->pCompositeClip))
+
+ static void
+ damageComposite(CARD8 op,
+@@ -485,9 +487,8 @@ damageComposite(CARD8 op,
+ PictureScreenPtr ps = GetPictureScreen(pScreen);
+
+ damageScrPriv(pScreen);
+- drawableDamage(pDst->pDrawable);
+
+- if (checkPictureDamage(pDamage, pDst)) {
++ if (checkPictureDamage(pDst)) {
+ BoxRec box;
+
+ box.x1 = xDst + pDst->pDrawable->x;
+@@ -504,7 +505,7 @@ damageComposite(CARD8 op,
+ pMask,
+ pDst,
+ xSrc, ySrc, xMask, yMask, xDst, yDst, width, height);
+- damageRegionProcessPending(pDamage);
++ damageRegionProcessPending(pDst->pDrawable);
+ wrap(pScrPriv, ps, Composite, damageComposite);
+ }
+
+@@ -520,9 +521,8 @@ damageGlyphs(CARD8 op,
+ PictureScreenPtr ps = GetPictureScreen(pScreen);
+
+ damageScrPriv(pScreen);
+- drawableDamage(pDst->pDrawable);
+
+- if (checkPictureDamage(pDamage, pDst)) {
++ if (checkPictureDamage(pDst)) {
+ int nlistTmp = nlist;
+ GlyphListPtr listTmp = list;
+ GlyphPtr *glyphsTmp = glyphs;
+@@ -567,7 +567,7 @@ damageGlyphs(CARD8 op,
+ }
+ unwrap(pScrPriv, ps, Glyphs);
+ (*ps->Glyphs) (op, pSrc, pDst, maskFormat, xSrc, ySrc, nlist, list, glyphs);
+- damageRegionProcessPending(pDamage);
++ damageRegionProcessPending(pDst->pDrawable);
+ wrap(pScrPriv, ps, Glyphs, damageGlyphs);
+ }
+
+@@ -579,9 +579,8 @@ damageAddTraps(PicturePtr pPicture,
+ PictureScreenPtr ps = GetPictureScreen(pScreen);
+
+ damageScrPriv(pScreen);
+- drawableDamage(pPicture->pDrawable);
+
+- if (checkPictureDamage(pDamage, pPicture)) {
++ if (checkPictureDamage(pPicture)) {
+ BoxRec box;
+ int i;
+ int x, y;
+@@ -616,7 +615,7 @@ damageAddTraps(PicturePtr pPicture,
+ }
+ unwrap(pScrPriv, ps, AddTraps);
+ (*ps->AddTraps) (pPicture, x_off, y_off, ntrap, traps);
+- damageRegionProcessPending(pDamage);
++ damageRegionProcessPending(pPicture->pDrawable);
+ wrap(pScrPriv, ps, AddTraps, damageAddTraps);
+ }
+
+@@ -628,7 +627,7 @@ damageFillSpans(DrawablePtr pDrawable,
+ {
+ DAMAGE_GC_OP_PROLOGUE(pGC, pDrawable);
+
+- if (npt && checkGCDamage(pDamage, pGC)) {
++ if (npt && checkGCDamage(pDrawable, pGC)) {
+ int nptTmp = npt;
+ DDXPointPtr pptTmp = ppt;
+ int *pwidthTmp = pwidth;
+@@ -664,7 +663,7 @@ damageFillSpans(DrawablePtr pDrawable,
+
+ (*pGC->ops->FillSpans) (pDrawable, pGC, npt, ppt, pwidth, fSorted);
+
+- damageRegionProcessPending(pDamage);
++ damageRegionProcessPending(pDrawable);
+ DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
+ }
+
+@@ -676,7 +675,7 @@ damageSetSpans(DrawablePtr pDrawable,
+ {
+ DAMAGE_GC_OP_PROLOGUE(pGC, pDrawable);
+
+- if (npt && checkGCDamage(pDamage, pGC)) {
++ if (npt && checkGCDamage(pDrawable, pGC)) {
+ DDXPointPtr pptTmp = ppt;
+ int *pwidthTmp = pwidth;
+ int nptTmp = npt;
+@@ -710,7 +709,7 @@ damageSetSpans(DrawablePtr pDrawable,
+ damageDamageBox(pDrawable, &box, pGC->subWindowMode);
+ }
+ (*pGC->ops->SetSpans) (pDrawable, pGC, pcharsrc, ppt, pwidth, npt, fSorted);
+- damageRegionProcessPending(pDamage);
++ damageRegionProcessPending(pDrawable);
+ DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
+ }
+
+@@ -722,7 +721,7 @@ damagePutImage(DrawablePtr pDrawable,
+ int y, int w, int h, int leftPad, int format, char *pImage)
+ {
+ DAMAGE_GC_OP_PROLOGUE(pGC, pDrawable);
+- if (checkGCDamage(pDamage, pGC)) {
++ if (checkGCDamage(pDrawable, pGC)) {
+ BoxRec box;
+
+ box.x1 = x + pDrawable->x;
+@@ -736,7 +735,7 @@ damagePutImage(DrawablePtr pDrawable,
+ }
+ (*pGC->ops->PutImage) (pDrawable, pGC, depth, x, y, w, h,
+ leftPad, format, pImage);
+- damageRegionProcessPending(pDamage);
++ damageRegionProcessPending(pDrawable);
+ DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
+ }
+
+@@ -750,7 +749,7 @@ damageCopyArea(DrawablePtr pSrc,
+
+ DAMAGE_GC_OP_PROLOGUE(pGC, pDst);
+
+- if (checkGCDamage(pDamage, pGC)) {
++ if (checkGCDamage(pDst, pGC)) {
+ BoxRec box;
+
+ box.x1 = dstx + pDst->x;
+@@ -765,7 +764,7 @@ damageCopyArea(DrawablePtr pSrc,
+
+ ret = (*pGC->ops->CopyArea) (pSrc, pDst,
+ pGC, srcx, srcy, width, height, dstx, dsty);
+- damageRegionProcessPending(pDamage);
++ damageRegionProcessPending(pDst);
+ DAMAGE_GC_OP_EPILOGUE(pGC, pDst);
+ return ret;
+ }
+@@ -783,7 +782,7 @@ damageCopyPlane(DrawablePtr pSrc,
+
+ DAMAGE_GC_OP_PROLOGUE(pGC, pDst);
+
+- if (checkGCDamage(pDamage, pGC)) {
++ if (checkGCDamage(pDst, pGC)) {
+ BoxRec box;
+
+ box.x1 = dstx + pDst->x;
+@@ -799,7 +798,7 @@ damageCopyPlane(DrawablePtr pSrc,
+ ret = (*pGC->ops->CopyPlane) (pSrc, pDst,
+ pGC, srcx, srcy, width, height, dstx, dsty,
+ bitPlane);
+- damageRegionProcessPending(pDamage);
++ damageRegionProcessPending(pDst);
+ DAMAGE_GC_OP_EPILOGUE(pGC, pDst);
+ return ret;
+ }
+@@ -810,7 +809,7 @@ damagePolyPoint(DrawablePtr pDrawable,
+ {
+ DAMAGE_GC_OP_PROLOGUE(pGC, pDrawable);
+
+- if (npt && checkGCDamage(pDamage, pGC)) {
++ if (npt && checkGCDamage(pDrawable, pGC)) {
+ BoxRec box;
+ int nptTmp = npt;
+ xPoint *pptTmp = ppt;
+@@ -840,7 +839,7 @@ damagePolyPoint(DrawablePtr pDrawable,
+ damageDamageBox(pDrawable, &box, pGC->subWindowMode);
+ }
+ (*pGC->ops->PolyPoint) (pDrawable, pGC, mode, npt, ppt);
+- damageRegionProcessPending(pDamage);
++ damageRegionProcessPending(pDrawable);
+ DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
+ }
+
+@@ -850,7 +849,7 @@ damagePolylines(DrawablePtr pDrawable,
+ {
+ DAMAGE_GC_OP_PROLOGUE(pGC, pDrawable);
+
+- if (npt && checkGCDamage(pDamage, pGC)) {
++ if (npt && checkGCDamage(pDrawable, pGC)) {
+ int nptTmp = npt;
+ DDXPointPtr pptTmp = ppt;
+ BoxRec box;
+@@ -913,7 +912,7 @@ damagePolylines(DrawablePtr pDrawable,
+ damageDamageBox(pDrawable, &box, pGC->subWindowMode);
+ }
+ (*pGC->ops->Polylines) (pDrawable, pGC, mode, npt, ppt);
+- damageRegionProcessPending(pDamage);
++ damageRegionProcessPending(pDrawable);
+ DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
+ }
+
+@@ -922,7 +921,7 @@ damagePolySegment(DrawablePtr pDrawable, GCPtr pGC, int nSeg, xSegment * pSeg)
+ {
+ DAMAGE_GC_OP_PROLOGUE(pGC, pDrawable);
+
+- if (nSeg && checkGCDamage(pDamage, pGC)) {
++ if (nSeg && checkGCDamage(pDrawable, pGC)) {
+ BoxRec box;
+ int extra = pGC->lineWidth;
+ int nsegTmp = nSeg;
+@@ -992,7 +991,7 @@ damagePolySegment(DrawablePtr pDrawable, GCPtr pGC, int nSeg, xSegment * pSeg)
+ damageDamageBox(pDrawable, &box, pGC->subWindowMode);
+ }
+ (*pGC->ops->PolySegment) (pDrawable, pGC, nSeg, pSeg);
+- damageRegionProcessPending(pDamage);
++ damageRegionProcessPending(pDrawable);
+ DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
+ }
+
+@@ -1002,7 +1001,7 @@ damagePolyRectangle(DrawablePtr pDrawable,
+ {
+ DAMAGE_GC_OP_PROLOGUE(pGC, pDrawable);
+
+- if (nRects && checkGCDamage(pDamage, pGC)) {
++ if (nRects && checkGCDamage(pDrawable, pGC)) {
+ BoxRec box;
+ int offset1, offset2, offset3;
+ int nRectsTmp = nRects;
+@@ -1051,7 +1050,7 @@ damagePolyRectangle(DrawablePtr pDrawable,
+ }
+ }
+ (*pGC->ops->PolyRectangle) (pDrawable, pGC, nRects, pRects);
+- damageRegionProcessPending(pDamage);
++ damageRegionProcessPending(pDrawable);
+ DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
+ }
+
+@@ -1060,7 +1059,7 @@ damagePolyArc(DrawablePtr pDrawable, GCPtr pGC, int nArcs, xArc * pArcs)
+ {
+ DAMAGE_GC_OP_PROLOGUE(pGC, pDrawable);
+
+- if (nArcs && checkGCDamage(pDamage, pGC)) {
++ if (nArcs && checkGCDamage(pDrawable, pGC)) {
+ int extra = pGC->lineWidth >> 1;
+ BoxRec box;
+ int nArcsTmp = nArcs;
+@@ -1098,7 +1097,7 @@ damagePolyArc(DrawablePtr pDrawable, GCPtr pGC, int nArcs, xArc * pArcs)
+ damageDamageBox(pDrawable, &box, pGC->subWindowMode);
+ }
+ (*pGC->ops->PolyArc) (pDrawable, pGC, nArcs, pArcs);
+- damageRegionProcessPending(pDamage);
++ damageRegionProcessPending(pDrawable);
+ DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
+ }
+
+@@ -1108,7 +1107,7 @@ damageFillPolygon(DrawablePtr pDrawable,
+ {
+ DAMAGE_GC_OP_PROLOGUE(pGC, pDrawable);
+
+- if (npt > 2 && checkGCDamage(pDamage, pGC)) {
++ if (npt > 2 && checkGCDamage(pDrawable, pGC)) {
+ DDXPointPtr pptTmp = ppt;
+ int nptTmp = npt;
+ BoxRec box;
+@@ -1157,7 +1156,7 @@ damageFillPolygon(DrawablePtr pDrawable,
+ }
+
+ (*pGC->ops->FillPolygon) (pDrawable, pGC, shape, mode, npt, ppt);
+- damageRegionProcessPending(pDamage);
++ damageRegionProcessPending(pDrawable);
+ DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
+ }
+
+@@ -1166,7 +1165,7 @@ damagePolyFillRect(DrawablePtr pDrawable,
+ GCPtr pGC, int nRects, xRectangle *pRects)
+ {
+ DAMAGE_GC_OP_PROLOGUE(pGC, pDrawable);
+- if (nRects && checkGCDamage(pDamage, pGC)) {
++ if (nRects && checkGCDamage(pDrawable, pGC)) {
+ BoxRec box;
+ xRectangle *pRectsTmp = pRects;
+ int nRectsTmp = nRects;
+@@ -1193,7 +1192,7 @@ damagePolyFillRect(DrawablePtr pDrawable,
+ damageDamageBox(pDrawable, &box, pGC->subWindowMode);
+ }
+ (*pGC->ops->PolyFillRect) (pDrawable, pGC, nRects, pRects);
+- damageRegionProcessPending(pDamage);
++ damageRegionProcessPending(pDrawable);
+ DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
+ }
+
+@@ -1202,7 +1201,7 @@ damagePolyFillArc(DrawablePtr pDrawable, GCPtr pGC, int nArcs, xArc * pArcs)
+ {
+ DAMAGE_GC_OP_PROLOGUE(pGC, pDrawable);
+
+- if (nArcs && checkGCDamage(pDamage, pGC)) {
++ if (nArcs && checkGCDamage(pDrawable, pGC)) {
+ BoxRec box;
+ int nArcsTmp = nArcs;
+ xArc *pArcsTmp = pArcs;
+@@ -1229,7 +1228,7 @@ damagePolyFillArc(DrawablePtr pDrawable, GCPtr pGC, int nArcs, xArc * pArcs)
+ damageDamageBox(pDrawable, &box, pGC->subWindowMode);
+ }
+ (*pGC->ops->PolyFillArc) (pDrawable, pGC, nArcs, pArcs);
+- damageRegionProcessPending(pDamage);
++ damageRegionProcessPending(pDrawable);
+ DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
+ }
+
+@@ -1278,9 +1277,12 @@ damageDamageChars(DrawablePtr pDrawable,
+ #define TT_IMAGE16 3
+
+ static void
+-damageText(DrawablePtr pDrawable, GCPtr pGC, int x, int y, unsigned long count,
+- char *chars, FontEncoding fontEncoding, DamagePtr pDamage,
+- Bool textType)
++damageText(DrawablePtr pDrawable,
++ GCPtr pGC,
++ int x,
++ int y,
++ unsigned long count,
++ char *chars, FontEncoding fontEncoding, Bool textType)
+ {
+ CharInfoPtr *charinfo;
+ unsigned long i;
+@@ -1289,7 +1291,7 @@ damageText(DrawablePtr pDrawable, GCPtr pGC, int x, int y, unsigned long count,
+
+ imageblt = (textType == TT_IMAGE8) || (textType == TT_IMAGE16);
+
+- if (!pDamage)
++ if (!checkGCDamage(pDrawable, pGC))
+ return;
+
+ charinfo = xallocarray(count, sizeof(CharInfoPtr));
+@@ -1314,9 +1316,9 @@ damagePolyText8(DrawablePtr pDrawable,
+ {
+ DAMAGE_GC_OP_PROLOGUE(pGC, pDrawable);
+ damageText(pDrawable, pGC, x, y, (unsigned long) count, chars, Linear8Bit,
+- pDamage, TT_POLY8);
++ TT_POLY8);
+ x = (*pGC->ops->PolyText8) (pDrawable, pGC, x, y, count, chars);
+- damageRegionProcessPending(pDamage);
++ damageRegionProcessPending(pDrawable);
+ DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
+ return x;
+ }
+@@ -1328,9 +1330,9 @@ damagePolyText16(DrawablePtr pDrawable,
+ DAMAGE_GC_OP_PROLOGUE(pGC, pDrawable);
+ damageText(pDrawable, pGC, x, y, (unsigned long) count, (char *) chars,
+ FONTLASTROW(pGC->font) == 0 ? Linear16Bit : TwoD16Bit,
+- pDamage, TT_POLY16);
++ TT_POLY16);
+ x = (*pGC->ops->PolyText16) (pDrawable, pGC, x, y, count, chars);
+- damageRegionProcessPending(pDamage);
++ damageRegionProcessPending(pDrawable);
+ DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
+ return x;
+ }
+@@ -1341,9 +1343,9 @@ damageImageText8(DrawablePtr pDrawable,
+ {
+ DAMAGE_GC_OP_PROLOGUE(pGC, pDrawable);
+ damageText(pDrawable, pGC, x, y, (unsigned long) count, chars, Linear8Bit,
+- pDamage, TT_IMAGE8);
++ TT_IMAGE8);
+ (*pGC->ops->ImageText8) (pDrawable, pGC, x, y, count, chars);
+- damageRegionProcessPending(pDamage);
++ damageRegionProcessPending(pDrawable);
+ DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
+ }
+
+@@ -1354,9 +1356,9 @@ damageImageText16(DrawablePtr pDrawable,
+ DAMAGE_GC_OP_PROLOGUE(pGC, pDrawable);
+ damageText(pDrawable, pGC, x, y, (unsigned long) count, (char *) chars,
+ FONTLASTROW(pGC->font) == 0 ? Linear16Bit : TwoD16Bit,
+- pDamage, TT_IMAGE16);
++ TT_IMAGE16);
+ (*pGC->ops->ImageText16) (pDrawable, pGC, x, y, count, chars);
+- damageRegionProcessPending(pDamage);
++ damageRegionProcessPending(pDrawable);
+ DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
+ }
+
+@@ -1371,7 +1373,7 @@ damageImageGlyphBlt(DrawablePtr pDrawable,
+ damageDamageChars(pDrawable, pGC->font, x + pDrawable->x, y + pDrawable->y,
+ nglyph, ppci, TRUE, pGC->subWindowMode);
+ (*pGC->ops->ImageGlyphBlt) (pDrawable, pGC, x, y, nglyph, ppci, pglyphBase);
+- damageRegionProcessPending(pDamage);
++ damageRegionProcessPending(pDrawable);
+ DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
+ }
+
+@@ -1386,7 +1388,7 @@ damagePolyGlyphBlt(DrawablePtr pDrawable,
+ damageDamageChars(pDrawable, pGC->font, x + pDrawable->x, y + pDrawable->y,
+ nglyph, ppci, FALSE, pGC->subWindowMode);
+ (*pGC->ops->PolyGlyphBlt) (pDrawable, pGC, x, y, nglyph, ppci, pglyphBase);
+- damageRegionProcessPending(pDamage);
++ damageRegionProcessPending(pDrawable);
+ DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
+ }
+
+@@ -1396,7 +1398,7 @@ damagePushPixels(GCPtr pGC,
+ DrawablePtr pDrawable, int dx, int dy, int xOrg, int yOrg)
+ {
+ DAMAGE_GC_OP_PROLOGUE(pGC, pDrawable);
+- if (checkGCDamage(pDamage, pGC)) {
++ if (checkGCDamage(pDrawable, pGC)) {
+ BoxRec box;
+
+ box.x1 = xOrg;
+@@ -1415,7 +1417,7 @@ damagePushPixels(GCPtr pGC,
+ damageDamageBox(pDrawable, &box, pGC->subWindowMode);
+ }
+ (*pGC->ops->PushPixels) (pGC, pBitMap, pDrawable, dx, dy, xOrg, yOrg);
+- damageRegionProcessPending(pDamage);
++ damageRegionProcessPending(pDrawable);
+ DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
+ }
+
+@@ -1480,7 +1482,6 @@ damageCopyWindow(WindowPtr pWindow, DDXPointRec ptOldOrg, RegionPtr prgnSrc)
+ ScreenPtr pScreen = pWindow->drawable.pScreen;
+
+ damageScrPriv(pScreen);
+- drawableDamage(&pWindow->drawable);
+
+ if (getWindowDamage(pWindow)) {
+ int dx = pWindow->drawable.x - ptOldOrg.x;
+@@ -1496,7 +1497,7 @@ damageCopyWindow(WindowPtr pWindow, DDXPointRec ptOldOrg, RegionPtr prgnSrc)
+ }
+ unwrap(pScrPriv, pScreen, CopyWindow);
+ (*pScreen->CopyWindow) (pWindow, ptOldOrg, prgnSrc);
+- damageRegionProcessPending(pDamage);
++ damageRegionProcessPending(&pWindow->drawable);
+ wrap(pScrPriv, pScreen, CopyWindow, damageCopyWindow);
+ }
+
+@@ -1870,22 +1871,20 @@ DamageRegionAppend(DrawablePtr pDrawable, RegionPtr pRegion)
+ void
+ DamageRegionProcessPending(DrawablePtr pDrawable)
+ {
+- drawableDamage(pDrawable);
+- damageRegionProcessPending(pDamage);
++ damageRegionProcessPending(pDrawable);
+ }
+
+ /* This call is very odd, i'm leaving it intact for API sake, but please don't use it. */
+ void
+ DamageDamageRegion(DrawablePtr pDrawable, RegionPtr pRegion)
+ {
+- drawableDamage(pDrawable);
+ damageRegionAppend(pDrawable, pRegion, FALSE, -1);
+
+ /* Go back and report this damage for DamagePtrs with reportAfter set, since
+ * this call isn't part of an in-progress drawing op in the call chain and
+ * the DDX probably just wants to know about it right away.
+ */
+- damageRegionProcessPending(pDamage);
++ damageRegionProcessPending(pDrawable);
+ }
+
+ void
+--
+cgit v0.10.2
+
+