diff options
Diffstat (limited to 'extra/xorg-server')
-rw-r--r-- | extra/xorg-server/PKGBUILD | 20 | ||||
-rw-r--r-- | extra/xorg-server/git-fixes.patch | 670 | ||||
-rw-r--r-- | extra/xorg-server/use-pixman-glyph-cache.patch | 270 |
3 files changed, 39 insertions, 921 deletions
diff --git a/extra/xorg-server/PKGBUILD b/extra/xorg-server/PKGBUILD index 131e05bd5..638575a6f 100644 --- a/extra/xorg-server/PKGBUILD +++ b/extra/xorg-server/PKGBUILD @@ -1,10 +1,11 @@ -# $Id: PKGBUILD 179653 2013-03-09 07:55:34Z andyrtr $ +# $Id: PKGBUILD 180178 2013-03-18 16:08:50Z andyrtr $ +# Maintainer: AndyRTR <andyrtr@archlinux.org> # 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.3 -pkgrel=1 +pkgver=1.14.0 +pkgrel=2 arch=('i686' 'x86_64' 'mips64el') license=('custom') url="http://xorg.freedesktop.org" @@ -22,8 +23,8 @@ source=(${url}/releases/individual/xserver/${pkgbase}-${pkgver}.tar.bz2 xvfb-run.1 10-quirks.conf loongson.patch - use-pixman-glyph-cache.patch) -sha256sums=('c9e38eb6404749cab9e3c4a4901d951d4d62958b11f002ce968225ef92902762' + git-fixes.patch) +sha256sums=('1f5107573252c26439fdd165481765a2c0964e02a2e9fab36e02414d08f30630' '66e25f76a7496c429e0aff4b0670f168719bb0ceaeb88c6f2272f2bf3ed21162' 'd027776fac1f7675b0a9ee817502290b1c45f9c09b0f0a6bb058c35f92361e84' 'e033f9bcc21980f7f0428e6ed6c362a3d55ad293b05fd6e6c6c1933b86f9e63a' @@ -32,7 +33,7 @@ sha256sums=('c9e38eb6404749cab9e3c4a4901d951d4d62958b11f002ce968225ef92902762' '2460adccd3362fefd4cdc5f1c70f332d7b578091fb9167bf88b5f91265bbd776' '94612f5c0d34a3b7152915c2e285c7b462e9d8e38d3539bd551a339498eac166' '966b8c509006e3b7e6ac951c93a760ecbb2cb2ad7a5807fb919f0c4ee5e079a5' - '7c1dacd30c46b01424c7c75974285cd348dafd0327eb3f211cbe446ad90dd308') + 'd0832cc16b5e6c1dee2959055a4b327f5c87e2a67b5f427d654663057207b2c1') build() { cd "${srcdir}/${pkgbase}-${pkgver}" @@ -52,6 +53,9 @@ build() { # From Fedora. Do not build acpid code, it is buggy and we do not need it patch -Np1 -i "${srcdir}/xserver-1.6.0-less-acpi-brokenness.patch" + # post release git fixes + patch -Np1 -i "${srcdir}/git-fixes.patch" + autoreconf -fi ./configure --prefix=/usr \ --enable-ipv6 \ @@ -111,8 +115,8 @@ package_xorg-server() { pkgdesc="Xorg X server" depends=(libxdmcp libxfont libpciaccess libdrm 'pixman>=0.28.0' 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') + # see xorg-server-*/hw/xfree86/common/xf86Module.h for ABI versions - we provide major numbers that drivers can depend on + provides=('X-ABI-VIDEODRV_VERSION=14' 'X-ABI-XINPUT_VERSION=19' 'X-ABI-EXTENSION_VERSION=7.0' 'x-server') groups=('xorg') conflicts=('nvidia-utils<=290.10') diff --git a/extra/xorg-server/git-fixes.patch b/extra/xorg-server/git-fixes.patch index d1817c00f..177f908ef 100644 --- a/extra/xorg-server/git-fixes.patch +++ b/extra/xorg-server/git-fixes.patch @@ -1,643 +1,27 @@ -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; +From 5047810a4c20fab444b8c6eb146c55dcdb0d4219 Mon Sep 17 00:00:00 2001 +From: Aaron Plattner <aplattner@nvidia.com> +Date: Wed, 06 Mar 2013 17:40:28 +0000 +Subject: fb: Rename wfbDestroyGlyphCache + +Renaming this function was missed in commit +9cbcb5bd6a5360a128d15b77a02d8d3351f74366, so both libfb.so and libwfb.so define +functions named fbDestroyGlyphCache. + +Signed-off-by: Aaron Plattner <aplattner@nvidia.com> +Reviewed-by: Søren Sandmann <ssp@redhat.com> +Signed-off-by: Keith Packard <keithp@keithp.com> +--- +diff --git a/fb/wfbrename.h b/fb/wfbrename.h +index 588440c..54d00d0 100644 +--- a/fb/wfbrename.h ++++ b/fb/wfbrename.h +@@ -52,6 +52,7 @@ + #define fbCreatePixmap wfbCreatePixmap + #define fbCreatePixmapBpp wfbCreatePixmapBpp + #define fbCreateWindow wfbCreateWindow ++#define fbDestroyGlyphCache wfbDestroyGlyphCache + #define fbDestroyPixmap wfbDestroyPixmap + #define fbDestroyWindow wfbDestroyWindow + #define fbDoCopy wfbDoCopy +-- +cgit v0.9.0.2-2-gbebe diff --git a/extra/xorg-server/use-pixman-glyph-cache.patch b/extra/xorg-server/use-pixman-glyph-cache.patch deleted file mode 100644 index c1cd90d3a..000000000 --- a/extra/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 |