diff -Nru xorg-server-1.20.5+git20190820/debian/changelog xorg-server-1.20.5+git20191008/debian/changelog --- xorg-server-1.20.5+git20190820/debian/changelog 2019-10-10 20:05:14.000000000 +0000 +++ xorg-server-1.20.5+git20191008/debian/changelog 2019-10-10 20:05:15.000000000 +0000 @@ -1,9 +1,25 @@ -xorg-server (2:1.20.5+git20190820-0ubuntu4ppa3) eoan; urgency=medium +xorg-server (2:1.20.5+git20191008-0ubuntu2ppa4) eoan; urgency=medium * Apllied patch from https://aur.archlinux.org/packages/xorg-server-bug865/ - as we need need to kick hotkeys on release, not press (LP: #1683383, #1245473) + as we need to kick hotkeys on release, not press (LP: #1683383, #1245473) - -- Norbert X Sat, 07 Sep 2019 19:23:06 +0300 + -- Norbert X Thu, 10 Oct 2019 23:01:08 +0300 + +xorg-server (2:1.20.5+git20191008-0ubuntu1) eoan; urgency=medium + + * Sync with current server-1.20-branch. + - includes Xwayland, abi fixes + - fix-abi-for-1.20.diff: Dropped, upstream + * rules: Fix ftbfs, remove the explicit build and build-indep targets. + + -- Timo Aaltonen Tue, 08 Oct 2019 12:43:30 +0300 + +xorg-server (2:1.20.5+git20190820-0ubuntu4) eoan; urgency=medium + + * dri2-set-fallback-names-amd-intel.diff: Use a fallback driver for + AMD and Intel. (LP: #1845149) + + -- Timo Aaltonen Tue, 24 Sep 2019 12:31:21 +0300 xorg-server (2:1.20.5+git20190820-0ubuntu3) eoan; urgency=medium diff -Nru xorg-server-1.20.5+git20190820/debian/patches/dri2-set-fallback-names-amd-intel.diff xorg-server-1.20.5+git20191008/debian/patches/dri2-set-fallback-names-amd-intel.diff --- xorg-server-1.20.5+git20190820/debian/patches/dri2-set-fallback-names-amd-intel.diff 1970-01-01 00:00:00.000000000 +0000 +++ xorg-server-1.20.5+git20191008/debian/patches/dri2-set-fallback-names-amd-intel.diff 2019-10-10 20:05:15.000000000 +0000 @@ -0,0 +1,35 @@ +https://gitlab.freedesktop.org/xorg/xserver/merge_requests/278 + +- we don't drop i965_chip_ids yet + +--- a/hw/xfree86/dri2/pci_ids/pci_id_driver_map.h ++++ b/hw/xfree86/dri2/pci_ids/pci_id_driver_map.h +@@ -45,12 +45,6 @@ static const int r600_chip_ids[] = { + #undef CHIPSET + }; + +-static const int radeonsi_chip_ids[] = { +-#define CHIPSET(chip, name, family) chip, +-#include "pci_ids/radeonsi_pci_ids.h" +-#undef CHIPSET +-}; +- + static const int virtio_gpu_chip_ids[] = { + #define CHIPSET(chip, name, family) chip, + #include "pci_ids/virtio_gpu_pci_ids.h" +@@ -71,13 +65,14 @@ static const struct { + } driver_map[] = { + { 0x8086, "i915", i915_chip_ids, ARRAY_SIZE(i915_chip_ids) }, + { 0x8086, "i965", i965_chip_ids, ARRAY_SIZE(i965_chip_ids) }, ++ { 0x8086, "i965", NULL, -1 }, + #ifndef DRIVER_MAP_GALLIUM_ONLY + { 0x1002, "radeon", r100_chip_ids, ARRAY_SIZE(r100_chip_ids) }, + { 0x1002, "r200", r200_chip_ids, ARRAY_SIZE(r200_chip_ids) }, + #endif + { 0x1002, "r300", r300_chip_ids, ARRAY_SIZE(r300_chip_ids) }, + { 0x1002, "r600", r600_chip_ids, ARRAY_SIZE(r600_chip_ids) }, +- { 0x1002, "radeonsi", radeonsi_chip_ids, ARRAY_SIZE(radeonsi_chip_ids) }, ++ { 0x1002, "radeonsi", NULL, -1 }, + { 0x10de, "nouveau", NULL, -1 }, + { 0x1af4, "virtio_gpu", virtio_gpu_chip_ids, ARRAY_SIZE(virtio_gpu_chip_ids) }, + { 0x15ad, "vmwgfx", vmwgfx_chip_ids, ARRAY_SIZE(vmwgfx_chip_ids) }, diff -Nru xorg-server-1.20.5+git20190820/debian/patches/fix-abi-for-1.20.diff xorg-server-1.20.5+git20191008/debian/patches/fix-abi-for-1.20.diff --- xorg-server-1.20.5+git20190820/debian/patches/fix-abi-for-1.20.diff 2019-10-10 20:05:14.000000000 +0000 +++ xorg-server-1.20.5+git20191008/debian/patches/fix-abi-for-1.20.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,37 +0,0 @@ -From 2c3ca9250852cb4624da81cb61e05ecd3e6e377a Mon Sep 17 00:00:00 2001 -From: Adam Jackson -Date: Mon, 19 Aug 2019 14:27:54 -0400 -Subject: [PATCH] miext/sync: Fix ABI for 1.20 - -The initialized field was added in: - - commit 82f01ad7869e3f2be51e41a8246dab5982bbc36a - Author: Alex Goins - Date: Wed Apr 10 13:48:02 2019 -0500 - - xsync: Add resource inside of SyncCreate, export SyncCreate - -But it added this field not at the end of SyncObject. It may not have -been _usefully_ possible to create those from another extension prior to -that commit, but that's still an ABI-incompatible change. ---- - miext/sync/misyncstr.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/miext/sync/misyncstr.h b/miext/sync/misyncstr.h -index 2a6e84a96..ea48a4519 100644 ---- a/miext/sync/misyncstr.h -+++ b/miext/sync/misyncstr.h -@@ -43,8 +43,8 @@ struct _SyncObject { - struct _SyncTriggerList *pTriglist; /* list of triggers */ - XID id; /* resource ID */ - unsigned char type; /* SYNC_* */ -- Bool initialized; /* FALSE if created but not initialized */ - Bool beingDestroyed; /* in process of going away */ -+ Bool initialized; /* FALSE if created but not initialized */ - }; - - typedef struct _SyncCounter { --- -2.21.0 - diff -Nru xorg-server-1.20.5+git20190820/debian/patches/series xorg-server-1.20.5+git20191008/debian/patches/series --- xorg-server-1.20.5+git20190820/debian/patches/series 2019-10-10 20:05:14.000000000 +0000 +++ xorg-server-1.20.5+git20191008/debian/patches/series 2019-10-10 20:05:15.000000000 +0000 @@ -24,7 +24,7 @@ xi2-resize-touch.patch fix-default-permissions.patch reset-transforms-in-closescreen.diff -fix-abi-for-1.20.diff dri2-use-va-gl-for-intel.diff modesetting-Disable-atomic-support-by-default.patch compiler.h-Do-not-include-sys-io.h-on-ARM-with-glibc.patch +dri2-set-fallback-names-amd-intel.diff diff -Nru xorg-server-1.20.5+git20190820/debian/rules xorg-server-1.20.5+git20191008/debian/rules --- xorg-server-1.20.5+git20190820/debian/rules 2019-10-10 20:05:14.000000000 +0000 +++ xorg-server-1.20.5+git20191008/debian/rules 2019-10-10 20:05:15.000000000 +0000 @@ -7,7 +7,11 @@ %: dh $@ --with quilt,autoreconf --parallel -build-source-stamp: +override_dh_autoreconf-arch: abibumpcheck + dh_autoreconf + +override_dh_autoreconf-indep: + dh_autoreconf mkdir -p build-source tar \ --owner=0 --group=0 \ @@ -15,7 +19,6 @@ --exclude=debian \ --exclude=autom4te.cache \ -cf - * | xz > build-source/xorg-server.tar.xz - >$@ override_dh_auto_configure: dh_auto_configure --builddirectory=debian/build/main -- \ @@ -34,9 +37,6 @@ override_dh_auto_test: dh_auto_test -- -j1 VERBOSE=1 -build: abibumpcheck -build-indep: build-source-stamp - override_dh_auto_install: dh_auto_install --builddirectory=debian/build/main \ --destdir=debian/tmp/main diff -Nru xorg-server-1.20.5+git20190820/dix/.gitignore xorg-server-1.20.5+git20191008/dix/.gitignore --- xorg-server-1.20.5+git20190820/dix/.gitignore 1970-01-01 00:00:00.000000000 +0000 +++ xorg-server-1.20.5+git20191008/dix/.gitignore 2019-09-26 16:26:45.000000000 +0000 @@ -0,0 +1,3 @@ +# Add & Override for this directory and it's subdirectories +Xserver-dtrace.h +dix.O diff -Nru xorg-server-1.20.5+git20190820/doc/dtrace/.gitignore xorg-server-1.20.5+git20191008/doc/dtrace/.gitignore --- xorg-server-1.20.5+git20190820/doc/dtrace/.gitignore 1970-01-01 00:00:00.000000000 +0000 +++ xorg-server-1.20.5+git20191008/doc/dtrace/.gitignore 2019-09-26 16:26:45.000000000 +0000 @@ -0,0 +1,5 @@ +*.html +*.pdf +*.ps +*.txt +*.db diff -Nru xorg-server-1.20.5+git20190820/doc/.gitignore xorg-server-1.20.5+git20191008/doc/.gitignore --- xorg-server-1.20.5+git20190820/doc/.gitignore 1970-01-01 00:00:00.000000000 +0000 +++ xorg-server-1.20.5+git20191008/doc/.gitignore 2019-09-26 16:26:45.000000000 +0000 @@ -0,0 +1,4 @@ +*.html +*.pdf +*.ps +*.txt diff -Nru xorg-server-1.20.5+git20190820/.gitignore xorg-server-1.20.5+git20191008/.gitignore --- xorg-server-1.20.5+git20190820/.gitignore 1970-01-01 00:00:00.000000000 +0000 +++ xorg-server-1.20.5+git20191008/.gitignore 2019-09-26 16:26:45.000000000 +0000 @@ -0,0 +1,82 @@ +# +# X.Org module default exclusion patterns +# The next section if for module specific patterns +# +# Do not edit the following section +# GNU Build System (Autotools) +aclocal.m4 +autom4te.cache/ +autoscan.log +ChangeLog +compile +config.guess +config.h +config.h.in +config.log +config-ml.in +config.py +config.status +config.status.lineno +config.sub +configure +configure.scan +depcomp +.deps/ +INSTALL +install-sh +.libs/ +libtool +libtool.m4 +ltmain.sh +lt~obsolete.m4 +ltoptions.m4 +ltsugar.m4 +ltversion.m4 +Makefile +Makefile.in +mdate-sh +missing +mkinstalldirs +*.pc +py-compile +stamp-h? +symlink-tree +test-driver +texinfo.tex +ylwrap + +# Do not edit the following section +# Edit Compile Debug Document Distribute +*~ +*.[0-9] +*.[0-9]x +*.bak +*.bin +core +*.dll +*.exe +*-ISO*.bdf +*-JIS*.bdf +*-KOI8*.bdf +*.kld +*.ko +*.ko.cmd +*.lai +*.l[oa] +*.[oa] +*.obj +*.patch +*.so +*.pcf.gz +*.pdb +*.tar.bz2 +*.tar.gz +# +# Add & Override patterns for xserver +# +# Edit the following section as needed +# For example, !report.pc overrides *.pc. See 'man gitignore' +# +doltcompile +doltlibtool +xserver.ent diff -Nru xorg-server-1.20.5+git20190820/glx/glxcmds.c xorg-server-1.20.5+git20191008/glx/glxcmds.c --- xorg-server-1.20.5+git20190820/glx/glxcmds.c 2019-08-20 05:37:10.000000000 +0000 +++ xorg-server-1.20.5+git20191008/glx/glxcmds.c 2019-09-26 16:26:45.000000000 +0000 @@ -574,10 +574,8 @@ /* Look up old context. If we have one, it must be in a usable state. */ if (tag != 0) { prevglxc = glxServer.getContextTagPrivate(client, tag); - if (!prevglxc) - return __glXError(GLXBadContextTag); - if (prevglxc->renderMode != GL_RENDER) { + if (prevglxc && prevglxc->renderMode != GL_RENDER) { /* Oops. Not in render mode render. */ client->errorValue = prevglxc->id; return __glXError(GLXBadContextState); diff -Nru xorg-server-1.20.5+git20190820/hw/dmx/config/.gitignore xorg-server-1.20.5+git20191008/hw/dmx/config/.gitignore --- xorg-server-1.20.5+git20190820/hw/dmx/config/.gitignore 1970-01-01 00:00:00.000000000 +0000 +++ xorg-server-1.20.5+git20191008/hw/dmx/config/.gitignore 2019-09-26 16:26:45.000000000 +0000 @@ -0,0 +1,7 @@ +# Add & Override for this directory and it's subdirectories +dmxtodmx +parser.c +parser.h +scanner.c +vdltodmx +xdmxconfig diff -Nru xorg-server-1.20.5+git20190820/hw/dmx/doc/.gitignore xorg-server-1.20.5+git20191008/hw/dmx/doc/.gitignore --- xorg-server-1.20.5+git20190820/hw/dmx/doc/.gitignore 1970-01-01 00:00:00.000000000 +0000 +++ xorg-server-1.20.5+git20191008/hw/dmx/doc/.gitignore 2019-09-26 16:26:45.000000000 +0000 @@ -0,0 +1,6 @@ +*.html +*.pdf +*.ps +*.txt +!DMXSpec.txt +!DMXSpec-v1.txt diff -Nru xorg-server-1.20.5+git20190820/hw/dmx/doxygen/.gitignore xorg-server-1.20.5+git20191008/hw/dmx/doxygen/.gitignore --- xorg-server-1.20.5+git20190820/hw/dmx/doxygen/.gitignore 1970-01-01 00:00:00.000000000 +0000 +++ xorg-server-1.20.5+git20191008/hw/dmx/doxygen/.gitignore 2019-09-26 16:26:45.000000000 +0000 @@ -0,0 +1,2 @@ +html/ +doxygen.conf diff -Nru xorg-server-1.20.5+git20190820/hw/dmx/examples/.gitignore xorg-server-1.20.5+git20191008/hw/dmx/examples/.gitignore --- xorg-server-1.20.5+git20190820/hw/dmx/examples/.gitignore 1970-01-01 00:00:00.000000000 +0000 +++ xorg-server-1.20.5+git20191008/hw/dmx/examples/.gitignore 2019-09-26 16:26:45.000000000 +0000 @@ -0,0 +1,17 @@ +# Add & Override for this directory and it's subdirectories +dmxaddinput +dmxaddscreen +dmxinfo +dmxreconfig +dmxresize +dmxrminput +dmxrmscreen +dmxwininfo +ev +evi +res +xbell +xinput +xled +xtest + diff -Nru xorg-server-1.20.5+git20190820/hw/dmx/.gitignore xorg-server-1.20.5+git20191008/hw/dmx/.gitignore --- xorg-server-1.20.5+git20190820/hw/dmx/.gitignore 1970-01-01 00:00:00.000000000 +0000 +++ xorg-server-1.20.5+git20191008/hw/dmx/.gitignore 2019-09-26 16:26:45.000000000 +0000 @@ -0,0 +1,2 @@ +# Add & Override for this directory and it's subdirectories +Xdmx diff -Nru xorg-server-1.20.5+git20190820/hw/kdrive/ephyr/.gitignore xorg-server-1.20.5+git20191008/hw/kdrive/ephyr/.gitignore --- xorg-server-1.20.5+git20190820/hw/kdrive/ephyr/.gitignore 1970-01-01 00:00:00.000000000 +0000 +++ xorg-server-1.20.5+git20191008/hw/kdrive/ephyr/.gitignore 2019-09-26 16:26:45.000000000 +0000 @@ -0,0 +1 @@ +Xephyr diff -Nru xorg-server-1.20.5+git20190820/hw/vfb/.gitignore xorg-server-1.20.5+git20191008/hw/vfb/.gitignore --- xorg-server-1.20.5+git20190820/hw/vfb/.gitignore 1970-01-01 00:00:00.000000000 +0000 +++ xorg-server-1.20.5+git20191008/hw/vfb/.gitignore 2019-09-26 16:26:45.000000000 +0000 @@ -0,0 +1 @@ +Xvfb diff -Nru xorg-server-1.20.5+git20190820/hw/xfree86/common/.gitignore xorg-server-1.20.5+git20191008/hw/xfree86/common/.gitignore --- xorg-server-1.20.5+git20190820/hw/xfree86/common/.gitignore 1970-01-01 00:00:00.000000000 +0000 +++ xorg-server-1.20.5+git20191008/hw/xfree86/common/.gitignore 2019-09-26 16:26:45.000000000 +0000 @@ -0,0 +1,3 @@ +# Add & Override for this directory and it's subdirectories +xf86Build.h +xf86DefModeSet.c diff -Nru xorg-server-1.20.5+git20190820/hw/xfree86/doc/.gitignore xorg-server-1.20.5+git20191008/hw/xfree86/doc/.gitignore --- xorg-server-1.20.5+git20190820/hw/xfree86/doc/.gitignore 1970-01-01 00:00:00.000000000 +0000 +++ xorg-server-1.20.5+git20191008/hw/xfree86/doc/.gitignore 2019-09-26 16:26:45.000000000 +0000 @@ -0,0 +1,4 @@ +ddxDesign.html +ddxDesign.pdf +ddxDesign.ps +ddxDesign.txt diff -Nru xorg-server-1.20.5+git20190820/hw/xfree86/.gitignore xorg-server-1.20.5+git20191008/hw/xfree86/.gitignore --- xorg-server-1.20.5+git20190820/hw/xfree86/.gitignore 1970-01-01 00:00:00.000000000 +0000 +++ xorg-server-1.20.5+git20191008/hw/xfree86/.gitignore 2019-09-26 16:26:45.000000000 +0000 @@ -0,0 +1,6 @@ +Xorg +Xorg.wrap +Xorg.sh +xorg.conf.example +sdksyms.c +sdksyms.dep diff -Nru xorg-server-1.20.5+git20190820/hw/xfree86/modes/xf86RandR12.c xorg-server-1.20.5+git20191008/hw/xfree86/modes/xf86RandR12.c --- xorg-server-1.20.5+git20190820/hw/xfree86/modes/xf86RandR12.c 2019-08-20 06:44:35.000000000 +0000 +++ xorg-server-1.20.5+git20191008/hw/xfree86/modes/xf86RandR12.c 2019-09-26 16:26:45.000000000 +0000 @@ -2226,6 +2226,7 @@ { int c; int o; + ScrnInfoPtr scrn = xf86ScreenToScrn(lease->screen); RRLeaseTerminated(lease); /* @@ -2256,6 +2257,10 @@ xf86CrtcCheckReset(crtc); } } + + /* Power off if necessary */ + xf86DisableUnusedFunctions(scrn); + RRLeaseFree(lease); } diff -Nru xorg-server-1.20.5+git20190820/hw/xfree86/utils/cvt/.gitignore xorg-server-1.20.5+git20191008/hw/xfree86/utils/cvt/.gitignore --- xorg-server-1.20.5+git20190820/hw/xfree86/utils/cvt/.gitignore 1970-01-01 00:00:00.000000000 +0000 +++ xorg-server-1.20.5+git20191008/hw/xfree86/utils/cvt/.gitignore 2019-09-26 16:26:45.000000000 +0000 @@ -0,0 +1 @@ +cvt diff -Nru xorg-server-1.20.5+git20190820/hw/xfree86/utils/gtf/.gitignore xorg-server-1.20.5+git20191008/hw/xfree86/utils/gtf/.gitignore --- xorg-server-1.20.5+git20190820/hw/xfree86/utils/gtf/.gitignore 1970-01-01 00:00:00.000000000 +0000 +++ xorg-server-1.20.5+git20191008/hw/xfree86/utils/gtf/.gitignore 2019-09-26 16:26:45.000000000 +0000 @@ -0,0 +1 @@ +gtf diff -Nru xorg-server-1.20.5+git20190820/hw/xnest/.gitignore xorg-server-1.20.5+git20191008/hw/xnest/.gitignore --- xorg-server-1.20.5+git20190820/hw/xnest/.gitignore 1970-01-01 00:00:00.000000000 +0000 +++ xorg-server-1.20.5+git20191008/hw/xnest/.gitignore 2019-09-26 16:26:45.000000000 +0000 @@ -0,0 +1 @@ +Xnest diff -Nru xorg-server-1.20.5+git20190820/hw/xquartz/bundle/.gitignore xorg-server-1.20.5+git20191008/hw/xquartz/bundle/.gitignore --- xorg-server-1.20.5+git20190820/hw/xquartz/bundle/.gitignore 1970-01-01 00:00:00.000000000 +0000 +++ xorg-server-1.20.5+git20191008/hw/xquartz/bundle/.gitignore 2019-09-26 16:26:45.000000000 +0000 @@ -0,0 +1 @@ +Info.plist diff -Nru xorg-server-1.20.5+git20190820/hw/xquartz/mach-startup/.gitignore xorg-server-1.20.5+git20191008/hw/xquartz/mach-startup/.gitignore --- xorg-server-1.20.5+git20190820/hw/xquartz/mach-startup/.gitignore 1970-01-01 00:00:00.000000000 +0000 +++ xorg-server-1.20.5+git20191008/hw/xquartz/mach-startup/.gitignore 2019-09-26 16:26:45.000000000 +0000 @@ -0,0 +1,8 @@ +# Add & Override for this directory and it's subdirectories +mach_startup.h +mach_startupServer.c +mach_startupServer.h +mach_startupUser.c +X11.bin +Xquartz + diff -Nru xorg-server-1.20.5+git20190820/hw/xquartz/pbproxy/.gitignore xorg-server-1.20.5+git20191008/hw/xquartz/pbproxy/.gitignore --- xorg-server-1.20.5+git20190820/hw/xquartz/pbproxy/.gitignore 1970-01-01 00:00:00.000000000 +0000 +++ xorg-server-1.20.5+git20191008/hw/xquartz/pbproxy/.gitignore 2019-09-26 16:26:45.000000000 +0000 @@ -0,0 +1 @@ +xpbproxy diff -Nru xorg-server-1.20.5+git20190820/hw/xwayland/.gitignore xorg-server-1.20.5+git20191008/hw/xwayland/.gitignore --- xorg-server-1.20.5+git20190820/hw/xwayland/.gitignore 1970-01-01 00:00:00.000000000 +0000 +++ xorg-server-1.20.5+git20191008/hw/xwayland/.gitignore 2019-09-26 16:26:45.000000000 +0000 @@ -0,0 +1,9 @@ +Xwayland +drm-client-protocol.h +drm-protocol.c +pointer-constraints-unstable-v1-client-protocol.h +pointer-constraints-unstable-v1-protocol.c +relative-pointer-unstable-v1-client-protocol.h +relative-pointer-unstable-v1-protocol.c +linux-dmabuf-unstable-v1-client-protocol.h +linux-dmabuf-unstable-v1-protocol.c diff -Nru xorg-server-1.20.5+git20190820/hw/xwayland/xwayland.c xorg-server-1.20.5+git20191008/hw/xwayland/xwayland.c --- xorg-server-1.20.5+git20190820/hw/xwayland/xwayland.c 2019-08-20 05:37:10.000000000 +0000 +++ xorg-server-1.20.5+git20191008/hw/xwayland/xwayland.c 2019-09-26 16:26:45.000000000 +0000 @@ -125,6 +125,7 @@ static DevPrivateKeyRec xwl_window_private_key; static DevPrivateKeyRec xwl_screen_private_key; static DevPrivateKeyRec xwl_pixmap_private_key; +static DevPrivateKeyRec xwl_damage_private_key; static struct xwl_window * xwl_window_get(WindowPtr window) @@ -367,8 +368,14 @@ static void damage_report(DamagePtr pDamage, RegionPtr pRegion, void *data) { - struct xwl_window *xwl_window = data; - struct xwl_screen *xwl_screen = xwl_window->xwl_screen; + WindowPtr window = data; + struct xwl_window *xwl_window = xwl_window_get(window); + struct xwl_screen *xwl_screen; + + if (!xwl_window) + return; + + xwl_screen = xwl_window->xwl_screen; #ifdef GLAMOR_HAS_GBM if (xwl_window->present_flipped) { @@ -390,6 +397,47 @@ { } +static Bool +register_damage(WindowPtr window) +{ + DamagePtr damage; + + damage = DamageCreate(damage_report, damage_destroy, DamageReportNonEmpty, + FALSE, window->drawable.pScreen, window); + if (damage == NULL) { + ErrorF("Failed creating damage\n"); + return FALSE; + } + + DamageRegister(&window->drawable, damage); + DamageSetReportAfterOp(damage, TRUE); + + dixSetPrivate(&window->devPrivates, &xwl_damage_private_key, damage); + + return TRUE; +} + +static void +unregister_damage(WindowPtr window) +{ + DamagePtr damage; + + damage = dixLookupPrivate(&window->devPrivates, &xwl_damage_private_key); + if (!damage) + return; + + DamageUnregister(damage); + DamageDestroy(damage); + + dixSetPrivate(&window->devPrivates, &xwl_damage_private_key, NULL); +} + +static DamagePtr +window_get_damage(WindowPtr window) +{ + return dixLookupPrivate(&window->devPrivates, &xwl_damage_private_key); +} + static void shell_surface_ping(void *data, struct wl_shell_surface *shell_surface, uint32_t serial) @@ -470,36 +518,25 @@ } static Bool -xwl_realize_window(WindowPtr window) +ensure_surface_for_window(WindowPtr window) { ScreenPtr screen = window->drawable.pScreen; struct xwl_screen *xwl_screen; struct xwl_window *xwl_window; struct wl_region *region; - Bool ret; - - xwl_screen = xwl_screen_get(screen); - - screen->RealizeWindow = xwl_screen->RealizeWindow; - ret = (*screen->RealizeWindow) (window); - xwl_screen->RealizeWindow = screen->RealizeWindow; - screen->RealizeWindow = xwl_realize_window; - if (xwl_screen->rootless && !window->parent) { - BoxRec box = { 0, 0, xwl_screen->width, xwl_screen->height }; + if (xwl_window_get(window)) + return TRUE; - RegionReset(&window->winSize, &box); - RegionNull(&window->clipList); - RegionNull(&window->borderClip); - } + xwl_screen = xwl_screen_get(screen); if (xwl_screen->rootless) { if (window->redirectDraw != RedirectDrawManual) - return ret; + return TRUE; } else { if (window->parent) - return ret; + return TRUE; } xwl_window = calloc(1, sizeof *xwl_window); @@ -545,25 +582,14 @@ wl_surface_set_user_data(xwl_window->surface, xwl_window); - xwl_window->damage = - DamageCreate(damage_report, damage_destroy, DamageReportNonEmpty, - FALSE, screen, xwl_window); - if (xwl_window->damage == NULL) { - ErrorF("Failed creating damage\n"); - goto err_surf; - } - compRedirectWindow(serverClient, window, CompositeRedirectManual); - DamageRegister(&window->drawable, xwl_window->damage); - DamageSetReportAfterOp(xwl_window->damage, TRUE); - dixSetPrivate(&window->devPrivates, &xwl_window_private_key, xwl_window); xorg_list_init(&xwl_window->link_damage); xwl_window_init_allow_commits(xwl_window); - return ret; + return TRUE; err_surf: if (xwl_window->shell_surface) @@ -575,6 +601,42 @@ } static Bool +xwl_realize_window(WindowPtr window) +{ + ScreenPtr screen = window->drawable.pScreen; + struct xwl_screen *xwl_screen; + Bool ret; + + xwl_screen = xwl_screen_get(screen); + + screen->RealizeWindow = xwl_screen->RealizeWindow; + ret = (*screen->RealizeWindow) (window); + xwl_screen->RealizeWindow = screen->RealizeWindow; + screen->RealizeWindow = xwl_realize_window; + + if (!ret) + return FALSE; + + if (xwl_screen->rootless && !window->parent) { + BoxRec box = { 0, 0, xwl_screen->width, xwl_screen->height }; + + RegionReset(&window->winSize, &box); + RegionNull(&window->clipList); + RegionNull(&window->borderClip); + } + + if (xwl_screen->rootless ? + (window->drawable.class == InputOutput && + window->parent == window->drawable.pScreen->root) : + !window->parent) { + if (!register_damage(window)) + return FALSE; + } + + return ensure_surface_for_window(window); +} + +static Bool xwl_unrealize_window(WindowPtr window) { ScreenPtr screen = window->drawable.pScreen; @@ -620,8 +682,8 @@ wl_surface_destroy(xwl_window->surface); xorg_list_del(&xwl_window->link_damage); - DamageUnregister(xwl_window->damage); - DamageDestroy(xwl_window->damage); + unregister_damage(window); + if (xwl_window->frame_callback) wl_callback_destroy(xwl_window->frame_callback); @@ -638,6 +700,26 @@ } static void +xwl_set_window_pixmap(WindowPtr window, + PixmapPtr pixmap) +{ + ScreenPtr screen = window->drawable.pScreen; + struct xwl_screen *xwl_screen; + + xwl_screen = xwl_screen_get(screen); + + screen->SetWindowPixmap = xwl_screen->SetWindowPixmap; + (*screen->SetWindowPixmap) (window, pixmap); + xwl_screen->SetWindowPixmap = screen->SetWindowPixmap; + screen->SetWindowPixmap = xwl_set_window_pixmap; + + if (!RegionNotEmpty(&window->winSize)) + return; + + ensure_surface_for_window(window); +} + +static void frame_callback(void *data, struct wl_callback *callback, uint32_t time) @@ -689,7 +771,7 @@ assert(!xwl_window->frame_callback); - region = DamageRegion(xwl_window->damage); + region = DamageRegion(window_get_damage(xwl_window->window)); pixmap = (*xwl_screen->screen->GetWindowPixmap) (xwl_window->window); #ifdef XWL_HAS_GLAMOR @@ -726,7 +808,7 @@ wl_callback_add_listener(xwl_window->frame_callback, &frame_listener, xwl_window); wl_surface_commit(xwl_window->surface); - DamageEmpty(xwl_window->damage); + DamageEmpty(window_get_damage(xwl_window->window)); xorg_list_del(&xwl_window->link_damage); } @@ -962,6 +1044,8 @@ return FALSE; if (!dixRegisterPrivateKey(&xwl_pixmap_private_key, PRIVATE_PIXMAP, 0)) return FALSE; + if (!dixRegisterPrivateKey(&xwl_damage_private_key, PRIVATE_WINDOW, 0)) + return FALSE; dixSetPrivate(&pScreen->devPrivates, &xwl_screen_private_key, xwl_screen); xwl_screen->screen = pScreen; @@ -1121,6 +1205,11 @@ xwl_screen->CloseScreen = pScreen->CloseScreen; pScreen->CloseScreen = xwl_close_screen; + if (xwl_screen->rootless) { + xwl_screen->SetWindowPixmap = pScreen->SetWindowPixmap; + pScreen->SetWindowPixmap = xwl_set_window_pixmap; + } + pScreen->CursorWarpedTo = xwl_cursor_warped_to; pScreen->CursorConfinedTo = xwl_cursor_confined_to; diff -Nru xorg-server-1.20.5+git20190820/hw/xwayland/xwayland.h xorg-server-1.20.5+git20191008/hw/xwayland/xwayland.h --- xorg-server-1.20.5+git20190820/hw/xwayland/xwayland.h 2019-08-20 05:37:10.000000000 +0000 +++ xorg-server-1.20.5+git20191008/hw/xwayland/xwayland.h 2019-09-26 16:26:45.000000000 +0000 @@ -133,6 +133,7 @@ UnrealizeWindowProcPtr UnrealizeWindow; DestroyWindowProcPtr DestroyWindow; XYToWindowProcPtr XYToWindow; + SetWindowPixmapProcPtr SetWindowPixmap; struct xorg_list output_list; struct xorg_list seat_list; @@ -178,7 +179,6 @@ struct wl_surface *surface; struct wl_shell_surface *shell_surface; WindowPtr window; - DamagePtr damage; struct xorg_list link_damage; struct wl_callback *frame_callback; Bool allow_commits; diff -Nru xorg-server-1.20.5+git20190820/hw/xwin/.gitignore xorg-server-1.20.5+git20191008/hw/xwin/.gitignore --- xorg-server-1.20.5+git20190820/hw/xwin/.gitignore 1970-01-01 00:00:00.000000000 +0000 +++ xorg-server-1.20.5+git20191008/hw/xwin/.gitignore 2019-09-26 16:26:45.000000000 +0000 @@ -0,0 +1,3 @@ +winprefslex.c +winprefsyacc.c +winprefsyacc.h diff -Nru xorg-server-1.20.5+git20190820/hw/xwin/glx/.gitignore xorg-server-1.20.5+git20191008/hw/xwin/glx/.gitignore --- xorg-server-1.20.5+git20190820/hw/xwin/glx/.gitignore 1970-01-01 00:00:00.000000000 +0000 +++ xorg-server-1.20.5+git20191008/hw/xwin/glx/.gitignore 2019-09-26 16:26:45.000000000 +0000 @@ -0,0 +1,6 @@ +# ignore generated files +diag.txt +generated_gl_shim.c +generated_gl_thunks.c +generated_gl_thunks.def +generated_wgl_wrappers.c diff -Nru xorg-server-1.20.5+git20190820/include/.gitignore xorg-server-1.20.5+git20191008/include/.gitignore --- xorg-server-1.20.5+git20190820/include/.gitignore 1970-01-01 00:00:00.000000000 +0000 +++ xorg-server-1.20.5+git20191008/include/.gitignore 2019-09-26 16:26:45.000000000 +0000 @@ -0,0 +1,5 @@ +# Add & Override for this directory and it's subdirectories +*-config.h +do-not-use-config.h.in +xorg-server.h + diff -Nru xorg-server-1.20.5+git20190820/miext/sync/misyncstr.h xorg-server-1.20.5+git20191008/miext/sync/misyncstr.h --- xorg-server-1.20.5+git20190820/miext/sync/misyncstr.h 2019-08-20 06:44:35.000000000 +0000 +++ xorg-server-1.20.5+git20191008/miext/sync/misyncstr.h 2019-09-26 16:26:45.000000000 +0000 @@ -43,7 +43,7 @@ struct _SyncTriggerList *pTriglist; /* list of triggers */ XID id; /* resource ID */ unsigned char type; /* SYNC_* */ - Bool initialized; /* FALSE if created but not initialized */ + unsigned char initialized; /* FALSE if created but not initialized */ Bool beingDestroyed; /* in process of going away */ }; diff -Nru xorg-server-1.20.5+git20190820/modesetting-Disable-atomic-support-by-default.patch xorg-server-1.20.5+git20191008/modesetting-Disable-atomic-support-by-default.patch --- xorg-server-1.20.5+git20190820/modesetting-Disable-atomic-support-by-default.patch 2019-10-10 20:05:14.000000000 +0000 +++ xorg-server-1.20.5+git20191008/modesetting-Disable-atomic-support-by-default.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,68 +0,0 @@ -From f0d78b47ac49977a6007f5fe081f00c6eb19a12e Mon Sep 17 00:00:00 2001 -From: Maarten Lankhorst -Date: Thu, 25 Apr 2019 11:46:41 +0200 -Subject: [PATCH] modesetting: Disable atomic support by default - -The atomic driver has issues with modesetting when stealing -connectors from a different crtc, a black screen when doing rotation -on a different crtc, and in general is just a mapping of the legacy -helpers to atomic. This is already done in the kernel, so just -fallback to legacy by default until this is fixed. - -Please backport to 1.20, as we don't want to enable it for everyone -there. It breaks for existing users. - -The fixes to make the xserver more atomic have been pending on the -mailing list for ages. - -Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=110375 -Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=110030 -References: https://gitlab.freedesktop.org/xorg/xserver/merge_requests/36/commits -Signed-off-by: Maarten Lankhorst ---- - hw/xfree86/drivers/modesetting/driver.c | 9 +++++++-- - hw/xfree86/drivers/modesetting/driver.h | 1 + - 2 files changed, 8 insertions(+), 2 deletions(-) - -diff --git a/hw/xfree86/drivers/modesetting/driver.c b/hw/xfree86/drivers/modesetting/driver.c -index 6f9f7c43a..61db67ab4 100644 ---- a/hw/xfree86/drivers/modesetting/driver.c -+++ b/hw/xfree86/drivers/modesetting/driver.c -@@ -132,6 +132,7 @@ static const OptionInfoRec Options[] = { - {OPTION_PAGEFLIP, "PageFlip", OPTV_BOOLEAN, {0}, FALSE}, - {OPTION_ZAPHOD_HEADS, "ZaphodHeads", OPTV_STRING, {0}, FALSE}, - {OPTION_DOUBLE_SHADOW, "DoubleShadow", OPTV_BOOLEAN, {0}, FALSE}, -+ {OPTION_ATOMIC, "Atomic", OPTV_BOOLEAN, {0}, FALSE}, - {-1, NULL, OPTV_NONE, {0}, FALSE} - }; - -@@ -1039,8 +1040,12 @@ PreInit(ScrnInfoPtr pScrn, int flags) - #endif - } - -- ret = drmSetClientCap(ms->fd, DRM_CLIENT_CAP_ATOMIC, 1); -- ms->atomic_modeset = (ret == 0); -+ if (xf86ReturnOptValBool(ms->drmmode.Options, OPTION_ATOMIC, FALSE)) { -+ ret = drmSetClientCap(ms->fd, DRM_CLIENT_CAP_ATOMIC, 1); -+ ms->atomic_modeset = (ret == 0); -+ } else { -+ ms->atomic_modeset = FALSE; -+ } - - ms->kms_has_modifiers = FALSE; - ret = drmGetCap(ms->fd, DRM_CAP_ADDFB2_MODIFIERS, &value); -diff --git a/hw/xfree86/drivers/modesetting/driver.h b/hw/xfree86/drivers/modesetting/driver.h -index 7511de6d3..8355abf98 100644 ---- a/hw/xfree86/drivers/modesetting/driver.h -+++ b/hw/xfree86/drivers/modesetting/driver.h -@@ -51,6 +51,7 @@ typedef enum { - OPTION_PAGEFLIP, - OPTION_ZAPHOD_HEADS, - OPTION_DOUBLE_SHADOW, -+ OPTION_ATOMIC, - } modesettingOpts; - - typedef struct --- -2.20.1 - diff -Nru xorg-server-1.20.5+git20190820/os/.gitignore xorg-server-1.20.5+git20191008/os/.gitignore --- xorg-server-1.20.5+git20190820/os/.gitignore 1970-01-01 00:00:00.000000000 +0000 +++ xorg-server-1.20.5+git20191008/os/.gitignore 2019-09-26 16:26:45.000000000 +0000 @@ -0,0 +1 @@ +os.O diff -Nru xorg-server-1.20.5+git20190820/test/.gitignore xorg-server-1.20.5+git20191008/test/.gitignore --- xorg-server-1.20.5+git20190820/test/.gitignore 1970-01-01 00:00:00.000000000 +0000 +++ xorg-server-1.20.5+git20191008/test/.gitignore 2019-09-26 16:26:45.000000000 +0000 @@ -0,0 +1,7 @@ +tests +os +sdksyms.c +piglit-results +simple-xinit +*.log +*.trs