Date: Friday, July 25, 2014 @ 01:42:11 Author: lcarlier Revision: 217822
upgpkg: xorg-server 1.16.0-3 implement FS#41256 and FS#41259, add an upstream fix and an install post-upgrade message Added: xorg-server/trunk/glamor-upstream-fix.patch xorg-server/trunk/nvidia-drm-outputclass.conf xorg-server/trunk/xorg-server.install Modified: xorg-server/trunk/PKGBUILD Deleted: xorg-server/trunk/10-quirks.conf xorg-server/trunk/autoconfig-nvidia.patch -----------------------------+ 10-quirks.conf | 10 -- PKGBUILD | 21 ++-- autoconfig-nvidia.patch | 28 ------ glamor-upstream-fix.patch | 178 ++++++++++++++++++++++++++++++++++++++++++ nvidia-drm-outputclass.conf | 6 + xorg-server.install | 18 ++++ 6 files changed, 214 insertions(+), 47 deletions(-) Deleted: 10-quirks.conf =================================================================== --- 10-quirks.conf 2014-07-24 18:53:49 UTC (rev 217821) +++ 10-quirks.conf 2014-07-24 23:42:11 UTC (rev 217822) @@ -1,10 +0,0 @@ -# Collection of quirks and blacklist/whitelists for specific devices. - - -# Accelerometer device, posts data through ABS_X/ABS_Y, making X unusable -# http://bugs.freedesktop.org/show_bug.cgi?id=22442 -Section "InputClass" - Identifier "ThinkPad HDAPS accelerometer blacklist" - MatchProduct "ThinkPad HDAPS accelerometer data" - Option "Ignore" "on" -EndSection Modified: PKGBUILD =================================================================== --- PKGBUILD 2014-07-24 18:53:49 UTC (rev 217821) +++ PKGBUILD 2014-07-24 23:42:11 UTC (rev 217822) @@ -5,7 +5,7 @@ pkgbase=xorg-server pkgname=('xorg-server' 'xorg-server-xephyr' 'xorg-server-xdmx' 'xorg-server-xvfb' 'xorg-server-xnest' 'xorg-server-xwayland' 'xorg-server-common' 'xorg-server-devel') pkgver=1.16.0 -pkgrel=2 # build first with 0.1 and then rebuild it after xf86-input-evdev rebuild +pkgrel=3 # build first with 0.1 and then rebuild it after xf86-input-evdev rebuild arch=('i686' 'x86_64') license=('custom') url="http://xorg.freedesktop.org" @@ -15,24 +15,26 @@ 'xf86dgaproto' 'libxmu' 'libxrender' 'libxi' 'dmxproto' 'libxaw' 'libdmx' 'libxtst' 'libxres' 'xorg-xkbcomp' 'xorg-util-macros' 'xorg-font-util' 'glproto' 'dri2proto' 'libgcrypt' 'libepoxy' 'xcb-util' 'xcb-util-image' 'xcb-util-wm' 'xcb-util-keysyms' 'dri3proto' 'libxshmfence') -source=(${url}/releases/individual/xserver/${pkgbase}-${pkgver}.tar.bz2 - autoconfig-nvidia.patch +source=(${url}/releases/individual/xserver/${pkgbase}-${pkgver}.tar.bz2{,.sig} autoconfig-sis.patch + glamor-upstream-fix.patch + nvidia-drm-outputclass.conf xvfb-run xvfb-run.1) sha256sums=('38330a03c5f7a38745a3f9816cf069db5b8844eebb358fd39dbabf61f32cd06b' - '66e25f76a7496c429e0aff4b0670f168719bb0ceaeb88c6f2272f2bf3ed21162' + 'SKIP' 'd027776fac1f7675b0a9ee817502290b1c45f9c09b0f0a6bb058c35f92361e84' + 'fbd898f0e867c77c9bf918fd2e7956c7776ecb3cc3634c61290fb03513b47987' + 'af1c3d2ea5de7f6a6b5f7c60951a189a4749d1495e5462f3157ae7ac8fe1dc56' 'ff0156309470fc1d378fd2e104338020a884295e285972cc88e250e031cc35b9' '2460adccd3362fefd4cdc5f1c70f332d7b578091fb9167bf88b5f91265bbd776') prepare() { cd "${pkgbase}-${pkgver}" - # Use nouveau/nv/nvidia drivers for nvidia devices - patch -Np1 -i ../autoconfig-nvidia.patch - # Use unofficial imedia SiS driver for supported SiS devices patch -Np0 -i ../autoconfig-sis.patch + # merged upstream (1.16 branch) + patch -Np1 -i ../glamor-upstream-fix.patch } build() { @@ -55,7 +57,6 @@ --enable-kdrive-evdev \ --enable-kdrive-kbd \ --enable-kdrive-mouse \ - --enable-install-setuid \ --enable-config-udev \ --enable-systemd-logind \ --enable-suid-wrapper \ @@ -113,12 +114,14 @@ groups=('xorg') conflicts=('nvidia-utils<=331.20' 'glamor-egl') replaces=('glamor-egl') - + install=xorg-server.install + cd "${pkgbase}-${pkgver}" make DESTDIR="${pkgdir}" install install -m755 -d "${pkgdir}/etc/X11" mv "${pkgdir}/usr/share/X11/xorg.conf.d" "${pkgdir}/etc/X11/" + install -m644 "${srcdir}/nvidia-drm-outputclass.conf" "${pkgdir}/etc/X11/xorg.conf.d/" rmdir "${pkgdir}/usr/share/X11" Deleted: autoconfig-nvidia.patch =================================================================== --- autoconfig-nvidia.patch 2014-07-24 18:53:49 UTC (rev 217821) +++ autoconfig-nvidia.patch 2014-07-24 23:42:11 UTC (rev 217822) @@ -1,28 +0,0 @@ -diff -Nur xorg-server-1.11.99.902.orig/hw/xfree86/common/xf86pciBus.c xorg-server-1.11.99.902/hw/xfree86/common/xf86pciBus.c ---- xorg-server-1.11.99.902.orig/hw/xfree86/common/xf86pciBus.c 2012-02-10 10:10:37.583014924 +0000 -+++ xorg-server-1.11.99.902/hw/xfree86/common/xf86pciBus.c 2012-02-10 11:16:07.148971317 +0000 -@@ -1144,7 +1144,23 @@ - int idx = 0; - - #ifdef __linux__ -- driverList[idx++] = "nouveau"; -+ switch (dev->device_id) -+ { -+ /* NV1 */ -+ case 0x0008: -+ case 0x0009: -+ driverList[idx++] = "vesa"; -+ break; -+ /* NV3 */ -+ case 0x0018: -+ case 0x0019: -+ driverList[idx++] = "nouveau"; -+ break; -+ default: -+ driverList[idx++] = "nouveau"; -+ driverList[idx++] = "nvidia"; -+ break; -+ } - #endif - driverList[idx++] = "nv"; - break; Added: glamor-upstream-fix.patch =================================================================== --- glamor-upstream-fix.patch (rev 0) +++ glamor-upstream-fix.patch 2014-07-24 23:42:11 UTC (rev 217822) @@ -0,0 +1,178 @@ +From 3c0431b8911241552a15a43e4279c50658b50a18 Mon Sep 17 00:00:00 2001 +From: Keith Packard <[email protected]> +Date: Wed, 16 Jul 2014 23:03:23 +0000 +Subject: glamor: Fix temp picture coordinates in glamor_composite_clipped_region + +To understand this patch, let's start at the protocol interface where +the relationship between the coordinate spaces is documented: + + static Bool + _glamor_composite(CARD8 op, + PicturePtr source, + PicturePtr mask, + PicturePtr dest, + INT16 x_source, + INT16 y_source, + INT16 x_mask, + INT16 y_mask, + INT16 x_dest, INT16 y_dest, + CARD16 width, CARD16 height, Bool fallback) + +The coordinates are passed to this function directly off the wire and +are all relative to their respective drawables. For Windows, this means +that they are relative to the upper left corner of the window, in +whatever pixmap that window is getting drawn to. + +_glamor_composite calls miComputeCompositeRegion to construct a clipped +region to actually render to. In reality, miComputeCompositeRegion clips +only to the destination these days; source clip region based clipping +would have to respect the transform, which isn't really possible. The +returned region is relative to the screen in which dest lives; offset by +dest->drawable.x and dest->drawable.y. + +What is important to realize here is that, because of clipping, the +composite region may not have the same position within the destination +drawable as x_dest, y_dest. The protocol coordinates now exist solely to +'pin' the three objects together. + + extents->x1,y1 Screen origin of clipped operation + width,height Extents of the clipped operation + x_dest,y_dest Unclipped destination-relative operation coordinate + x_source,y_source Unclipped source-relative operation coordinate + x_mask,y_mask Unclipped mask-relative operation coordinate + +One thing we want to know is what the offset is from the original +operation origin to the clipped origin + + Destination drawable relative coordinates of the clipped operation: + + x_dest_clipped = extents->x1 - dest->drawable.x + y_dest_clipped = extents->y1 - dest->drawable.y + + Offset from the original operation origin: + + x_off_clipped = x_dest_clipped - x_dest + y_off_clipped = y_dest_clipped - y_dest + + Source drawable relative coordinates of the clipped operation: + + x_source_clipped = x_source + x_off_clipped; + y_source_clipped = y_source + y_off_clipped; + + Mask drawable relative coordinates of the clipped operation: + + x_mask_clipped = x_source + x_off_clipped; + y_mask_clipped = y_source + y_off_clipped; + +This is where the original code fails -- it doesn't subtract the +destination drawable location when computing the distance that the +operation has been moved by clipping. Here's what it does when +constructing a temporary source picture: + + temp_src = + glamor_convert_gradient_picture(screen, source, + extent->x1 + x_source - x_dest, + extent->y1 + y_source - y_dest, + width, height); + ... + x_temp_src = -extent->x1 + x_dest; + y_temp_src = -extent->y1 + y_dest; + +glamor_convert_gradient_picture needs source drawable relative +coordinates, but that is not what it's getting; it's getting +screen-relative coordinates for the destination, adjusted by the +distance between the provided source and destination operation +coordinates. We want x_source_clipped and y_source_clipped: + + x_source_clipped = x_source + x_off_clipped + = x_source + x_dest_clipped - x_dest + = x_source + extents->x1 - dest->drawable.x - x_dest + +x_temp_src/y_temp_src are supposed to be the coordinates of the original +operation translated to the temporary picture: + + x_temp_src = x_source - x_source_clipped; + y_temp_src = y_source - y_source_clipped; + +Note that x_source_clipped/y_source_clipped will never be less than +x_source/y_source because all we're doing is clipping. This means that +x_temp_src/y_temp_src will always be non-positive; the original source +coordinate can never be strictly *inside* the temporary image or we +could have made the temporary image smaller. + + x_temp_src = x_source - x_source_clipped + = x_source - (x_source + x_off_clipped) + = -x_off_clipped + = x_dest - x_dest_clipped + = x_dest - (extents->x1 - dest->drawable.x) + +Again, this is off by the destination origin within the screen +coordinate space. + +The code should look like: + + temp_src = + glamor_convert_gradient_picture(screen, source, + extent->x1 + x_source - x_dest - dest->pDrawable->x, + extent->y1 + y_source - y_dest - dest->pDrawable->y, + width, height); + + x_temp_src = -extent->x1 + x_dest + dest->pDrawable->x; + y_temp_src = -extent->y1 + y_dest + dest->pDrawable->y; + +Signed-off-by: Keith Packard <[email protected]> +Reviewed-by: Markus Wick <[email protected]> +(cherry picked from commit 55f5bfb578e934319d1308cbb56c900c5ac7cfa7) +Signed-off-by: Julien Cristau <[email protected]> +--- +diff --git a/glamor/glamor_render.c b/glamor/glamor_render.c +index 14ab738..e5d5d2c 100644 +--- a/glamor/glamor_render.c ++++ b/glamor/glamor_render.c +@@ -1450,8 +1450,8 @@ glamor_composite_clipped_region(CARD8 op, + || source_pixmap->drawable.height != height)))) { + temp_src = + glamor_convert_gradient_picture(screen, source, +- extent->x1 + x_source - x_dest, +- extent->y1 + y_source - y_dest, ++ extent->x1 + x_source - x_dest - dest->pDrawable->x, ++ extent->y1 + y_source - y_dest - dest->pDrawable->y, + width, height); + if (!temp_src) { + temp_src = source; +@@ -1459,8 +1459,8 @@ glamor_composite_clipped_region(CARD8 op, + } + temp_src_priv = + glamor_get_pixmap_private((PixmapPtr) (temp_src->pDrawable)); +- x_temp_src = -extent->x1 + x_dest; +- y_temp_src = -extent->y1 + y_dest; ++ x_temp_src = -extent->x1 + x_dest + dest->pDrawable->x; ++ y_temp_src = -extent->y1 + y_dest + dest->pDrawable->y; + } + + if (mask +@@ -1474,8 +1474,8 @@ glamor_composite_clipped_region(CARD8 op, + * to do reduce one convertion. */ + temp_mask = + glamor_convert_gradient_picture(screen, mask, +- extent->x1 + x_mask - x_dest, +- extent->y1 + y_mask - y_dest, ++ extent->x1 + x_mask - x_dest - dest->pDrawable->x, ++ extent->y1 + y_mask - y_dest - dest->pDrawable->y, + width, height); + if (!temp_mask) { + temp_mask = mask; +@@ -1483,8 +1483,8 @@ glamor_composite_clipped_region(CARD8 op, + } + temp_mask_priv = + glamor_get_pixmap_private((PixmapPtr) (temp_mask->pDrawable)); +- x_temp_mask = -extent->x1 + x_dest; +- y_temp_mask = -extent->y1 + y_dest; ++ x_temp_mask = -extent->x1 + x_dest + dest->pDrawable->x; ++ y_temp_mask = -extent->y1 + y_dest + dest->pDrawable->y; + } + /* Do two-pass PictOpOver componentAlpha, until we enable + * dual source color blending. +-- +cgit v0.9.0.2-2-gbebe + Added: nvidia-drm-outputclass.conf =================================================================== --- nvidia-drm-outputclass.conf (rev 0) +++ nvidia-drm-outputclass.conf 2014-07-24 23:42:11 UTC (rev 217822) @@ -0,0 +1,6 @@ +Section "OutputClass" + Identifier "nvidia" + MatchDriver "nvidia-drm" + Driver "nvidia" +EndSection + Added: xorg-server.install =================================================================== --- xorg-server.install (rev 0) +++ xorg-server.install 2014-07-24 23:42:11 UTC (rev 217822) @@ -0,0 +1,18 @@ +post_upgrade() { + if (( $(vercmp $2 1.16.0-3) < 0 )); then + post_install + fi +} + +post_install() { + cat <<MSG +>>> xorg-server has now the ability to run without root rights with + the help of systemd-logind. xserver will fail to run if not launched + from the same virtual terminal as was used to log in, or with a + modified xserverrc file. + + Old behavior can be restore through Xorg.wrap config file. + See Xorg.wrap man page (man xorg.wrap). +MSG +} +
