summaryrefslogtreecommitdiffstats
path: root/source/x
diff options
context:
space:
mode:
Diffstat (limited to 'source/x')
-rw-r--r--source/x/x11/build/xorg-server2
-rw-r--r--source/x/x11/configure/xf86-video-r12813
-rw-r--r--source/x/x11/patch/xorg-server.patch27
-rw-r--r--source/x/x11/patch/xorg-server/0001-Always-install-vbe-and-int10-sdk-headers.patch37
-rw-r--r--source/x/x11/patch/xorg-server/0001-autobind-GPUs-to-the-screen.patch293
-rw-r--r--source/x/x11/patch/xorg-server/0001-xfree86-use-modesetting-driver-by-default-on-GeForce.patch52
-rw-r--r--source/x/x11/patch/xorg-server/xserver-1-2-glamor-Always-return-0-from-glamor_fds_from_pixmap-on-error.patch54
-rw-r--r--source/x/x11/patch/xorg-server/xserver-2-2-glamor-Propagate-glamor_fds_from_pixmap-error-in-glamor_fd_from_pixmap.patch58
8 files changed, 522 insertions, 14 deletions
diff --git a/source/x/x11/build/xorg-server b/source/x/x11/build/xorg-server
index 0cfbf0888..00750edc0 100644
--- a/source/x/x11/build/xorg-server
+++ b/source/x/x11/build/xorg-server
@@ -1 +1 @@
-2
+3
diff --git a/source/x/x11/configure/xf86-video-r128 b/source/x/x11/configure/xf86-video-r128
deleted file mode 100644
index 291eb9b94..000000000
--- a/source/x/x11/configure/xf86-video-r128
+++ /dev/null
@@ -1,13 +0,0 @@
-CFLAGS=$SLKCFLAGS \
-CXXFLAGS=$SLKCFLAGS \
-./autogen.sh \
- --prefix=/usr \
- --libdir=/usr/lib${LIBDIRSUFFIX} \
- --sysconfdir=/etc \
- --localstatedir=/var \
- --infodir=/usr/info \
- --mandir=/usr/man \
- --docdir=/usr/doc/${PKGNAME}-${MODULAR_PACKAGE_VERSION} \
- --with-udev-rules-dir=/lib/udev/rules.d \
- --disable-static \
- --build=$ARCH-slackware-linux
diff --git a/source/x/x11/patch/xorg-server.patch b/source/x/x11/patch/xorg-server.patch
index cdd0ebd87..bd48d5a06 100644
--- a/source/x/x11/patch/xorg-server.patch
+++ b/source/x/x11/patch/xorg-server.patch
@@ -1,3 +1,30 @@
+# We've used this one forever.
zcat $CWD/patch/xorg-server/x11.startwithblackscreen.diff.gz | patch -p1 --verbose || { touch ${SLACK_X_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
+
+# Without this patch, combo mouse/keyboard (such as Logitech through unified
+# receiver) may be unable to set the desired keyboard layout.
zcat $CWD/patch/xorg-server/xorg-server.combo.mouse.keyboard.layout.patch.gz | patch -p1 --verbose || { touch ${SLACK_X_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
+
+# Fix a segfault in xorg-server-1.20.0. Odds are good this will be fixed in
+# the next xorg-server and will no longer apply then.
zcat $CWD/patch/xorg-server/fix-nouveau-segfault.diff.gz | patch -p1 --verbose || { touch ${SLACK_X_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
+
+# From Fedora Rawhide 2018/7 (possibly useful, doesn't seem like it will hurt anything):
+zcat $CWD/patch/xorg-server/0001-Always-install-vbe-and-int10-sdk-headers.patch.gz | patch -p1 --verbose || { touch ${SLACK_X_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
+
+# From Fedora Rawhide 2018/7, looks like many other distributions have added
+# this patch for a long time. Keep an eye out for newer versions though, and
+# revisit this if any DE begin to manage secondary GPUs (although none do yet):
+zcat $CWD/patch/xorg-server/0001-autobind-GPUs-to-the-screen.patch.gz | patch -p1 --verbose || { touch ${SLACK_X_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
+
+# The upstream nouveau developers recommend this. On newer nvidia cards it works
+# better to use the generic modesetting ddx rather than nouveau.
+# Reference: https://bugs.freedesktop.org/show_bug.cgi?id=94844
+# Added here 2018/7.
+zcat $CWD/patch/xorg-server/0001-xfree86-use-modesetting-driver-by-default-on-GeForce.patch.gz | patch -p1 --verbose || { touch ${SLACK_X_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
+
+# Glamor patches that synchronize what the drivers and server expect. Written by
+# one of the ATI devs, so might improve things with that driver, but be on the
+# lookout for issues. Added 2018/7.
+zcat $CWD/patch/xorg-server/xserver-1-2-glamor-Always-return-0-from-glamor_fds_from_pixmap-on-error.patch.gz| patch -p1 --verbose || { touch ${SLACK_X_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
+zcat $CWD/patch/xorg-server/xserver-2-2-glamor-Propagate-glamor_fds_from_pixmap-error-in-glamor_fd_from_pixmap.patch.gz | patch -p1 --verbose || { touch ${SLACK_X_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
diff --git a/source/x/x11/patch/xorg-server/0001-Always-install-vbe-and-int10-sdk-headers.patch b/source/x/x11/patch/xorg-server/0001-Always-install-vbe-and-int10-sdk-headers.patch
new file mode 100644
index 000000000..c613eb8f9
--- /dev/null
+++ b/source/x/x11/patch/xorg-server/0001-Always-install-vbe-and-int10-sdk-headers.patch
@@ -0,0 +1,37 @@
+From e96a83d9b1b5a52a41213c7a4840dc96b4f5b06f Mon Sep 17 00:00:00 2001
+From: Adam Jackson <ajax@redhat.com>
+Date: Wed, 15 Aug 2012 12:35:21 -0400
+Subject: [PATCH] Always install vbe and int10 sdk headers
+
+Signed-off-by: Adam Jackson <ajax@redhat.com>
+---
+ hw/xfree86/Makefile.am | 12 ++----------
+ 1 file changed, 2 insertions(+), 10 deletions(-)
+
+diff --git a/hw/xfree86/Makefile.am b/hw/xfree86/Makefile.am
+index b876b79..a170b58 100644
+--- a/hw/xfree86/Makefile.am
++++ b/hw/xfree86/Makefile.am
+@@ -26,17 +26,9 @@ if VGAHW
+ VGAHW_SUBDIR = vgahw
+ endif
+
+-if VBE
+-VBE_SUBDIR = vbe
+-endif
+-
+-if INT10MODULE
+-INT10_SUBDIR = int10
+-endif
+-
+-SUBDIRS = common ddc x86emu $(INT10_SUBDIR) os-support parser \
++SUBDIRS = common ddc x86emu int10 os-support parser \
+ ramdac $(VGAHW_SUBDIR) loader modes $(DRI_SUBDIR) \
+- $(DRI2_SUBDIR) . $(VBE_SUBDIR) i2c dixmods xkb \
++ $(DRI2_SUBDIR) . vbe i2c dixmods xkb \
+ fbdevhw shadowfb exa $(XF86UTILS_SUBDIR) doc man \
+ $(GLAMOR_EGL_SUBDIR) drivers
+
+--
+2.13.6
+
diff --git a/source/x/x11/patch/xorg-server/0001-autobind-GPUs-to-the-screen.patch b/source/x/x11/patch/xorg-server/0001-autobind-GPUs-to-the-screen.patch
new file mode 100644
index 000000000..86b96a23e
--- /dev/null
+++ b/source/x/x11/patch/xorg-server/0001-autobind-GPUs-to-the-screen.patch
@@ -0,0 +1,293 @@
+From 471289fa1dc359555ceed6302f7d9605ab6be3ea Mon Sep 17 00:00:00 2001
+From: Dave Airlie <airlied@redhat.com>
+Date: Mon, 2 Apr 2018 16:49:02 -0400
+Subject: [PATCH] autobind GPUs to the screen
+
+This is a modified version of a patch we've been carry-ing in Fedora and
+RHEL for years now. This patch automatically adds secondary GPUs to the
+master as output sink / offload source making e.g. the use of
+slave-outputs just work, with requiring the user to manually run
+"xrandr --setprovideroutputsource" before he can hookup an external
+monitor to his hybrid graphics laptop.
+
+There is one problem with this patch, which is why it was not upstreamed
+before. What to do when a secondary GPU gets detected really is a policy
+decission (e.g. one may want to autobind PCI GPUs but not USB ones) and
+as such should be under control of the Desktop Environment.
+
+Unconditionally adding autobinding support to the xserver will result
+in races between the DE dealing with the hotplug of a secondary GPU
+and the server itself dealing with it.
+
+However we've waited for years for any Desktop Environments to actually
+start doing some sort of autoconfiguration of secondary GPUs and there
+is still not a single DE dealing with this, so I believe that it is
+time to upstream this now.
+
+To avoid potential future problems if any DEs get support for doing
+secondary GPU configuration themselves, the new autobind functionality
+is made optional. Since no DEs currently support doing this themselves it
+is enabled by default. When DEs grow support for doing this themselves
+they can disable the servers autobinding through the servers cmdline or a
+xorg.conf snippet.
+
+Signed-off-by: Dave Airlie <airlied@gmail.com>
+[hdegoede@redhat.com: Make configurable, fix with nvidia, submit upstream]
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+---
+ hw/xfree86/common/xf86Config.c | 19 +++++++++++++++++++
+ hw/xfree86/common/xf86Globals.c | 2 ++
+ hw/xfree86/common/xf86Init.c | 20 ++++++++++++++++++++
+ hw/xfree86/common/xf86Priv.h | 1 +
+ hw/xfree86/common/xf86Privstr.h | 1 +
+ hw/xfree86/common/xf86platformBus.c | 4 ++++
+ hw/xfree86/man/Xorg.man | 7 +++++++
+ hw/xfree86/man/xorg.conf.man | 6 ++++++
+ randr/randrstr.h | 3 +++
+ randr/rrprovider.c | 22 ++++++++++++++++++++++
+ 10 files changed, 85 insertions(+)
+
+diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c
+index 2c1d335..d7d7c2e 100644
+--- a/hw/xfree86/common/xf86Config.c
++++ b/hw/xfree86/common/xf86Config.c
+@@ -643,6 +643,7 @@ typedef enum {
+ FLAG_DRI2,
+ FLAG_USE_SIGIO,
+ FLAG_AUTO_ADD_GPU,
++ FLAG_AUTO_BIND_GPU,
+ FLAG_MAX_CLIENTS,
+ FLAG_IGLX,
+ FLAG_DEBUG,
+@@ -699,6 +700,8 @@ static OptionInfoRec FlagOptions[] = {
+ {0}, FALSE},
+ {FLAG_AUTO_ADD_GPU, "AutoAddGPU", OPTV_BOOLEAN,
+ {0}, FALSE},
++ {FLAG_AUTO_BIND_GPU, "AutoBindGPU", OPTV_BOOLEAN,
++ {0}, FALSE},
+ {FLAG_MAX_CLIENTS, "MaxClients", OPTV_INTEGER,
+ {0}, FALSE },
+ {FLAG_IGLX, "IndirectGLX", OPTV_BOOLEAN,
+@@ -779,6 +782,22 @@ configServerFlags(XF86ConfFlagsPtr flagsconf, XF86OptionPtr layoutopts)
+ }
+ xf86Msg(from, "%sutomatically adding GPU devices\n",
+ xf86Info.autoAddGPU ? "A" : "Not a");
++
++ if (xf86AutoBindGPUDisabled) {
++ xf86Info.autoBindGPU = FALSE;
++ from = X_CMDLINE;
++ }
++ else if (xf86IsOptionSet(FlagOptions, FLAG_AUTO_BIND_GPU)) {
++ xf86GetOptValBool(FlagOptions, FLAG_AUTO_BIND_GPU,
++ &xf86Info.autoBindGPU);
++ from = X_CONFIG;
++ }
++ else {
++ from = X_DEFAULT;
++ }
++ xf86Msg(from, "%sutomatically binding GPU devices\n",
++ xf86Info.autoBindGPU ? "A" : "Not a");
++
+ /*
+ * Set things up based on the config file information. Some of these
+ * settings may be overridden later when the command line options are
+diff --git a/hw/xfree86/common/xf86Globals.c b/hw/xfree86/common/xf86Globals.c
+index e890f05..7b27b4c 100644
+--- a/hw/xfree86/common/xf86Globals.c
++++ b/hw/xfree86/common/xf86Globals.c
+@@ -131,6 +131,7 @@ xf86InfoRec xf86Info = {
+ #else
+ .autoAddGPU = FALSE,
+ #endif
++ .autoBindGPU = TRUE,
+ };
+
+ const char *xf86ConfigFile = NULL;
+@@ -191,6 +192,7 @@ Bool xf86FlipPixels = FALSE;
+ Gamma xf86Gamma = { 0.0, 0.0, 0.0 };
+
+ Bool xf86AllowMouseOpenFail = FALSE;
++Bool xf86AutoBindGPUDisabled = FALSE;
+
+ #ifdef XF86VIDMODE
+ Bool xf86VidModeDisabled = FALSE;
+diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c
+index ea42ec9..ec255b6 100644
+--- a/hw/xfree86/common/xf86Init.c
++++ b/hw/xfree86/common/xf86Init.c
+@@ -76,6 +76,7 @@
+ #include "xf86DDC.h"
+ #include "xf86Xinput.h"
+ #include "xf86InPriv.h"
++#include "xf86Crtc.h"
+ #include "picturestr.h"
+ #include "randrstr.h"
+ #include "glxvndabi.h"
+@@ -237,6 +238,19 @@ xf86PrivsElevated(void)
+ return PrivsElevated();
+ }
+
++static void
++xf86AutoConfigOutputDevices(void)
++{
++ int i;
++
++ if (!xf86Info.autoBindGPU)
++ return;
++
++ for (i = 0; i < xf86NumGPUScreens; i++)
++ RRProviderAutoConfigGpuScreen(xf86ScrnToScreen(xf86GPUScreens[i]),
++ xf86ScrnToScreen(xf86Screens[0]));
++}
++
+ static void
+ TrapSignals(void)
+ {
+@@ -770,6 +784,8 @@ InitOutput(ScreenInfo * pScreenInfo, int argc, char **argv)
+ for (i = 0; i < xf86NumGPUScreens; i++)
+ AttachUnboundGPU(xf86Screens[0]->pScreen, xf86GPUScreens[i]->pScreen);
+
++ xf86AutoConfigOutputDevices();
++
+ xf86VGAarbiterWrapFunctions();
+ if (sigio_blocked)
+ input_unlock();
+@@ -1278,6 +1294,10 @@ ddxProcessArgument(int argc, char **argv, int i)
+ xf86Info.iglxFrom = X_CMDLINE;
+ return 0;
+ }
++ if (!strcmp(argv[i], "-noautoBindGPU")) {
++ xf86AutoBindGPUDisabled = TRUE;
++ return 1;
++ }
+
+ /* OS-specific processing */
+ return xf86ProcessArgument(argc, argv, i);
+diff --git a/hw/xfree86/common/xf86Priv.h b/hw/xfree86/common/xf86Priv.h
+index 4fe2b5f..6566622 100644
+--- a/hw/xfree86/common/xf86Priv.h
++++ b/hw/xfree86/common/xf86Priv.h
+@@ -46,6 +46,7 @@
+ extern _X_EXPORT const char *xf86ConfigFile;
+ extern _X_EXPORT const char *xf86ConfigDir;
+ extern _X_EXPORT Bool xf86AllowMouseOpenFail;
++extern _X_EXPORT Bool xf86AutoBindGPUDisabled;
+
+ #ifdef XF86VIDMODE
+ extern _X_EXPORT Bool xf86VidModeDisabled;
+diff --git a/hw/xfree86/common/xf86Privstr.h b/hw/xfree86/common/xf86Privstr.h
+index 21c2e1f..6c71863 100644
+--- a/hw/xfree86/common/xf86Privstr.h
++++ b/hw/xfree86/common/xf86Privstr.h
+@@ -98,6 +98,7 @@ typedef struct {
+
+ Bool autoAddGPU;
+ const char *debug;
++ Bool autoBindGPU;
+ } xf86InfoRec, *xf86InfoPtr;
+
+ /* ISC's cc can't handle ~ of UL constants, so explicitly type cast them. */
+diff --git a/hw/xfree86/common/xf86platformBus.c b/hw/xfree86/common/xf86platformBus.c
+index cef47da..913a324 100644
+--- a/hw/xfree86/common/xf86platformBus.c
++++ b/hw/xfree86/common/xf86platformBus.c
+@@ -49,6 +49,7 @@
+ #include "Pci.h"
+ #include "xf86platformBus.h"
+ #include "xf86Config.h"
++#include "xf86Crtc.h"
+
+ #include "randrstr.h"
+ int platformSlotClaimed;
+@@ -665,6 +666,9 @@ xf86platformAddDevice(int index)
+ }
+ /* attach unbound to 0 protocol screen */
+ AttachUnboundGPU(xf86Screens[0]->pScreen, xf86GPUScreens[i]->pScreen);
++ if (xf86Info.autoBindGPU)
++ RRProviderAutoConfigGpuScreen(xf86ScrnToScreen(xf86GPUScreens[i]),
++ xf86ScrnToScreen(xf86Screens[0]));
+
+ RRResourcesChanged(xf86Screens[0]->pScreen);
+ RRTellChanged(xf86Screens[0]->pScreen);
+diff --git a/hw/xfree86/man/Xorg.man b/hw/xfree86/man/Xorg.man
+index 13a9dc3..745f986 100644
+--- a/hw/xfree86/man/Xorg.man
++++ b/hw/xfree86/man/Xorg.man
+@@ -283,6 +283,13 @@ is a comma separated list of directories to search for
+ server modules. This option is only available when the server is run
+ as root (i.e, with real-uid 0).
+ .TP 8
++.B \-noautoBindGPU
++Disable automatically setting secondary GPUs up as output sinks and offload
++sources. This is equivalent to setting the
++.B AutoBindGPU
++xorg.conf(__filemansuffix__) file option. To
++.B false.
++.TP 8
+ .B \-nosilk
+ Disable Silken Mouse support.
+ .TP 8
+diff --git a/hw/xfree86/man/xorg.conf.man b/hw/xfree86/man/xorg.conf.man
+index 9589262..8d51e06 100644
+--- a/hw/xfree86/man/xorg.conf.man
++++ b/hw/xfree86/man/xorg.conf.man
+@@ -672,6 +672,12 @@ Enabled by default.
+ If this option is disabled, then no GPU devices will be added from the udev
+ backend. Enabled by default. (May need to be disabled to setup Xinerama).
+ .TP 7
++.BI "Option \*qAutoBindGPU\*q \*q" boolean \*q
++If enabled then secondary GPUs will be automatically set up as output-sinks and
++offload-sources. Making e.g. laptop outputs connected only to the secondary
++GPU directly available for use without needing to run
++"xrandr --setprovideroutputsource". Enabled by default.
++.TP 7
+ .BI "Option \*qLog\*q \*q" string \*q
+ This option controls whether the log is flushed and/or synced to disk after
+ each message.
+diff --git a/randr/randrstr.h b/randr/randrstr.h
+index f94174b..092d726 100644
+--- a/randr/randrstr.h
++++ b/randr/randrstr.h
+@@ -1039,6 +1039,9 @@ RRProviderLookup(XID id, RRProviderPtr *provider_p);
+ extern _X_EXPORT void
+ RRDeliverProviderEvent(ClientPtr client, WindowPtr pWin, RRProviderPtr provider);
+
++extern _X_EXPORT void
++RRProviderAutoConfigGpuScreen(ScreenPtr pScreen, ScreenPtr masterScreen);
++
+ /* rrproviderproperty.c */
+
+ extern _X_EXPORT void
+diff --git a/randr/rrprovider.c b/randr/rrprovider.c
+index e4bc2bf..e04c18f 100644
+--- a/randr/rrprovider.c
++++ b/randr/rrprovider.c
+@@ -485,3 +485,25 @@ RRDeliverProviderEvent(ClientPtr client, WindowPtr pWin, RRProviderPtr provider)
+
+ WriteEventsToClient(client, 1, (xEvent *) &pe);
+ }
++
++void
++RRProviderAutoConfigGpuScreen(ScreenPtr pScreen, ScreenPtr masterScreen)
++{
++ rrScrPrivPtr pScrPriv = rrGetScrPriv(pScreen);
++ rrScrPrivPtr masterPriv = rrGetScrPriv(masterScreen);
++ RRProviderPtr provider = pScrPriv->provider;
++ RRProviderPtr master_provider = masterPriv->provider;
++
++ if (!provider || !master_provider)
++ return;
++
++ if ((provider->capabilities & RR_Capability_SinkOutput) &&
++ (master_provider->capabilities & RR_Capability_SourceOutput)) {
++ pScrPriv->rrProviderSetOutputSource(pScreen, provider, master_provider);
++ RRInitPrimeSyncProps(pScreen);
++ }
++
++ if ((provider->capabilities & RR_Capability_SourceOffload) &&
++ (master_provider->capabilities & RR_Capability_SinkOffload))
++ pScrPriv->rrProviderSetOffloadSink(pScreen, provider, master_provider);
++}
+--
+2.16.2
+
diff --git a/source/x/x11/patch/xorg-server/0001-xfree86-use-modesetting-driver-by-default-on-GeForce.patch b/source/x/x11/patch/xorg-server/0001-xfree86-use-modesetting-driver-by-default-on-GeForce.patch
new file mode 100644
index 000000000..1b1306e28
--- /dev/null
+++ b/source/x/x11/patch/xorg-server/0001-xfree86-use-modesetting-driver-by-default-on-GeForce.patch
@@ -0,0 +1,52 @@
+From aa2f34d80ef3118eae0cce73b610c36cdcb978fe Mon Sep 17 00:00:00 2001
+From: Ben Skeggs <bskeggs@redhat.com>
+Date: Sat, 22 Apr 2017 02:26:28 +1000
+Subject: [PATCH xserver] xfree86: use modesetting driver by default on GeForce
+ 8 and newer
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+---
+ hw/xfree86/common/xf86pciBus.c | 20 ++++++++++++++++++++
+ 1 file changed, 20 insertions(+)
+
+diff --git a/hw/xfree86/common/xf86pciBus.c b/hw/xfree86/common/xf86pciBus.c
+index 8158c2b62..78d1c947d 100644
+--- a/hw/xfree86/common/xf86pciBus.c
++++ b/hw/xfree86/common/xf86pciBus.c
+@@ -37,6 +37,7 @@
+ #include <unistd.h>
+ #include <X11/X.h>
+ #include <pciaccess.h>
++#include <xf86drm.h>
+ #include "os.h"
+ #include "Pci.h"
+ #include "xf86.h"
+@@ -1190,6 +1191,25 @@ xf86VideoPtrToDriverList(struct pci_device *dev,
+ int idx = 0;
+
+ #ifdef __linux__
++ char busid[32];
++ int fd;
++
++ snprintf(busid, sizeof(busid), "pci:%04x:%02x:%02x.%d",
++ dev->domain, dev->bus, dev->dev, dev->func);
++
++ /* 'modesetting' is preferred for GeForce 8 and newer GPUs */
++ fd = drmOpenWithType("nouveau", busid, DRM_NODE_RENDER);
++ if (fd >= 0) {
++ uint64_t args[] = { 11 /* NOUVEAU_GETPARAM_CHIPSET_ID */, 0 };
++ int ret = drmCommandWriteRead(fd, 0 /* DRM_NOUVEAU_GETPARAM */,
++ &args, sizeof(args));
++ drmClose(fd);
++ if (ret == 0) {
++ if (args[1] == 0x050 || args[1] >= 0x80)
++ break;
++ }
++ }
++
+ driverList[idx++] = "nouveau";
+ #endif
+ driverList[idx++] = "nv";
+--
+2.12.2
+
diff --git a/source/x/x11/patch/xorg-server/xserver-1-2-glamor-Always-return-0-from-glamor_fds_from_pixmap-on-error.patch b/source/x/x11/patch/xorg-server/xserver-1-2-glamor-Always-return-0-from-glamor_fds_from_pixmap-on-error.patch
new file mode 100644
index 000000000..32672f2b5
--- /dev/null
+++ b/source/x/x11/patch/xorg-server/xserver-1-2-glamor-Always-return-0-from-glamor_fds_from_pixmap-on-error.patch
@@ -0,0 +1,54 @@
+From patchwork Wed May 23 09:43:32 2018
+Content-Type: text/plain; charset="utf-8"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 8bit
+Subject: [xserver,
+ 1/2] glamor: Always return 0 from glamor_fds_from_pixmap on error
+From: =?utf-8?q?Michel_D=C3=A4nzer?= <michel@daenzer.net>
+X-Patchwork-Id: 224909
+Message-Id: <20180523094333.11076-1-michel@daenzer.net>
+To: =?UTF-8?q?Louis-Francis=20Ratt=C3=A9-Boulianne?= <lfrb@collabora.com>,
+ Daniel Stone <daniels@collabora.com>
+Cc: xorg-devel@lists.x.org
+Date: Wed, 23 May 2018 11:43:32 +0200
+
+From: Michel Dänzer <michel.daenzer@amd.com>
+
+This matches what glamor_egl_fds_from_pixmap and dri3_fds_from_pixmap do
+and what proc_dri3_buffers_from_pixmap expects.
+
+Fixes: c8c276c9569b "glamor: Implement PixmapFromBuffers and
+ BuffersFromPixmap"
+Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
+---
+ glamor/glamor.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/glamor/glamor.c b/glamor/glamor.c
+index d984d20f3..e2c74d17a 100644
+--- a/glamor/glamor.c
++++ b/glamor/glamor.c
+@@ -836,20 +836,20 @@ glamor_fds_from_pixmap(ScreenPtr screen, PixmapPtr pixmap, int *fds,
+ glamor_get_screen_private(pixmap->drawable.pScreen);
+
+ if (!glamor_priv->dri3_enabled)
+- return -1;
++ return 0;
+ switch (pixmap_priv->type) {
+ case GLAMOR_TEXTURE_DRM:
+ case GLAMOR_TEXTURE_ONLY:
+ if (!glamor_pixmap_ensure_fbo(pixmap, pixmap->drawable.depth == 30 ?
+ GL_RGB10_A2 : GL_RGBA, 0))
+- return -1;
++ return 0;
+ return glamor_egl_fds_from_pixmap(screen, pixmap, fds,
+ strides, offsets,
+ modifier);
+ default:
+ break;
+ }
+- return -1;
++ return 0;
+ }
+
+ _X_EXPORT int
diff --git a/source/x/x11/patch/xorg-server/xserver-2-2-glamor-Propagate-glamor_fds_from_pixmap-error-in-glamor_fd_from_pixmap.patch b/source/x/x11/patch/xorg-server/xserver-2-2-glamor-Propagate-glamor_fds_from_pixmap-error-in-glamor_fd_from_pixmap.patch
new file mode 100644
index 000000000..ab92d3fca
--- /dev/null
+++ b/source/x/x11/patch/xorg-server/xserver-2-2-glamor-Propagate-glamor_fds_from_pixmap-error-in-glamor_fd_from_pixmap.patch
@@ -0,0 +1,58 @@
+From patchwork Wed May 23 09:43:33 2018
+Content-Type: text/plain; charset="utf-8"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 8bit
+Subject: [xserver, 2/2] glamor: Propagate glamor_fds_from_pixmap error in
+ glamor_fd_from_pixmap
+From: =?utf-8?q?Michel_D=C3=A4nzer?= <michel@daenzer.net>
+X-Patchwork-Id: 224910
+Message-Id: <20180523094333.11076-2-michel@daenzer.net>
+To: =?UTF-8?q?Louis-Francis=20Ratt=C3=A9-Boulianne?= <lfrb@collabora.com>,
+ Daniel Stone <daniels@collabora.com>
+Cc: xorg-devel@lists.x.org
+Date: Wed, 23 May 2018 11:43:33 +0200
+
+From: Michel Dänzer <michel.daenzer@amd.com>
+
+glamor_fds_from_pixmap returns 0 on error, but we were treating that as
+success, continuing with uninitialized stride and fd values.
+
+Also bail if the offset isn't 0, same as in dri3_fd_from_pixmap.
+
+Fixes: c8c276c9569b "glamor: Implement PixmapFromBuffers and
+ BuffersFromPixmap"
+Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
+Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
+---
+ glamor/glamor.c | 16 +++++++---------
+ 1 file changed, 7 insertions(+), 9 deletions(-)
+
+diff --git a/glamor/glamor.c b/glamor/glamor.c
+index e2c74d17a..63f0947fa 100644
+--- a/glamor/glamor.c
++++ b/glamor/glamor.c
+@@ -865,17 +865,15 @@ glamor_fd_from_pixmap(ScreenPtr screen,
+ &modifier);
+
+ /* Pixmaps with multi-planes/modifier are not supported in this interface */
+- if (ret > 1) {
+- while (ret > 0)
+- close(fds[--ret]);
+- return -1;
++ if (ret == 1 && offsets[0] == 0) {
++ *stride = strides[0];
++ *size = pixmap->drawable.height * *stride;
++ return fds[0];
+ }
+
+- ret = fds[0];
+- *stride = strides[0];
+- *size = pixmap->drawable.height * *stride;
+-
+- return ret;
++ while (ret > 0)
++ close(fds[--ret]);
++ return -1;
+ }
+
+ _X_EXPORT int