[arch-commits] Commit in xorg-server/trunk (6 files)

Laurent Carlier lcarlier at archlinux.org
Thu Jul 24 23:42:11 UTC 2014


    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 <keithp at keithp.com>
+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 <keithp at keithp.com>
+Reviewed-by: Markus Wick <markus at selfnet.de>
+(cherry picked from commit 55f5bfb578e934319d1308cbb56c900c5ac7cfa7)
+Signed-off-by: Julien Cristau <jcristau at debian.org>
+---
+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
+}
+




More information about the arch-commits mailing list