diff options
-rw-r--r-- | abs/core/xorg-server/0001-dix-fix-zaphod-screen-scrossing-54654.patch | 42 | ||||
-rw-r--r-- | abs/core/xorg-server/PKGBUILD | 34 | ||||
-rw-r--r-- | abs/core/xorg-server/__changelog | 2 | ||||
-rw-r--r-- | abs/core/xorg-server/git-fixes.patch | 643 | ||||
-rw-r--r-- | abs/core/xorg-server/use-pixman-glyph-cache.patch | 270 |
5 files changed, 58 insertions, 933 deletions
diff --git a/abs/core/xorg-server/0001-dix-fix-zaphod-screen-scrossing-54654.patch b/abs/core/xorg-server/0001-dix-fix-zaphod-screen-scrossing-54654.patch new file mode 100644 index 0000000..e3e42d4 --- /dev/null +++ b/abs/core/xorg-server/0001-dix-fix-zaphod-screen-scrossing-54654.patch @@ -0,0 +1,42 @@ +From 29d84d5a7ca4cc12cce47de9313adeb8554fb894 Mon Sep 17 00:00:00 2001 +From: Peter Hutterer <peter.hutterer@who-t.net> +Date: Thu, 18 Oct 2012 15:11:31 +1000 +Subject: [PATCH] dix: fix zaphod screen scrossing (#54654) + +POINTER_SCREEN coordinates are screen-relative. For a Zaphod setup, the +coordinates after a screen crossing are already relative to the new screen's +origin. Add that offset to the coordinates before re-setting. + +regression introduced by +commit bafbd99080be49a17be97d2cc758fbe623369945 +Author: Peter Hutterer <peter.hutterer@who-t.net> +Date: Wed Aug 8 11:34:32 2012 +1000 + + dix: work around scaling issues during WarpPointer (#53037) + +X.Org Bug 54654 <http://bugs.freedesktop.org/show_bug.cgi?id=54654> + +Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> +--- + dix/getevents.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/dix/getevents.c b/dix/getevents.c +index 71d83c4..8b4379d 100644 +--- a/dix/getevents.c ++++ b/dix/getevents.c +@@ -1400,8 +1400,9 @@ fill_pointer_events(InternalEvent *events, DeviceIntPtr pDev, int type, + coordinates were. + */ + if (flags & POINTER_SCREEN) { +- screenx = sx; +- screeny = sy; ++ scr = miPointerGetScreen(pDev); ++ screenx = sx + scr->x; ++ screeny = sy + scr->y; + } + + scr = positionSprite(pDev, (flags & POINTER_ABSOLUTE) ? Absolute : Relative, +-- +1.7.11.7 + diff --git a/abs/core/xorg-server/PKGBUILD b/abs/core/xorg-server/PKGBUILD index c42748b..3b6fee0 100644 --- a/abs/core/xorg-server/PKGBUILD +++ b/abs/core/xorg-server/PKGBUILD @@ -1,10 +1,10 @@ -# $Id: PKGBUILD 171979 2012-11-25 17:50:59Z andyrtr $ +# $Id: PKGBUILD 169327 2012-10-19 14:00:03Z andyrtr $ # Maintainer: Jan de Groot <jgc@archlinux.org> pkgbase=xorg-server pkgname=('xorg-server' 'xorg-server-xephyr' 'xorg-server-xdmx' 'xorg-server-xvfb' 'xorg-server-xnest' 'xorg-server-common' 'xorg-server-devel') -pkgver=1.13.0.901 -pkgrel=1 +pkgver=1.13.0 +pkgrel=3 arch=('i686' 'x86_64') license=('custom') url="http://xorg.freedesktop.org" @@ -19,31 +19,27 @@ source=(${url}/releases/individual/xserver/${pkgbase}-${pkgver}.tar.bz2 xvfb-run xvfb-run.1 10-quirks.conf - #git-fixes.patch - use-pixman-glyph-cache.patch) -sha256sums=('64a50d6ca8264d8e32db4ebeeaf4df3b37ef447c7eef37e9a377c983733596f5' + 0001-dix-fix-zaphod-screen-scrossing-54654.patch) +sha256sums=('548b91cb01087ad4f892428e7ac4955251cf12393e86c70420436b33848ef28a' '66e25f76a7496c429e0aff4b0670f168719bb0ceaeb88c6f2272f2bf3ed21162' 'd027776fac1f7675b0a9ee817502290b1c45f9c09b0f0a6bb058c35f92361e84' 'ff0156309470fc1d378fd2e104338020a884295e285972cc88e250e031cc35b9' '2460adccd3362fefd4cdc5f1c70f332d7b578091fb9167bf88b5f91265bbd776' '94612f5c0d34a3b7152915c2e285c7b462e9d8e38d3539bd551a339498eac166' - '7c1dacd30c46b01424c7c75974285cd348dafd0327eb3f211cbe446ad90dd308') + '23861814b4283ca3fe43aae6e88ee82bcbae5713bf88eabeaef7beb94efe9707') build() { cd "${srcdir}/${pkgbase}-${pkgver}" - # Apply upstream fixes from server-1.13 branch -# patch -Np1 -i "${srcdir}/git-fixes.patch" - - # Use pixman 0.28.0 glyph cache - backported from git master - patch -Np1 -i "${srcdir}/use-pixman-glyph-cache.patch" - # Use nouveau/nv/nvidia drivers for nvidia devices patch -Np1 -i "${srcdir}/autoconfig-nvidia.patch" # Use unofficial imedia SiS driver for supported SiS devices patch -Np0 -i "${srcdir}/autoconfig-sis.patch" + # https://bugs.archlinux.org/task/31959 / https://bugs.freedesktop.org/show_bug.cgi?id=54654 + patch -Np1 -i ${srcdir}/0001-dix-fix-zaphod-screen-scrossing-54654.patch + autoreconf -fi ./configure --prefix=/usr \ --enable-ipv6 \ @@ -101,7 +97,7 @@ package_xorg-server-common() { package_xorg-server() { pkgdesc="Xorg X server" - depends=(libxdmcp libxfont libpciaccess libdrm 'pixman>=0.28.0' libgcrypt libxau xorg-server-common xf86-input-evdev) + depends=(libxdmcp libxfont libpciaccess libdrm pixman libgcrypt libxau xorg-server-common xf86-input-evdev) backup=('etc/X11/xorg.conf.d/10-evdev.conf' 'etc/X11/xorg.conf.d/10-quirks.conf') # see xorg-server-1.13.0/hw/xfree86/common/xf86Module.h for ABI versions - we provide major numbers that drivers can depend on provides=('X-ABI-VIDEODRV_VERSION=13' 'X-ABI-XINPUT_VERSION=18' 'X-ABI-EXTENSION_VERSION=7.0' 'x-server') @@ -136,7 +132,7 @@ package_xorg-server() { package_xorg-server-xephyr() { pkgdesc="A nested X server that runs as an X application" - depends=(libxfont libgl libgcrypt libxv 'pixman>=0.28.0' xorg-server-common) + depends=(libxfont libgl libgcrypt libxv pixman xorg-server-common) cd "${srcdir}/${pkgbase}-${pkgver}/hw/kdrive" make DESTDIR="${pkgdir}" install @@ -147,7 +143,7 @@ package_xorg-server-xephyr() { package_xorg-server-xvfb() { pkgdesc="Virtual framebuffer X server" - depends=(libxfont libxdmcp libxau libgcrypt 'pixman>=0.28.0' xorg-server-common) + depends=(libxfont libxdmcp libxau libgcrypt pixman xorg-server-common) cd "${srcdir}/${pkgbase}-${pkgver}/hw/vfb" make DESTDIR="${pkgdir}" install @@ -161,7 +157,7 @@ package_xorg-server-xvfb() { package_xorg-server-xnest() { pkgdesc="A nested X server that runs as an X application" - depends=(libxfont libxext libgcrypt 'pixman>=0.28.0' xorg-server-common) + depends=(libxfont libxext libgcrypt pixman xorg-server-common) cd "${srcdir}/${pkgbase}-${pkgver}/hw/xnest" make DESTDIR="${pkgdir}" install @@ -172,7 +168,7 @@ package_xorg-server-xnest() { package_xorg-server-xdmx() { pkgdesc="Distributed Multihead X Server and utilities" - depends=(libxfont libxi libgcrypt libxaw libxrender libdmx libxfixes 'pixman>=0.28.0' xorg-server-common) + depends=(libxfont libxi libgcrypt libxaw libxrender libdmx libxfixes pixman xorg-server-common) cd "${srcdir}/${pkgbase}-${pkgver}/hw/dmx" make DESTDIR="${pkgdir}" install @@ -187,8 +183,6 @@ package_xorg-server-devel() { xproto randrproto renderproto xextproto inputproto kbproto fontsproto pixman videoproto xf86driproto glproto mesa dri2proto xineramaproto libpciaccess - # see FS#32146 - resourceproto scrnsaverproto # not technically required but almost every Xorg pkg needs it to build xorg-util-macros) diff --git a/abs/core/xorg-server/__changelog b/abs/core/xorg-server/__changelog new file mode 100644 index 0000000..a0d578e --- /dev/null +++ b/abs/core/xorg-server/__changelog @@ -0,0 +1,2 @@ +placeholder to prevent auto update. +pixman cache bug diff --git a/abs/core/xorg-server/git-fixes.patch b/abs/core/xorg-server/git-fixes.patch deleted file mode 100644 index d1817c0..0000000 --- a/abs/core/xorg-server/git-fixes.patch +++ /dev/null @@ -1,643 +0,0 @@ -diff --git a/Xi/exevents.c b/Xi/exevents.c -index 494d07e..106da3a 100644 ---- a/Xi/exevents.c -+++ b/Xi/exevents.c -@@ -949,8 +949,6 @@ UpdateDeviceState(DeviceIntPtr device, DeviceEvent *event) - - if (!(event->flags & TOUCH_POINTER_EMULATED)) - return DONT_PROCESS; -- if (!(event->flags & TOUCH_END)) -- return DONT_PROCESS; - - DecreaseButtonCount(device, key, &t->buttonsDown, &t->motionMask, - &t->state); -@@ -1561,6 +1559,7 @@ ProcessTouchEvent(InternalEvent *ev, DeviceIntPtr dev) - uint32_t touchid; - int type = ev->any.type; - int emulate_pointer = ! !(ev->device_event.flags & TOUCH_POINTER_EMULATED); -+ DeviceIntPtr kbd; - - if (!t) - return; -@@ -1570,9 +1569,6 @@ ProcessTouchEvent(InternalEvent *ev, DeviceIntPtr dev) - else - touchid = ev->device_event.touchid; - -- if (emulate_pointer) -- UpdateDeviceState(dev, &ev->device_event); -- - if (type == ET_TouchBegin) { - ti = TouchBeginTouch(dev, ev->device_event.sourceid, touchid, - emulate_pointer); -@@ -1619,9 +1615,14 @@ ProcessTouchEvent(InternalEvent *ev, DeviceIntPtr dev) - * events which _only_ emulate motion just work normally */ - if (emulate_pointer && ev->any.type != ET_TouchUpdate) - DeliverEmulatedMotionEvent(dev, ti, ev); -+ - if (emulate_pointer && IsMaster(dev)) - CheckMotion(&ev->device_event, dev); - -+ kbd = GetMaster(dev, KEYBOARD_OR_FLOAT); -+ event_set_state(NULL, kbd, &ev->device_event); -+ ev->device_event.corestate = event_get_corestate(NULL, kbd); -+ - /* Make sure we have a valid window trace for event delivery; must be - * called after event type mutation. Touch end events are always processed - * in order to end touch records. */ -@@ -1643,6 +1644,9 @@ ProcessTouchEvent(InternalEvent *ev, DeviceIntPtr dev) - if (ev->any.type == ET_TouchEnd) - TouchEndTouch(dev, ti); - } -+ -+ if (emulate_pointer) -+ UpdateDeviceState(dev, &ev->device_event); - } - - /** -@@ -1864,6 +1868,11 @@ DeliverTouchEndEvent(DeviceIntPtr dev, TouchPointInfoPtr ti, InternalEvent *ev, - goto out; - } - -+ if (listener->state == LISTENER_AWAITING_BEGIN) { -+ listener->state = LISTENER_HAS_END; -+ goto out; -+ } -+ - /* Event in response to reject */ - if (ev->device_event.flags & TOUCH_REJECT) { - if (listener->state != LISTENER_HAS_END) -diff --git a/Xi/xiselectev.c b/Xi/xiselectev.c -index 0e45cb8..ab1b624 100644 ---- a/Xi/xiselectev.c -+++ b/Xi/xiselectev.c -@@ -180,8 +180,13 @@ ProcXISelectEvents(ClientPtr client) - if (CLIENT_ID(iclient->resource) == client->index) - continue; - -- dixLookupDevice(&tmp, evmask->deviceid, serverClient, -- DixReadAccess); -+ if (evmask->deviceid == XIAllDevices) -+ tmp = inputInfo.all_devices; -+ else if (evmask->deviceid == XIAllMasterDevices) -+ tmp = inputInfo.all_master_devices; -+ else -+ dixLookupDevice(&tmp, evmask->deviceid, serverClient, -+ DixReadAccess); - if (!tmp) - return BadImplementation; /* this shouldn't happen */ - -diff --git a/config/udev.c b/config/udev.c -index c2d00bb..454838f 100644 ---- a/config/udev.c -+++ b/config/udev.c -@@ -300,9 +300,15 @@ wakeup_handler(pointer data, int err, pointer read_mask) - return; - action = udev_device_get_action(udev_device); - if (action) { -- if (!strcmp(action, "add") || !strcmp(action, "change")) { -+ if (!strcmp(action, "add")) { - device_removed(udev_device); - device_added(udev_device); -+ } else if (!strcmp(action, "change")) { -+ /* ignore change for the drm devices */ -+ if (strcmp(udev_device_get_subsystem(udev_device), "drm")) { -+ device_removed(udev_device); -+ device_added(udev_device); -+ } - } - else if (!strcmp(action, "remove")) - device_removed(udev_device); -diff --git a/dix/devices.c b/dix/devices.c -index 9cf04ed..fd4916a 100644 ---- a/dix/devices.c -+++ b/dix/devices.c -@@ -306,6 +306,9 @@ AddInputDevice(ClientPtr client, DeviceProc deviceProc, Bool autoStart) - /* unity matrix */ - memset(transform, 0, sizeof(transform)); - transform[0] = transform[4] = transform[8] = 1.0f; -+ dev->transform.m[0][0] = 1.0; -+ dev->transform.m[1][1] = 1.0; -+ dev->transform.m[2][2] = 1.0; - - XIChangeDeviceProperty(dev, XIGetKnownProperty(XI_PROP_TRANSFORM), - XIGetKnownProperty(XATOM_FLOAT), 32, -@@ -440,6 +443,7 @@ DisableDevice(DeviceIntPtr dev, BOOL sendevent) - if (*prev != dev) - return FALSE; - -+ TouchEndPhysicallyActiveTouches(dev); - ReleaseButtonsAndKeys(dev); - SyncRemoveDeviceIdleTime(dev->idle_counter); - dev->idle_counter = NULL; -diff --git a/dix/events.c b/dix/events.c -index 3b40446..ddb5b34 100644 ---- a/dix/events.c -+++ b/dix/events.c -@@ -1555,11 +1555,13 @@ ActivateKeyboardGrab(DeviceIntPtr keybd, GrabPtr grab, TimeStamp time, - WindowPtr oldWin; - - /* slave devices need to float for the duration of the grab. */ -- if (grab->grabtype == XI2 && -+ if (grab->grabtype == XI2 && keybd->enabled && - !(passive & ImplicitGrabMask) && !IsMaster(keybd)) - DetachFromMaster(keybd); - -- if (grabinfo->grab) -+ if (!keybd->enabled) -+ oldWin = NULL; -+ else if (grabinfo->grab) - oldWin = grabinfo->grab->window; - else if (keybd->focus) - oldWin = keybd->focus->win; -@@ -1569,7 +1571,8 @@ ActivateKeyboardGrab(DeviceIntPtr keybd, GrabPtr grab, TimeStamp time, - oldWin = keybd->focus->win; - if (keybd->valuator) - keybd->valuator->motionHintWindow = NullWindow; -- DoFocusEvents(keybd, oldWin, grab->window, NotifyGrab); -+ if (oldWin) -+ DoFocusEvents(keybd, oldWin, grab->window, NotifyGrab); - if (syncEvents.playingEvents) - grabinfo->grabTime = syncEvents.time; - else -@@ -1590,13 +1593,10 @@ DeactivateKeyboardGrab(DeviceIntPtr keybd) - { - GrabPtr grab = keybd->deviceGrab.grab; - DeviceIntPtr dev; -- WindowPtr focusWin = keybd->focus ? keybd->focus->win -- : keybd->spriteInfo->sprite->win; -+ WindowPtr focusWin; - Bool wasImplicit = (keybd->deviceGrab.fromPassiveGrab && - keybd->deviceGrab.implicitGrab); - -- if (focusWin == FollowKeyboardWin) -- focusWin = inputInfo.keyboard->focus->win; - if (keybd->valuator) - keybd->valuator->motionHintWindow = NullWindow; - keybd->deviceGrab.grab = NullGrab; -@@ -1607,6 +1607,17 @@ DeactivateKeyboardGrab(DeviceIntPtr keybd) - if (dev->deviceGrab.sync.other == grab) - dev->deviceGrab.sync.other = NullGrab; - } -+ -+ if (keybd->focus) -+ focusWin = keybd->focus->win; -+ else if (keybd->spriteInfo->sprite) -+ focusWin = keybd->spriteInfo->sprite->win; -+ else -+ focusWin = NullWindow; -+ -+ if (focusWin == FollowKeyboardWin) -+ focusWin = inputInfo.keyboard->focus->win; -+ - DoFocusEvents(keybd, grab->window, focusWin, NotifyUngrab); - - if (!wasImplicit && grab->grabtype == XI2) -diff --git a/dix/getevents.c b/dix/getevents.c -index 4e62507..8b4379d 100644 ---- a/dix/getevents.c -+++ b/dix/getevents.c -@@ -896,9 +896,9 @@ scale_to_desktop(DeviceIntPtr dev, ValuatorMask *mask, - - /* scale x&y to desktop coordinates */ - *screenx = rescaleValuatorAxis(x, dev->valuator->axes + 0, NULL, -- screenInfo.x, screenInfo.width); -+ screenInfo.x, screenInfo.width - 1); - *screeny = rescaleValuatorAxis(y, dev->valuator->axes + 1, NULL, -- screenInfo.y, screenInfo.height); -+ screenInfo.y, screenInfo.height - 1); - - *devx = x; - *devy = y; -@@ -1400,8 +1400,9 @@ fill_pointer_events(InternalEvent *events, DeviceIntPtr pDev, int type, - coordinates were. - */ - if (flags & POINTER_SCREEN) { -- screenx = sx; -- screeny = sy; -+ scr = miPointerGetScreen(pDev); -+ screenx = sx + scr->x; -+ screeny = sy + scr->y; - } - - scr = positionSprite(pDev, (flags & POINTER_ABSOLUTE) ? Absolute : Relative, -diff --git a/dix/touch.c b/dix/touch.c -index 497ad7d..5f77be5 100644 ---- a/dix/touch.c -+++ b/dix/touch.c -@@ -572,8 +572,8 @@ TouchBuildSprite(DeviceIntPtr sourcedev, TouchPointInfoPtr ti, - return FALSE; - - /* Mark which grabs/event selections we're delivering to: max one grab per -- * window plus the bottom-most event selection. */ -- ti->listeners = calloc(sprite->spriteTraceGood + 1, sizeof(*ti->listeners)); -+ * window plus the bottom-most event selection, plus any active grab. */ -+ ti->listeners = calloc(sprite->spriteTraceGood + 2, sizeof(*ti->listeners)); - if (!ti->listeners) { - sprite->spriteTraceGood = 0; - return FALSE; -@@ -1029,3 +1029,31 @@ TouchAcceptReject(ClientPtr client, DeviceIntPtr dev, int mode, - - return TouchListenerAcceptReject(dev, ti, i, mode); - } -+ -+/** -+ * End physically active touches for a device. -+ */ -+void -+TouchEndPhysicallyActiveTouches(DeviceIntPtr dev) -+{ -+ InternalEvent *eventlist = InitEventList(GetMaximumEventsNum()); -+ int i; -+ -+ OsBlockSignals(); -+ mieqProcessInputEvents(); -+ for (i = 0; i < dev->last.num_touches; i++) { -+ DDXTouchPointInfoPtr ddxti = dev->last.touches + i; -+ -+ if (ddxti->active) { -+ int j; -+ int nevents = GetTouchEvents(eventlist, dev, ddxti->ddx_id, -+ XI_TouchEnd, 0, NULL); -+ -+ for (j = 0; j < nevents; j++) -+ mieqProcessDeviceEvent(dev, eventlist + j, NULL); -+ } -+ } -+ OsReleaseSignals(); -+ -+ FreeEventList(eventlist, GetMaximumEventsNum()); -+} -diff --git a/exa/exa_priv.h b/exa/exa_priv.h -index ea7e7fa..2e4759d 100644 ---- a/exa/exa_priv.h -+++ b/exa/exa_priv.h -@@ -209,6 +209,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); -diff --git a/hw/xfree86/common/Makefile.am b/hw/xfree86/common/Makefile.am -index f8fcde9..532d87b 100644 ---- a/hw/xfree86/common/Makefile.am -+++ b/hw/xfree86/common/Makefile.am -@@ -15,6 +15,7 @@ XVSDKINCS = xf86xv.h xf86xvmc.h xf86xvpriv.h - endif - - if XF86VIDMODE -+XF86VMODESOURCES = xf86vmode.c - XF86VMODE_SDK = vidmodeproc.h - endif - -@@ -47,7 +48,7 @@ libcommon_la_SOURCES = xf86Configure.c xf86Bus.c xf86Config.c \ - xf86VidMode.c xf86fbman.c xf86cmap.c \ - xf86Helper.c xf86PM.c xf86Xinput.c xisb.c \ - xf86Mode.c xorgHelper.c xf86Extensions.h \ -- xf86Extensions.c xf86vmode.c \ -+ xf86Extensions.c $(XF86VMODESOURCES) \ - $(XVSOURCES) $(BUSSOURCES) $(RANDRSOURCES) - nodist_libcommon_la_SOURCES = xf86DefModeSet.c xf86Build.h - libcommon_la_LIBADD = $(top_builddir)/config/libconfig.la -diff --git a/hw/xfree86/common/xf86.h b/hw/xfree86/common/xf86.h -index bb2903d..74da438 100644 ---- a/hw/xfree86/common/xf86.h -+++ b/hw/xfree86/common/xf86.h -@@ -468,4 +468,8 @@ extern _X_EXPORT ScreenPtr xf86ScrnToScreen(ScrnInfoPtr pScrn); - /* flags passed to xf86 allocate screen */ - #define XF86_ALLOCATE_GPU_SCREEN 1 - -+/* Update the internal total dimensions of all ScreenRecs together */ -+extern _X_EXPORT void -+xf86UpdateDesktopDimensions(void); -+ - #endif /* _XF86_H */ -diff --git a/hw/xfree86/common/xf86Bus.c b/hw/xfree86/common/xf86Bus.c -index 6de8409..4ffbf7e 100644 ---- a/hw/xfree86/common/xf86Bus.c -+++ b/hw/xfree86/common/xf86Bus.c -@@ -81,6 +81,8 @@ xf86CallDriverProbe(DriverPtr drv, Bool detect_only) - if (drv->platformProbe != NULL) { - foundScreen = xf86platformProbeDev(drv); - } -+ if (ServerIsNotSeat0()) -+ return foundScreen; - #endif - - #ifdef XSERVER_LIBPCIACCESS -@@ -214,6 +216,8 @@ xf86BusProbe(void) - { - #ifdef XSERVER_PLATFORM_BUS - xf86platformProbe(); -+ if (ServerIsNotSeat0()) -+ return; - #endif - #ifdef XSERVER_LIBPCIACCESS - xf86PciProbe(); -diff --git a/hw/xfree86/common/xf86Helper.c b/hw/xfree86/common/xf86Helper.c -index f681a85..721159d 100644 ---- a/hw/xfree86/common/xf86Helper.c -+++ b/hw/xfree86/common/xf86Helper.c -@@ -1898,3 +1898,9 @@ xf86ScrnToScreen(ScrnInfoPtr pScrn) - return screenInfo.screens[pScrn->scrnIndex]; - } - } -+ -+void -+xf86UpdateDesktopDimensions(void) -+{ -+ update_desktop_dimensions(); -+} -diff --git a/hw/xfree86/common/xf86Module.h b/hw/xfree86/common/xf86Module.h -index 83f9790..f58b87e 100644 ---- a/hw/xfree86/common/xf86Module.h -+++ b/hw/xfree86/common/xf86Module.h -@@ -80,7 +80,7 @@ typedef enum { - * mask is 0xFFFF0000. - */ - #define ABI_ANSIC_VERSION SET_ABI_VERSION(0, 4) --#define ABI_VIDEODRV_VERSION SET_ABI_VERSION(13, 0) -+#define ABI_VIDEODRV_VERSION SET_ABI_VERSION(13, 1) - #define ABI_XINPUT_VERSION SET_ABI_VERSION(18, 0) - #define ABI_EXTENSION_VERSION SET_ABI_VERSION(7, 0) - #define ABI_FONT_VERSION SET_ABI_VERSION(0, 6) -diff --git a/hw/xfree86/common/xf86platformBus.c b/hw/xfree86/common/xf86platformBus.c -index 24b9473..0525e39 100644 ---- a/hw/xfree86/common/xf86platformBus.c -+++ b/hw/xfree86/common/xf86platformBus.c -@@ -213,11 +213,12 @@ xf86platformProbe(void) - int i; - Bool pci = TRUE; - -+ config_odev_probe(xf86PlatformDeviceProbe); -+ - if (!xf86scanpci()) { - pci = FALSE; - } - -- config_odev_probe(&xf86PlatformDeviceProbe); - for (i = 0; i < xf86_num_platform_devices; i++) { - char *busid = xf86_get_platform_attrib(i, ODEV_ATTRIB_BUSID); - -@@ -358,6 +359,9 @@ xf86platformProbeDev(DriverPtr drvp) - break; - } - else { -+ /* for non-seat0 servers assume first device is the master */ -+ if (ServerIsNotSeat0()) -+ break; - if (xf86_platform_devices[j].pdev) { - if (xf86IsPrimaryPlatform(&xf86_platform_devices[j])) - break; -diff --git a/hw/xfree86/dri2/dri2.c b/hw/xfree86/dri2/dri2.c -index 23f589c..40963c3 100644 ---- a/hw/xfree86/dri2/dri2.c -+++ b/hw/xfree86/dri2/dri2.c -@@ -766,6 +766,44 @@ static inline PixmapPtr GetDrawablePixmap(DrawablePtr drawable) - } - } - -+/* -+ * A TraverseTree callback to invalidate all windows using the same -+ * pixmap -+ */ -+static int -+DRI2InvalidateWalk(WindowPtr pWin, pointer data) -+{ -+ if (pWin->drawable.pScreen->GetWindowPixmap(pWin) != data) -+ return WT_DONTWALKCHILDREN; -+ DRI2InvalidateDrawable(&pWin->drawable); -+ return WT_WALKCHILDREN; -+} -+ -+static void -+DRI2InvalidateDrawableAll(DrawablePtr pDraw) -+{ -+ if (pDraw->type == DRAWABLE_WINDOW) { -+ WindowPtr pWin = (WindowPtr) pDraw; -+ PixmapPtr pPixmap = pDraw->pScreen->GetWindowPixmap(pWin); -+ -+ /* -+ * Find the top-most window using this pixmap -+ */ -+ while (pWin->parent && -+ pDraw->pScreen->GetWindowPixmap(pWin->parent) == pPixmap) -+ pWin = pWin->parent; -+ -+ /* -+ * Walk the sub-tree to invalidate all of the -+ * windows using the same pixmap -+ */ -+ TraverseTree(pWin, DRI2InvalidateWalk, pPixmap); -+ DRI2InvalidateDrawable(&pPixmap->drawable); -+ } -+ else -+ DRI2InvalidateDrawable(pDraw); -+} -+ - DrawablePtr DRI2UpdatePrime(DrawablePtr pDraw, DRI2BufferPtr pDest) - { - DRI2DrawablePtr pPriv = DRI2GetDrawable(pDraw); -@@ -831,6 +869,8 @@ DrawablePtr DRI2UpdatePrime(DrawablePtr pDraw, DRI2BufferPtr pDest) - spix->screen_x = mpix->screen_x; - spix->screen_y = mpix->screen_y; - #endif -+ -+ DRI2InvalidateDrawableAll(pDraw); - return &spix->drawable; - } - -@@ -1048,18 +1088,7 @@ DRI2WaitSwap(ClientPtr client, DrawablePtr pDrawable) - return FALSE; - } - --/* -- * A TraverseTree callback to invalidate all windows using the same -- * pixmap -- */ --static int --DRI2InvalidateWalk(WindowPtr pWin, pointer data) --{ -- if (pWin->drawable.pScreen->GetWindowPixmap(pWin) != data) -- return WT_DONTWALKCHILDREN; -- DRI2InvalidateDrawable(&pWin->drawable); -- return WT_WALKCHILDREN; --} -+ - - int - DRI2SwapBuffers(ClientPtr client, DrawablePtr pDraw, CARD64 target_msc, -@@ -1162,26 +1191,7 @@ DRI2SwapBuffers(ClientPtr client, DrawablePtr pDraw, CARD64 target_msc, - */ - *swap_target = pPriv->swap_count + pPriv->swapsPending; - -- if (pDraw->type == DRAWABLE_WINDOW) { -- WindowPtr pWin = (WindowPtr) pDraw; -- PixmapPtr pPixmap = pScreen->GetWindowPixmap(pWin); -- -- /* -- * Find the top-most window using this pixmap -- */ -- while (pWin->parent && -- pScreen->GetWindowPixmap(pWin->parent) == pPixmap) -- pWin = pWin->parent; -- -- /* -- * Walk the sub-tree to invalidate all of the -- * windows using the same pixmap -- */ -- TraverseTree(pWin, DRI2InvalidateWalk, pPixmap); -- DRI2InvalidateDrawable(&pPixmap->drawable); -- } -- else -- DRI2InvalidateDrawable(pDraw); -+ DRI2InvalidateDrawableAll(pDraw); - - return Success; - } -diff --git a/hw/xwin/InitOutput.c b/hw/xwin/InitOutput.c -index 37cd8b3..1cf0f02 100644 ---- a/hw/xwin/InitOutput.c -+++ b/hw/xwin/InitOutput.c -@@ -164,7 +164,7 @@ void XwinExtensionInit(void) - int i; - - #ifdef XWIN_GLX_WINDOWS -- if ((g_fNativeGl) && (serverGeneration == 1)) { -+ if (g_fNativeGl) { - /* install the native GL provider */ - glxWinPushNativeProvider(); - } -@@ -901,7 +901,8 @@ InitOutput(ScreenInfo * screenInfo, int argc, char *argv[]) - { - int i; - -- XwinExtensionInit(); -+ if (serverGeneration == 1) -+ XwinExtensionInit(); - - /* Log the command line */ - winLogCommandLine(argc, argv); -diff --git a/hw/xwin/Makefile.am b/hw/xwin/Makefile.am -index 4c2f04e..33729a9 100644 ---- a/hw/xwin/Makefile.am -+++ b/hw/xwin/Makefile.am -@@ -109,13 +109,16 @@ SRCS = InitInput.c \ - winclipboard.h \ - winconfig.h \ - win.h \ -+ winglobals.h \ - winkeybd.h \ - winkeynames.h \ - winlayouts.h \ - winmessages.h \ -+ winmonitors.h \ - winmsg.h \ - winms.h \ - winmultiwindowclass.h \ -+ winmultiwindowicons.h \ - winprefs.h \ - winresource.h \ - winwindow.h \ -diff --git a/hw/xwin/glx/Makefile.am b/hw/xwin/glx/Makefile.am -index 7222a9f..59f6879 100644 ---- a/hw/xwin/glx/Makefile.am -+++ b/hw/xwin/glx/Makefile.am -@@ -6,7 +6,8 @@ libXwinGLX_la_SOURCES = \ - glwindows.h \ - glwrap.c \ - indirect.c \ -- wgl_ext_api.c -+ wgl_ext_api.c \ -+ wgl_ext_api.h - - if XWIN_MULTIWINDOW - DEFS_MULTIWINDOW = -DXWIN_MULTIWINDOW -diff --git a/include/input.h b/include/input.h -index 5747f3c..f8459b8 100644 ---- a/include/input.h -+++ b/include/input.h -@@ -579,6 +579,7 @@ extern int TouchListenerAcceptReject(DeviceIntPtr dev, TouchPointInfoPtr ti, - int listener, int mode); - extern int TouchAcceptReject(ClientPtr client, DeviceIntPtr dev, int mode, - uint32_t touchid, Window grab_window, XID *error); -+extern void TouchEndPhysicallyActiveTouches(DeviceIntPtr dev); - - /* misc event helpers */ - extern Mask GetEventMask(DeviceIntPtr dev, xEvent *ev, InputClientsPtr clients); -diff --git a/man/Xserver.man b/man/Xserver.man -index 8d243d6..b103551 100644 ---- a/man/Xserver.man -+++ b/man/Xserver.man -@@ -130,7 +130,7 @@ causes the server to generate a core dump on fatal errors. - .B \-displayfd \fIfd\fP - specifies a file descriptor in the launching process. Rather than specify - a display number, the X server will attempt to listen on successively higher --display numbers, and upon finding a free one, will write the port number back -+display numbers, and upon finding a free one, will write the display number back - on this file descriptor as a newline-terminated string. The \-pn option is - ignored when using \-displayfd. - .TP 8 -diff --git a/xkb/xkbAccessX.c b/xkb/xkbAccessX.c -index 082c0db..c1af32e 100644 ---- a/xkb/xkbAccessX.c -+++ b/xkb/xkbAccessX.c -@@ -709,7 +709,7 @@ ProcessPointerEvent(InternalEvent *ev, DeviceIntPtr mouse) - xkbDeviceInfoPtr xkbPrivPtr = XKBDEVICEINFO(mouse); - DeviceEvent *event = &ev->device_event; - -- dev = IsFloating(mouse) ? mouse : GetMaster(mouse, MASTER_KEYBOARD); -+ dev = (IsMaster(mouse) || IsFloating(mouse)) ? mouse : GetMaster(mouse, MASTER_KEYBOARD); - - if (dev && dev->key) { - xkbi = dev->key->xkbInfo; diff --git a/abs/core/xorg-server/use-pixman-glyph-cache.patch b/abs/core/xorg-server/use-pixman-glyph-cache.patch deleted file mode 100644 index c1cd90d..0000000 --- a/abs/core/xorg-server/use-pixman-glyph-cache.patch +++ /dev/null @@ -1,270 +0,0 @@ -From 9cbcb5bd6a5360a128d15b77a02d8d3351f74366 Mon Sep 17 00:00:00 2001 -From: Søren Sandmann Pedersen <ssp@redhat.com> -Date: Wed, 30 May 2012 09:19:08 +0000 -Subject: Use new pixman_glyph_cache_t API that will be in pixman 0.28.0 - -This new API allows glyphs to be cached in a data structure in pixman, -and entire glyph strings to be composited in one go. - -Also bump pixman dependency to 0.27.2. - -Results from the cairo peformance test suite running against Xvfb with -a screen size of 1680x1050@32bpp: - -Speedups -======== - xlib firefox-talos-gfx 12416.63 -> 3603.93 3.45x speedup -██▌ - xlib xfce4-terminal-a1 1727.57 -> 1048.85: 1.65x speedup -▋ - xlib evolution 1370.49 -> 869.34: 1.58x speedup -▋ - xlib gnome-terminal-vim 1832.83 -> 1251.94: 1.46x speedup -▌ - xlib poppler 1519.70 -> 1204.05: 1.26x speedup -▎ - xlib firefox-planet-gnome 6982.55 -> 5598.16: 1.25x speedup -▎ - xlib ocitysmap 1142.77 -> 1071.53: 1.07x speedup -▏ - -No slowdowns were reported. - -Results of x11perf -aa10text: - -Before: - - 8000000 reps @ 0.0007 msec (1450000.0/sec) - 8000000 reps @ 0.0007 msec (1460000.0/sec) - 8000000 reps @ 0.0007 msec (1460000.0/sec) - 8000000 reps @ 0.0007 msec (1470000.0/sec) - 8000000 reps @ 0.0007 msec (1480000.0/sec) - 40000000 trep @ 0.0007 msec (1460000.0/sec) - -After: - - 32000000 reps @ 0.0002 msec (4910000.0/sec) - 32000000 reps @ 0.0002 msec (4830000.0/sec) - 32000000 reps @ 0.0002 msec (4890000.0/sec) - 32000000 reps @ 0.0002 msec (4830000.0/sec) - 32000000 reps @ 0.0002 msec (4900000.0/sec) - 160000000 trep @ 0.0002 msec (4870000.0/sec) - -Version 2: Destroy the glyph cache at server regen time - -Acked-by: Aaron Plattner <aplattner@nvidia.com> -Reviewed-by: Keith Packard <keithp@keithp.com> -Signed-off-by: Soren Sandmann <ssp@redhat.com> ---- -diff --git a/configure.ac b/configure.ac -index e686614..b6ed92c 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -811,7 +811,7 @@ LIBPCIACCESS="pciaccess >= 0.12.901" - LIBUDEV="libudev >= 143" - LIBSELINUX="libselinux >= 2.0.86" - LIBDBUS="dbus-1 >= 1.0" --LIBPIXMAN="pixman-1 >= 0.21.8" -+LIBPIXMAN="pixman-1 >= 0.27.2" - - dnl Pixman is always required, but we separate it out so we can link - dnl specific modules against it -diff --git a/fb/fb.h b/fb/fb.h -index 75596c5..b869d12 100644 ---- a/fb/fb.h -+++ b/fb/fb.h -@@ -1344,6 +1344,9 @@ extern _X_EXPORT void - extern _X_EXPORT Bool - fbPictureInit(ScreenPtr pScreen, PictFormatPtr formats, int nformats); - -+extern _X_EXPORT void -+fbDestroyGlyphCache(void); -+ - /* - * fbpixmap.c - */ -diff --git a/fb/fbpict.c b/fb/fbpict.c -index 097a1a6..2804ff4 100644 ---- a/fb/fbpict.c -+++ b/fb/fbpict.c -@@ -70,6 +70,156 @@ fbComposite(CARD8 op, - free_pixman_pict(pDst, dest); - } - -+static pixman_glyph_cache_t *glyphCache; -+ -+void -+fbDestroyGlyphCache(void) -+{ -+ if (glyphCache) -+ { -+ pixman_glyph_cache_destroy (glyphCache); -+ glyphCache = NULL; -+ } -+} -+ -+static void -+fbUnrealizeGlyph(ScreenPtr pScreen, -+ GlyphPtr pGlyph) -+{ -+ if (glyphCache) -+ pixman_glyph_cache_remove (glyphCache, pGlyph, NULL); -+} -+ -+static void -+fbGlyphs(CARD8 op, -+ PicturePtr pSrc, -+ PicturePtr pDst, -+ PictFormatPtr maskFormat, -+ INT16 xSrc, -+ INT16 ySrc, int nlist, -+ GlyphListPtr list, -+ GlyphPtr *glyphs) -+{ -+#define N_STACK_GLYPHS 512 -+ ScreenPtr pScreen = pDst->pDrawable->pScreen; -+ pixman_glyph_t stack_glyphs[N_STACK_GLYPHS]; -+ pixman_glyph_t *pglyphs = stack_glyphs; -+ pixman_image_t *srcImage, *dstImage; -+ int srcXoff, srcYoff, dstXoff, dstYoff; -+ GlyphPtr glyph; -+ int n_glyphs; -+ int x, y; -+ int i, n; -+ int xDst = list->xOff, yDst = list->yOff; -+ -+ miCompositeSourceValidate(pSrc); -+ -+ n_glyphs = 0; -+ for (i = 0; i < nlist; ++i) -+ n_glyphs += list[i].len; -+ -+ if (!glyphCache) -+ glyphCache = pixman_glyph_cache_create(); -+ -+ pixman_glyph_cache_freeze (glyphCache); -+ -+ if (n_glyphs > N_STACK_GLYPHS) { -+ if (!(pglyphs = malloc (n_glyphs * sizeof (pixman_glyph_t)))) -+ goto out; -+ } -+ -+ i = 0; -+ x = y = 0; -+ while (nlist--) { -+ x += list->xOff; -+ y += list->yOff; -+ n = list->len; -+ while (n--) { -+ const void *g; -+ -+ glyph = *glyphs++; -+ -+ if (!(g = pixman_glyph_cache_lookup (glyphCache, glyph, NULL))) { -+ pixman_image_t *glyphImage; -+ PicturePtr pPicture; -+ int xoff, yoff; -+ -+ pPicture = GetGlyphPicture(glyph, pScreen); -+ if (!pPicture) { -+ n_glyphs--; -+ goto next; -+ } -+ -+ if (!(glyphImage = image_from_pict(pPicture, FALSE, &xoff, &yoff))) -+ goto out; -+ -+ g = pixman_glyph_cache_insert(glyphCache, glyph, NULL, -+ glyph->info.x, -+ glyph->info.y, -+ glyphImage); -+ -+ free_pixman_pict(pPicture, glyphImage); -+ -+ if (!g) -+ goto out; -+ } -+ -+ pglyphs[i].x = x; -+ pglyphs[i].y = y; -+ pglyphs[i].glyph = g; -+ i++; -+ -+ next: -+ x += glyph->info.xOff; -+ y += glyph->info.yOff; -+ } -+ list++; -+ } -+ -+ if (!(srcImage = image_from_pict(pSrc, FALSE, &srcXoff, &srcYoff))) -+ goto out; -+ -+ if (!(dstImage = image_from_pict(pDst, TRUE, &dstXoff, &dstYoff))) -+ goto out_free_src; -+ -+ if (maskFormat) { -+ pixman_format_code_t format; -+ pixman_box32_t extents; -+ int x, y; -+ -+ format = maskFormat->format | (maskFormat->depth << 24); -+ -+ pixman_glyph_get_extents(glyphCache, n_glyphs, pglyphs, &extents); -+ -+ x = extents.x1; -+ y = extents.y1; -+ -+ pixman_composite_glyphs(op, srcImage, dstImage, format, -+ xSrc + srcXoff + xDst, ySrc + srcYoff + yDst, -+ x, y, -+ x + dstXoff, y + dstYoff, -+ extents.x2 - extents.x1, -+ extents.y2 - extents.y1, -+ glyphCache, n_glyphs, pglyphs); -+ } -+ else { -+ pixman_composite_glyphs_no_mask(op, srcImage, dstImage, -+ xSrc + srcXoff - xDst, ySrc + srcYoff - yDst, -+ dstXoff, dstYoff, -+ glyphCache, n_glyphs, pglyphs); -+ } -+ -+ free_pixman_pict(pDst, dstImage); -+ -+out_free_src: -+ free_pixman_pict(pSrc, srcImage); -+ -+out: -+ pixman_glyph_cache_thaw(glyphCache); -+ if (pglyphs != stack_glyphs) -+ free(pglyphs); -+} -+ - static pixman_image_t * - create_solid_fill_image(PicturePtr pict) - { -@@ -357,7 +507,8 @@ fbPictureInit(ScreenPtr pScreen, PictFormatPtr formats, int nformats) - return FALSE; - ps = GetPictureScreen(pScreen); - ps->Composite = fbComposite; -- ps->Glyphs = miGlyphs; -+ ps->Glyphs = fbGlyphs; -+ ps->UnrealizeGlyph = fbUnrealizeGlyph; - ps->CompositeRects = miCompositeRects; - ps->RasterizeTrapezoid = fbRasterizeTrapezoid; - ps->Trapezoids = fbTrapezoids; -diff --git a/fb/fbscreen.c b/fb/fbscreen.c -index 7c7d656..f9080a4 100644 ---- a/fb/fbscreen.c -+++ b/fb/fbscreen.c -@@ -32,6 +32,7 @@ fbCloseScreen(ScreenPtr pScreen) - int d; - DepthPtr depths = pScreen->allowedDepths; - -+ fbDestroyGlyphCache(); - for (d = 0; d < pScreen->numDepths; d++) - free(depths[d].vids); - free(depths); --- -cgit v0.9.0.2-2-gbebe |