From 316c5e554546bdf7adfe91ddc3dba3254c17193a Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Sun, 12 May 2024 23:39:46 -0700 Subject: [PATCH] Add Valve patched Xwayland package --- spec_files/xorg-x11-proto-devel/59.patch | 387 ---------- .../xorg-x11-proto-devel/make-git-snapshot.sh | 31 - .../xorg-x11-proto-devel.spec | 401 ---------- .../xorg-x11-server-Xwayland/0001-Valve.patch | 729 ------------------ ..._device_frame-on-device_scroll_discr.patch | 28 + spec_files/xorg-x11-server-Xwayland/README.md | 3 + .../old/0001-Valve.patch | 729 ------------------ .../old/xorg-x11-server-Xwayland.spec | 279 ------- .../xorg-x11-server-Xwayland.spec | 24 +- .../xwayland-pointer-warp-fix.patch | 35 + 10 files changed, 85 insertions(+), 2561 deletions(-) delete mode 100644 spec_files/xorg-x11-proto-devel/59.patch delete mode 100644 spec_files/xorg-x11-proto-devel/make-git-snapshot.sh delete mode 100644 spec_files/xorg-x11-proto-devel/xorg-x11-proto-devel.spec delete mode 100644 spec_files/xorg-x11-server-Xwayland/0001-Valve.patch create mode 100644 spec_files/xorg-x11-server-Xwayland/0001-xwayland-Send-ei_device_frame-on-device_scroll_discr.patch create mode 100644 spec_files/xorg-x11-server-Xwayland/README.md delete mode 100644 spec_files/xorg-x11-server-Xwayland/old/0001-Valve.patch delete mode 100644 spec_files/xorg-x11-server-Xwayland/old/xorg-x11-server-Xwayland.spec create mode 100644 spec_files/xorg-x11-server-Xwayland/xwayland-pointer-warp-fix.patch diff --git a/spec_files/xorg-x11-proto-devel/59.patch b/spec_files/xorg-x11-proto-devel/59.patch deleted file mode 100644 index 37f0bc4f..00000000 --- a/spec_files/xorg-x11-proto-devel/59.patch +++ /dev/null @@ -1,387 +0,0 @@ -From 1a25782bd57e4a4d4329eae138c136be7c6f0532 Mon Sep 17 00:00:00 2001 -From: Erik Kurzinger -Date: Tue, 16 Aug 2022 11:54:48 -0700 -Subject: [PATCH 1/2] DRI3: add DRI3ImportSyncobj and DRI3FreeSyncobj - -Adds new protocol to the DRI3 extension for importing DRM -synchronization objects provided by clients. These can be used to enable -explicit synchronization between the client, the direct rendering -device, and the server. - -Signed-off-by: Erik Kurzinger ---- - dri3proto.pc.in | 2 +- - dri3proto.txt | 52 ++++++++++++++++++++++++++++-- - include/X11/extensions/dri3proto.h | 28 ++++++++++++++-- - 3 files changed, 77 insertions(+), 5 deletions(-) - -diff --git a/dri3proto.pc.in b/dri3proto.pc.in -index 7725bc5..be6ccb9 100644 ---- a/dri3proto.pc.in -+++ b/dri3proto.pc.in -@@ -3,5 +3,5 @@ includedir=@includedir@ - - Name: DRI3Proto - Description: DRI3 extension headers --Version: 1.3 -+Version: 1.4 - Cflags: -I${includedir} -diff --git a/dri3proto.txt b/dri3proto.txt -index 3f92756..07d1152 100644 ---- a/dri3proto.txt -+++ b/dri3proto.txt -@@ -1,5 +1,5 @@ - The DRI3 Extension -- Version 1.3 -+ Version 1.4 - 2021-11-30 - - Keith Packard -@@ -60,7 +60,7 @@ DRI3 defines no events. - - 6. Protocol Types - --DRI3 defines no new protocol types. -+SYNCOBJ { XID } - - ❄ ❄ ❄ ❄ ❄ ❄ ❄ - -@@ -395,6 +395,36 @@ The name of this extension is "DRI3" - If the window specified was not found, a Window error will - be returned. - -+ -+┌─── -+ DRI3ImportSyncobj -+ syncobj: SYNCOBJ -+ drawable: DRAWABLE -+ fd: FD -+└─── -+ Errors: IDchoice, Drawable -+ -+ Imports the DRM synchronization object bound to the given 'fd'. This -+ may then be used to enable explicit synchronization with the the -+ server-side direct rendering device associated with 'drawable'. -+ -+ The provided syncobj must be a timeline syncobj. -+ -+ If 'drawable' is not found, a Drawable error will be returned. -+ -+ -+┌─── -+ DRI3FreeSyncobj -+ syncobj: SYNCOBJ -+└─── -+ Errors: Value -+ -+ Indicates that any resources associated with the given 'syncobj' should -+ be released by the server. The actual release may be deferred until any -+ pending operations that depend on the object have completed. -+ -+ If 'syncobj' is not found, a Value error will be returned. -+ - ❄ ❄ ❄ ❄ ❄ ❄ ❄ - - 9. Extension Events -@@ -703,6 +733,24 @@ A.2 Protocol Requests - 4 CARD32 drmMinor - └─── - -+┌─── -+ DRI3ImportSyncobj -+ 1 CARD8 major opcode -+ 1 11 DRI3 opcode -+ 2 3 length -+ 4 SYNCOBJ syncobj -+ 4 Drawable drawable -+ 0 FD syncobj fd -+└─── -+ -+┌─── -+ DRI3FreeSyncobj -+ 1 CARD8 major opcode -+ 1 12 DRI3 opcode -+ 2 2 length -+ 4 SYNCOBJ syncobj -+└─── -+ - A.3 Protocol Events - - The DRI3 extension defines no events. -diff --git a/include/X11/extensions/dri3proto.h b/include/X11/extensions/dri3proto.h -index 9cba105..d941860 100644 ---- a/include/X11/extensions/dri3proto.h -+++ b/include/X11/extensions/dri3proto.h -@@ -25,7 +25,7 @@ - - #define DRI3_NAME "DRI3" - #define DRI3_MAJOR 1 --#define DRI3_MINOR 3 -+#define DRI3_MINOR 4 - - #define DRI3NumberErrors 0 - #define DRI3NumberEvents 0 -@@ -45,7 +45,13 @@ - /* v1.3 */ - #define xDRI3SetDRMDeviceInUse 9 - --#define DRI3NumberRequests 10 -+/* v1.4 */ -+#define xDRI3ImportSyncobj 10 -+#define xDRI3FreeSyncobj 11 -+ -+#define DRI3NumberRequests 12 -+ -+#define DRI3Syncobj CARD32 - - typedef struct { - CARD8 reqType; -@@ -261,4 +267,22 @@ typedef struct { - } xDRI3SetDRMDeviceInUseReq; - #define sz_xDRI3SetDRMDeviceInUseReq 16 - -+/* v1.4 */ -+typedef struct { -+ CARD8 reqType; -+ CARD8 dri3ReqType; -+ CARD16 length; -+ DRI3Syncobj syncobj; -+ CARD32 drawable; -+} xDRI3ImportSyncobjReq; -+#define sz_xDRI3ImportSyncobjReq 12 -+ -+typedef struct { -+ CARD8 reqType; -+ CARD8 dri3ReqType; -+ CARD16 length; -+ DRI3Syncobj syncobj; -+} xDRI3FreeSyncobjReq; -+#define sz_xDRI3FreeSyncobjReq 8 -+ - #endif --- -GitLab - - -From 08c729e70b565508f36ad0df086b13b8bb6b0813 Mon Sep 17 00:00:00 2001 -From: Erik Kurzinger -Date: Tue, 16 Aug 2022 11:55:43 -0700 -Subject: [PATCH 2/2] Present: add PresentPixmapSynced - -Adds an augmented version of PresentPixmap supporting explicit -synchronization with a direct rendering device. This takes the form of a -timeline DRM synchronization object, along with acquire and release -points on that timeline. Implementations advertising -PresentCapabilitySyncobj will wait for the acquire point to be signaled -before executing the PresentPixmap request, and signal the release point -after any GPU operations on the pixmap have completed. - -Signed-off-by: Erik Kurzinger ---- - include/X11/extensions/presentproto.h | 32 +++++++++ - include/X11/extensions/presenttokens.h | 7 +- - presentproto.txt | 89 +++++++++++++++++++++++++- - 3 files changed, 124 insertions(+), 4 deletions(-) - -diff --git a/include/X11/extensions/presentproto.h b/include/X11/extensions/presentproto.h -index d8dc6d2..ea80863 100644 ---- a/include/X11/extensions/presentproto.h -+++ b/include/X11/extensions/presentproto.h -@@ -24,6 +24,7 @@ - #define _PRESENT_PROTO_H_ - - #include -+#include - - #define Window CARD32 - #define Pixmap CARD32 -@@ -136,6 +137,37 @@ typedef struct { - } xPresentQueryCapabilitiesReply; - #define sz_xPresentQueryCapabilitiesReply 32 - -+typedef struct { -+ CARD8 reqType; -+ CARD8 presentReqType; -+ CARD16 length; -+ Window window; -+ -+ Pixmap pixmap; -+ CARD32 serial; -+ -+ Region valid; -+ Region update; -+ -+ INT16 x_off; -+ INT16 y_off; -+ CARD32 target_crtc; -+ -+ DRI3Syncobj acquire_syncobj; -+ DRI3Syncobj release_syncobj; -+ CARD64 acquire_point; -+ CARD64 release_point; -+ -+ CARD32 options; -+ CARD32 pad1; -+ -+ CARD64 target_msc; -+ CARD64 divisor; -+ CARD64 remainder; -+ /* followed by a LISTofPRESENTNOTIFY */ -+} xPresentPixmapSyncedReq; -+#define sz_xPresentPixmapSyncedReq 88 -+ - /* - * Events - * -diff --git a/include/X11/extensions/presenttokens.h b/include/X11/extensions/presenttokens.h -index 400e84d..fae10fd 100644 ---- a/include/X11/extensions/presenttokens.h -+++ b/include/X11/extensions/presenttokens.h -@@ -36,8 +36,9 @@ - #define X_PresentNotifyMSC 2 - #define X_PresentSelectInput 3 - #define X_PresentQueryCapabilities 4 -+#define X_PresentPixmapSynced 5 - --#define PresentNumberRequests 5 -+#define PresentNumberRequests 6 - - /* Present operation options */ - #define PresentOptionNone 0 -@@ -62,11 +63,13 @@ - #define PresentCapabilityFence 2 - #define PresentCapabilityUST 4 - #define PresentCapabilityAsyncMayTear 8 -+#define PresentCapabilitySyncobj 16 - - #define PresentAllCapabilities (PresentCapabilityAsync | \ - PresentCapabilityFence | \ - PresentCapabilityUST | \ -- PresentCapabilityAsyncMayTear) -+ PresentCapabilityAsyncMayTear | \ -+ PresentCapabilitySyncobj) - - #define PresentAllAsyncCapabilities (PresentCapabilityAsync | PresentCapabilityAsyncMayTear) - -diff --git a/presentproto.txt b/presentproto.txt -index b474093..c2f717e 100644 ---- a/presentproto.txt -+++ b/presentproto.txt -@@ -1,5 +1,5 @@ - The Present Extension -- Version 1.3 -+ Version 1.4 - 2023-06-13 - - Keith Packard -@@ -63,7 +63,8 @@ PRESENTOPTION { PresentOptionAsync, - PRESENTCAPABILITY { PresentCapabilityAsync, - PresentCapabilityFence, - PresentCapabilityUST, -- PresentCapabilityAsyncMayTear } -+ PresentCapabilityAsyncMayTear, -+ PresentCapabilitySyncobj } - - PRESENTCOMPLETEKIND { PresentCompleteKindPixmap, - PresentCompleteKindMSCNotify } -@@ -359,6 +360,65 @@ The name of this extension is "Present" - defined by the extension, but is expected to be on the order - of milliseconds or less. - -+ PresentCapabilitySyncobj means that the target device supports -+ explicit synchronization using timeline DRM synchronization -+ objects. See the PresentPixmapSynced request for details. -+ -+┌─── -+ PresentPixmapSynced -+ window: WINDOW -+ pixmap: PIXMAP -+ serial: CARD32 -+ valid-area: REGION or None -+ update-area: REGION or None -+ x-off, y-off: INT16 -+ target-crtc: CRTC or None -+ acquire-syncobj: SYNCOBJ or None -+ release-syncobj: SYNCOBJ or None -+ acquire-point: CARD64 -+ release-point: CARD64 -+ options: SETofPRESENTOPTION -+ target-msc: CARD64 -+ divisor: CARD64 -+ remainder: CARD64 -+ notifies: LISTofPRESENTNOTIFY -+└─── -+ Errors: Window, Pixmap, Match, Value -+ -+ Identical to the PresentPixmap request, except that instead of the -+ 'wait-fence' and 'idle-fence' arguments it accepts mandatory -+ 'acquire-syncobj' and 'release-syncobj' arguments, along with -+ corresponding acquire and release points, to be used for explicit -+ timeline-based GPU synchronization. The 'acquire-point' and -+ 'release-point' are assumed to correspond to timeline points on the -+ respective DRM syncobjs. -+ -+ The contents of the Pixmap will not be accessed by the server until the -+ 'acquire-point' on the acquire timeline has been signaled by the -+ client. The fence need not be submitted at the time the -+ PresentPixmapSynced request is issued. -+ -+ Once the 'release-point' on the release timeline has been signaled, the -+ client may assume that no further GPU or CPU access to the Pixmap by -+ the server will occur as part of the originating PresentPixmapSynced -+ request. Note that this is a stronger guarantee than what is provided -+ by the 'idle-fence' argument of the PresentPixmap request or the -+ delivery of a PresentIdleNotify event, as those do not necessarily -+ imply that the Pixmap is idle on the GPU. -+ -+ The server may wait for the acquire point and signal the release point -+ itself, as will typically happen if the request is executed by copying -+ the Pixmap's contents. Alternatively, it may forward the timelines, -+ acquire, and release points to an output sink directly, provided that -+ sink also supports explicit synchronization using DRM syncobjs. -+ -+ If the server does not support PresentCapabilitySyncobj, a Value error -+ is generated. -+ -+ If either 'acquire-syncobj' or 'release-syncobj' are None or do not -+ refer to previously imported syncobjs or 'acquire-point' or -+ 'release-point' is zero, a Value error is generated. -+ - - 7.1 Requests proposed for a later Present extension version - -@@ -729,6 +789,31 @@ A.2 Protocol Requests - 4 SETofPRESENTCAPABILITY capabilities - └─── - -+┌─── -+ PresentPixmapSynced -+ 1 CARD8 major opcode -+ 1 5 Present opcode -+ 2 22+2n length -+ 4 Window window -+ 4 Pixmap pixmap -+ 4 CARD32 serial -+ 4 Region valid-area -+ 4 Region update-area -+ 2 INT16 x-off -+ 2 INT16 y-off -+ 4 CRTC target-crtc -+ 4 SYNCOBJ acquire-syncobj -+ 4 SYNCOBJ release-syncobj -+ 8 CARD64 acquire-point -+ 8 CARD64 release-point -+ 4 CARD32 options -+ 4 unused -+ 8 CARD64 target-msc -+ 8 CARD64 divisor -+ 8 CARD64 remainder -+ 8n LISTofPresentNotify notifies -+└─── -+ - A.3 Protocol Events - - ┌─── --- -GitLab - diff --git a/spec_files/xorg-x11-proto-devel/make-git-snapshot.sh b/spec_files/xorg-x11-proto-devel/make-git-snapshot.sh deleted file mode 100644 index 64a5becb..00000000 --- a/spec_files/xorg-x11-proto-devel/make-git-snapshot.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/sh - -proto=$1 -branch=$2 - -if [ -z "$proto" ]; then - echo "Usage: $0 []" - exit 1 -fi - -dirname=$proto-$( date +%Y%m%d ) - -rm -rf $dirname -git clone git://git.freedesktop.org/git/xorg/proto/$proto $dirname -cd $dirname -if [ -z "$branch" ]; then - git log | head -1 -else - git checkout $branch -fi -sha=`git rev-list --max-count=1 --abbrev-commit HEAD` -git repack -a -d -cd .. - -# append sha to dirname -mv $dirname $dirname-git$sha -dirname=$dirname-git$sha -tarball=$dirname.tar.bz2 -tar jcf $tarball $dirname -rm -rf $dirname -echo "$tarball is now available" diff --git a/spec_files/xorg-x11-proto-devel/xorg-x11-proto-devel.spec b/spec_files/xorg-x11-proto-devel/xorg-x11-proto-devel.spec deleted file mode 100644 index ee9d9383..00000000 --- a/spec_files/xorg-x11-proto-devel/xorg-x11-proto-devel.spec +++ /dev/null @@ -1,401 +0,0 @@ -%global debug_package %{nil} - -# When releasing a xorg-x11-proto-devel version with updated keysyms, -# rebuild libX11 - -Summary: X.Org X11 Protocol headers -Name: xorg-x11-proto-devel -%global xorg_version 2023.2 -Version: %{xorg_version}.bazzite.{{{ git_dir_version }}} -Release: 2%{?dist} -License: MIT -URL: https://www.x.org -BuildArch: noarch - -Source0: https://www.x.org/pub/individual/proto/xorgproto-%{xorg_version}.tar.xz - -Source40: make-git-snapshot.sh - -# https://gitlab.freedesktop.org/xorg/proto/xorgproto/-/merge_requests/59 -Patch0: 59.patch - -BuildRequires: gcc -BuildRequires: pkgconfig -BuildRequires: meson - -%description -X.Org X11 Protocol headers - - -%prep -%autosetup -p1 -n xorgproto-%{xorg_version} - -%build -%meson -%meson_build - -%install -%meson_install - -# trim some fat -for i in apple windows trap ; do - rm -f $RPM_BUILD_ROOT%{_includedir}/X11/extensions/*${i}* - rm -f $RPM_BUILD_ROOT%{_datadir}/pkgconfig/*${i}* -done - -# keep things building even if you have the html doc tools for xmlto installed -rm -f $RPM_BUILD_ROOT%{_docdir}/*/*.{html,svg} - -%files -%doc COPYING-* -%doc *.txt -%dir %{_includedir}/GL -%{_includedir}/GL/glxint.h -%{_includedir}/GL/glxmd.h -%{_includedir}/GL/glxproto.h -%{_includedir}/GL/glxtokens.h -%dir %{_includedir}/GL/internal -%{_includedir}/GL/internal/glcore.h -%dir %{_includedir}/X11 -%{_includedir}/X11/DECkeysym.h -%{_includedir}/X11/HPkeysym.h -%{_includedir}/X11/Sunkeysym.h -%{_includedir}/X11/X.h -%{_includedir}/X11/XF86keysym.h -%{_includedir}/X11/XWDFile.h -%{_includedir}/X11/Xalloca.h -%{_includedir}/X11/Xarch.h -%{_includedir}/X11/Xatom.h -%{_includedir}/X11/Xdefs.h -%{_includedir}/X11/Xfuncproto.h -%{_includedir}/X11/Xfuncs.h -%{_includedir}/X11/Xmd.h -%{_includedir}/X11/Xos.h -%{_includedir}/X11/Xos_r.h -%{_includedir}/X11/Xosdefs.h -%{_includedir}/X11/Xpoll.h -%{_includedir}/X11/Xproto.h -%{_includedir}/X11/Xprotostr.h -%{_includedir}/X11/Xthreads.h -%{_includedir}/X11/Xw32defs.h -%{_includedir}/X11/Xwindows.h -%{_includedir}/X11/Xwinsock.h -%{_includedir}/X11/ap_keysym.h -%dir %{_includedir}/X11/dri -%{_includedir}/X11/dri/xf86dri.h -%{_includedir}/X11/dri/xf86driproto.h -%{_includedir}/X11/dri/xf86dristr.h -%dir %{_includedir}/X11/extensions -%{_includedir}/X11/extensions/EVI.h -%{_includedir}/X11/extensions/EVIproto.h -%{_includedir}/X11/extensions/XI.h -%{_includedir}/X11/extensions/XI2.h -%{_includedir}/X11/extensions/XI2proto.h -%{_includedir}/X11/extensions/XIproto.h -%{_includedir}/X11/extensions/XKB.h -%{_includedir}/X11/extensions/XKBproto.h -%{_includedir}/X11/extensions/XKBsrv.h -%{_includedir}/X11/extensions/XKBstr.h -%{_includedir}/X11/extensions/XResproto.h -%{_includedir}/X11/extensions/Xv.h -%{_includedir}/X11/extensions/XvMC.h -%{_includedir}/X11/extensions/XvMCproto.h -%{_includedir}/X11/extensions/Xvproto.h -%{_includedir}/X11/extensions/ag.h -%{_includedir}/X11/extensions/agproto.h -%{_includedir}/X11/extensions/bigreqsproto.h -%{_includedir}/X11/extensions/bigreqstr.h -%{_includedir}/X11/extensions/composite.h -%{_includedir}/X11/extensions/compositeproto.h -%{_includedir}/X11/extensions/cup.h -%{_includedir}/X11/extensions/cupproto.h -%{_includedir}/X11/extensions/damageproto.h -%{_includedir}/X11/extensions/damagewire.h -%{_includedir}/X11/extensions/dbe.h -%{_includedir}/X11/extensions/dbeproto.h -%{_includedir}/X11/extensions/dmx.h -%{_includedir}/X11/extensions/dmxproto.h -%{_includedir}/X11/extensions/dpmsconst.h -%{_includedir}/X11/extensions/dpmsproto.h -%{_includedir}/X11/extensions/dri2proto.h -%{_includedir}/X11/extensions/dri2tokens.h -%{_includedir}/X11/extensions/dri3proto.h -%{_includedir}/X11/extensions/ge.h -%{_includedir}/X11/extensions/geproto.h -%{_includedir}/X11/extensions/lbx.h -%{_includedir}/X11/extensions/lbxproto.h -%{_includedir}/X11/extensions/mitmiscconst.h -%{_includedir}/X11/extensions/mitmiscproto.h -%{_includedir}/X11/extensions/multibufconst.h -%{_includedir}/X11/extensions/multibufproto.h -%{_includedir}/X11/extensions/panoramiXproto.h -%{_includedir}/X11/extensions/presentproto.h -%{_includedir}/X11/extensions/presenttokens.h -%{_includedir}/X11/extensions/randr.h -%{_includedir}/X11/extensions/randrproto.h -%{_includedir}/X11/extensions/recordconst.h -%{_includedir}/X11/extensions/recordproto.h -%{_includedir}/X11/extensions/recordstr.h -%{_includedir}/X11/extensions/render.h -%{_includedir}/X11/extensions/renderproto.h -%{_includedir}/X11/extensions/saver.h -%{_includedir}/X11/extensions/saverproto.h -%{_includedir}/X11/extensions/secur.h -%{_includedir}/X11/extensions/securproto.h -%{_includedir}/X11/extensions/shapeconst.h -%{_includedir}/X11/extensions/shapeproto.h -%{_includedir}/X11/extensions/shapestr.h -%{_includedir}/X11/extensions/shm.h -%{_includedir}/X11/extensions/shmproto.h -%{_includedir}/X11/extensions/shmstr.h -%{_includedir}/X11/extensions/syncconst.h -%{_includedir}/X11/extensions/syncproto.h -%{_includedir}/X11/extensions/syncstr.h -%{_includedir}/X11/extensions/xcmiscproto.h -%{_includedir}/X11/extensions/xcmiscstr.h -%{_includedir}/X11/extensions/xf86bigfont.h -%{_includedir}/X11/extensions/xf86bigfproto.h -%{_includedir}/X11/extensions/xf86bigfstr.h -%{_includedir}/X11/extensions/xf86dga.h -%{_includedir}/X11/extensions/xf86dga1const.h -%{_includedir}/X11/extensions/xf86dga1proto.h -%{_includedir}/X11/extensions/xf86dga1str.h -%{_includedir}/X11/extensions/xf86dgaconst.h -%{_includedir}/X11/extensions/xf86dgaproto.h -%{_includedir}/X11/extensions/xf86dgastr.h -%{_includedir}/X11/extensions/xf86vm.h -%{_includedir}/X11/extensions/xf86vmproto.h -%{_includedir}/X11/extensions/xf86vmstr.h -%{_includedir}/X11/extensions/xfixesproto.h -%{_includedir}/X11/extensions/xfixeswire.h -%{_includedir}/X11/extensions/xtestconst.h -%{_includedir}/X11/extensions/xtestext1const.h -%{_includedir}/X11/extensions/xtestext1proto.h -%{_includedir}/X11/extensions/xtestproto.h -%{_includedir}/X11/extensions/xwaylandproto.h -%dir %{_includedir}/X11/fonts -%{_includedir}/X11/fonts/FS.h -%{_includedir}/X11/fonts/FSproto.h -%{_includedir}/X11/fonts/font.h -%{_includedir}/X11/fonts/fontproto.h -%{_includedir}/X11/fonts/fontstruct.h -%{_includedir}/X11/fonts/fsmasks.h -%{_includedir}/X11/keysym.h -%{_includedir}/X11/keysymdef.h -%{_datadir}/pkgconfig/bigreqsproto.pc -%{_datadir}/pkgconfig/compositeproto.pc -%{_datadir}/pkgconfig/damageproto.pc -%{_datadir}/pkgconfig/dmxproto.pc -%{_datadir}/pkgconfig/dpmsproto.pc -%{_datadir}/pkgconfig/dri2proto.pc -%{_datadir}/pkgconfig/dri3proto.pc -%{_datadir}/pkgconfig/fixesproto.pc -%{_datadir}/pkgconfig/fontsproto.pc -%{_datadir}/pkgconfig/glproto.pc -%{_datadir}/pkgconfig/inputproto.pc -%{_datadir}/pkgconfig/kbproto.pc -%{_datadir}/pkgconfig/presentproto.pc -%{_datadir}/pkgconfig/randrproto.pc -%{_datadir}/pkgconfig/recordproto.pc -%{_datadir}/pkgconfig/renderproto.pc -%{_datadir}/pkgconfig/resourceproto.pc -%{_datadir}/pkgconfig/scrnsaverproto.pc -%{_datadir}/pkgconfig/videoproto.pc -%{_datadir}/pkgconfig/xcmiscproto.pc -%{_datadir}/pkgconfig/xextproto.pc -%{_datadir}/pkgconfig/xf86bigfontproto.pc -%{_datadir}/pkgconfig/xf86dgaproto.pc -%{_datadir}/pkgconfig/xf86driproto.pc -%{_datadir}/pkgconfig/xf86vidmodeproto.pc -%{_datadir}/pkgconfig/xineramaproto.pc -%{_datadir}/pkgconfig/xproto.pc -%{_datadir}/pkgconfig/xwaylandproto.pc -%{_docdir}/xorgproto/* - -%changelog -* Sat Jul 22 2023 Fedora Release Engineering - 2023.2-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild - -* Fri Jun 16 2023 Olivier Fourdan - 2023.2-1 -- xorgproto 2023.2 - -* Mon Jun 5 2023 Olivier Fourdan - 2023.1-1 -- xorgproto 2023.1 - -* Sat Jan 21 2023 Fedora Release Engineering - 2022.2-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild - -* Thu Aug 11 2022 Peter Hutterer - 2022.2-2 -- xorgproto 2022.2 - -* Sat Jul 23 2022 Fedora Release Engineering - 2022.1-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild - -* Thu Apr 21 2022 Peter Hutterer - 2022.1-1 -- xorgproto 2022.1 - -* Sat Jan 22 2022 Fedora Release Engineering - 2021.5-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild - -* Thu Sep 16 2021 Peter Hutterer - 2021.5-1 -- xorgproto 2021.5 - -* Fri Jul 23 2021 Fedora Release Engineering - 2021.4.99.2-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild - -* Fri Jun 04 2021 Adam Jackson - 2021.4.99.2-1 -- Prerelease for inputproto snapshot - -* Wed Jun 02 2021 Adam Jackson - 2021.4-2 -- Build with meson not autotools - -* Fri Apr 30 2021 Peter Hutterer 2021.4-1 -- xorgproto 2021.4 with XFixes 6 - -* Thu Feb 25 2021 Peter Hutterer 2021.3-1 -- xorgproto 2021.3 (no changes except the tarball no longer fails with meson) -- clean up the gitignore file - -* Wed Feb 24 2021 Peter Hutterer 2021.2-1 -- xorgproto 2021.2 -- Remove two header files that belong to libX11/libXv and are now part of - the --enable-legacy build only - -* Thu Jan 28 2021 Fedora Release Engineering - 2019.1-6 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild - -* Thu Nov 5 10:26:38 AEST 2020 Peter Hutterer - 2019.1-5 -- Add BuildRequires for make - -* Wed Jul 29 2020 Fedora Release Engineering - 2019.1-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild - -* Fri Jan 31 2020 Fedora Release Engineering - 2019.1-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild - -* Sat Jul 27 2019 Fedora Release Engineering - 2019.1-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild - -* Thu Jun 20 2019 Peter Hutterer 2019.1-1 -- xorgproto 2019.1 -- drop files for xf86misc and proxy management proto, they're legacy now - -* Sun Feb 03 2019 Fedora Release Engineering - 2018.4-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild - -* Sat Jul 14 2018 Fedora Release Engineering - 2018.4-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild - -* Wed Feb 28 2018 Adam Jackson - 2018.4-1 -- xorgproto 2018.4 - -* Wed Feb 21 2018 Adam Jackson - 2018.3-1 -- xorgproto 2018.3 - -* Mon Feb 12 2018 Adam Jackson - 2018.2-1 -- xorgproto 2018.2 - -* Fri Feb 09 2018 Fedora Release Engineering - 2018.1-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild - -* Mon Feb 05 2018 Adam Jackson - 2018.1-1 -- Switch to merged protocol headers -- Drop evie headers -- Pre-F18 changelog trim - -* Tue Nov 07 2017 Adam Jackson - 7.7-24 -- Drop bootstrap hack (that had been enabled for like nine years anyway) -- Use https URLs - -* Thu Jul 27 2017 Fedora Release Engineering - 7.7-23 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild - -* Fri May 12 2017 Hans de Goede - 7.7-22 -- Add xproto patches from upstream adding XF86Keyboard and XF86RFKill keysyms - -* Sat Feb 11 2017 Fedora Release Engineering - 7.7-21 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild - -* Mon Sep 26 2016 Adam Jackson - 7.7-20 -- xproto 7.0.31 - -* Mon Apr 04 2016 Peter Hutterer 7.7-19 -- inputproto 2.3.2 - -* Fri Mar 11 2016 Adam Jackson 7.7-18 -- videoproto 2.3.3 - -* Fri Feb 05 2016 Fedora Release Engineering - 7.7-17 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild - -* Wed Jan 20 2016 Peter Hutterer -- s/define/global/ - -* Wed Jul 01 2015 Adam Jackson 7.7-16 -- xproto 7.0.28 - -* Fri Jun 19 2015 Fedora Release Engineering - 7.7-15 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild - -* Sun May 17 2015 Dave Airlie 7.7-14 -- randrproto-1.5.0 - -* Wed Apr 01 2015 Dave Airlie 7.7-13 -- randrproto-1.4.1 - -* Thu Jun 12 2014 Hans de Goede - 7.7-12 -- inputproto-2.3.1 - -* Sun Jun 08 2014 Fedora Release Engineering - 7.7-11 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild - -* Wed Apr 16 2014 Hans de Goede - 7.7-10 -- fontsproto-2.1.3 -- videoproto-2.3.2 -- xextproto-7.3.0 -- xproto-7.0.26 -- Cherry pick some unreleased fixes from upstream git - -* Thu Jan 23 2014 Adam Jackson 7.7-9 -- Backport pointer-to-void* changes - -* Tue Dec 10 2013 Adam Jackson 7.7-8 -- glproto 1.4.17 - -* Wed Nov 06 2013 Adam Jackson 7.7-7 -- presentproto 1.0 -- dri3proto 1.0 -- xextproto 7.2.99.901 - -* Sun Aug 04 2013 Fedora Release Engineering - 7.7-6 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild - -* Tue Apr 02 2013 Peter Hutterer 7.7-5 -- xproto 7.0.24 - -* Thu Mar 07 2013 Dave Airlie 7.7-4 -- autoreconf for aarch64 - -* Thu Mar 07 2013 Peter Hutterer 7.7-3 -- inputproto 2.3 - -* Fri Feb 15 2013 Fedora Release Engineering - 7.7-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild - -* Tue Jan 08 2013 Adam Jackson 7.7-1 -- inputproto 2.2.99.1 - -* Thu Jul 26 2012 Peter Hutterer 7.6-24 -- bigregsproto 1.1.2 -- compositeproto 0.4.2 -- damageproto 1.2.1 -- fontsproto 2.1.2 -- inputproto 2.2 -- kbproto 1.0.6 -- recordproto 1.14.2 -- scrnsaverproto 1.2.2 -- xcmiscproto 1.2.2 -- xextproto 7.2.1 - -* Sun Jul 22 2012 Fedora Release Engineering - 7.6-23 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild diff --git a/spec_files/xorg-x11-server-Xwayland/0001-Valve.patch b/spec_files/xorg-x11-server-Xwayland/0001-Valve.patch deleted file mode 100644 index 40d4144c..00000000 --- a/spec_files/xorg-x11-server-Xwayland/0001-Valve.patch +++ /dev/null @@ -1,729 +0,0 @@ -From e496ed0a6b6c467ac01e33fa14e05dc2e0888a74 Mon Sep 17 00:00:00 2001 -From: Kyle Gospodnetich -Date: Wed, 31 Jan 2024 17:22:32 -0800 -Subject: [PATCH 1/4] Revert "xwayland: add support for wp-tearing-control-v1" - -This reverts commit 1ce2025822244c85826ab36febfa5945186b4a2a. ---- - hw/xwayland/meson.build | 3 --- - hw/xwayland/xwayland-present.c | 21 +++------------------ - hw/xwayland/xwayland-present.h | 1 - - hw/xwayland/xwayland-screen.c | 5 ----- - hw/xwayland/xwayland-screen.h | 1 - - hw/xwayland/xwayland-window.c | 9 --------- - hw/xwayland/xwayland-window.h | 1 - - 7 files changed, 3 insertions(+), 38 deletions(-) - -diff --git a/hw/xwayland/meson.build b/hw/xwayland/meson.build -index 54529b64e..fbdbb2458 100644 ---- a/hw/xwayland/meson.build -+++ b/hw/xwayland/meson.build -@@ -48,7 +48,6 @@ xdg_shell_xml = join_paths(protodir, 'stable', 'xdg-shell', 'xdg-shell.xml') - drm_lease_xml = join_paths(protodir, 'staging', 'drm-lease', 'drm-lease-v1.xml') - shortcuts_inhibit_xml = join_paths(protodir, 'unstable', 'keyboard-shortcuts-inhibit', 'keyboard-shortcuts-inhibit-unstable-v1.xml') - xwayland_shell_xml = join_paths(protodir, 'staging', 'xwayland-shell', 'xwayland-shell-v1.xml') --tearing_xml = join_paths(protodir, 'staging', 'tearing-control', 'tearing-control-v1.xml') - - client_header = generator(scanner, - output : '@BASENAME@-client-protocol.h', -@@ -77,7 +76,6 @@ srcs += client_header.process(xdg_shell_xml) - srcs += client_header.process(drm_lease_xml) - srcs += client_header.process(shortcuts_inhibit_xml) - srcs += client_header.process(xwayland_shell_xml) --srcs += client_header.process(tearing_xml) - srcs += code.process(relative_xml) - srcs += code.process(pointer_xml) - srcs += code.process(gestures_xml) -@@ -90,7 +88,6 @@ srcs += code.process(xdg_shell_xml) - srcs += code.process(drm_lease_xml) - srcs += code.process(shortcuts_inhibit_xml) - srcs += code.process(xwayland_shell_xml) --srcs += code.process(tearing_xml) - - if build_ei - xwayland_dep += libei_dep -diff --git a/hw/xwayland/xwayland-present.c b/hw/xwayland/xwayland-present.c -index 941be06da..bb3310dc9 100644 ---- a/hw/xwayland/xwayland-present.c -+++ b/hw/xwayland/xwayland-present.c -@@ -34,9 +34,8 @@ - #include "xwayland-pixmap.h" - #include "glamor.h" - --#include "tearing-control-v1-client-protocol.h" - --#define XWL_PRESENT_CAPS PresentCapabilityAsync | PresentCapabilityAsyncMayTear -+#define XWL_PRESENT_CAPS PresentCapabilityAsync - - - /* -@@ -797,16 +796,6 @@ xwl_present_flip(present_vblank_ptr vblank, RegionPtr damage) - damage_box->x2 - damage_box->x1, - damage_box->y2 - damage_box->y1); - -- if (xwl_window->tearing_control) { -- uint32_t hint; -- if (event->async_may_tear) -- hint = WP_TEARING_CONTROL_V1_PRESENTATION_HINT_ASYNC; -- else -- hint = WP_TEARING_CONTROL_V1_PRESENTATION_HINT_VSYNC; -- -- wp_tearing_control_v1_set_presentation_hint(xwl_window->tearing_control, hint); -- } -- - wl_surface_commit(xwl_window->surface); - - if (!vblank->sync_flip) { -@@ -1010,15 +999,11 @@ xwl_present_pixmap(WindowPtr window, - } - - vblank->event_id = ++xwl_present_event_id; -- event->async_may_tear = options & PresentOptionAsyncMayTear; - -- /* Synchronous Xwayland presentations always complete (at least) one frame after they -+ /* Xwayland presentations always complete (at least) one frame after they - * are executed - */ -- if (event->async_may_tear) -- vblank->exec_msc = vblank->target_msc; -- else -- vblank->exec_msc = vblank->target_msc - 1; -+ vblank->exec_msc = vblank->target_msc - 1; - - vblank->queued = TRUE; - if (crtc_msc < vblank->exec_msc) { -diff --git a/hw/xwayland/xwayland-present.h b/hw/xwayland/xwayland-present.h -index 4fd1e579f..806272089 100644 ---- a/hw/xwayland/xwayland-present.h -+++ b/hw/xwayland/xwayland-present.h -@@ -59,7 +59,6 @@ struct xwl_present_event { - present_vblank_rec vblank; - - PixmapPtr pixmap; -- Bool async_may_tear; - }; - - Bool xwl_present_entered_for_each_frame_callback(void); -diff --git a/hw/xwayland/xwayland-screen.c b/hw/xwayland/xwayland-screen.c -index cc14e0771..2bc553b50 100644 ---- a/hw/xwayland/xwayland-screen.c -+++ b/hw/xwayland/xwayland-screen.c -@@ -63,7 +63,6 @@ - #include "viewporter-client-protocol.h" - #include "xdg-shell-client-protocol.h" - #include "xwayland-shell-v1-client-protocol.h" --#include "tearing-control-v1-client-protocol.h" - - static DevPrivateKeyRec xwl_screen_private_key; - static DevPrivateKeyRec xwl_client_private_key; -@@ -462,10 +461,6 @@ registry_global(void *data, struct wl_registry *registry, uint32_t id, - xwl_screen->xwayland_shell = - wl_registry_bind(registry, id, &xwayland_shell_v1_interface, 1); - } -- else if (strcmp(interface, "wp_tearing_control_manager_v1") == 0) { -- xwl_screen->tearing_control_manager = -- wl_registry_bind(registry, id, &wp_tearing_control_manager_v1_interface, 1); -- } - #ifdef XWL_HAS_GLAMOR - else if (xwl_screen->glamor) { - xwl_glamor_init_wl_registry(xwl_screen, registry, id, interface, -diff --git a/hw/xwayland/xwayland-screen.h b/hw/xwayland/xwayland-screen.h -index bd66dd681..656d2afde 100644 ---- a/hw/xwayland/xwayland-screen.h -+++ b/hw/xwayland/xwayland-screen.h -@@ -110,7 +110,6 @@ struct xwl_screen { - struct zxdg_output_manager_v1 *xdg_output_manager; - struct wp_viewporter *viewporter; - struct xwayland_shell_v1 *xwayland_shell; -- struct wp_tearing_control_manager_v1 *tearing_control_manager; - struct xorg_list drm_lease_devices; - struct xorg_list queued_drm_lease_devices; - struct xorg_list drm_leases; -diff --git a/hw/xwayland/xwayland-window.c b/hw/xwayland/xwayland-window.c -index 4978f37c7..b018d9656 100644 ---- a/hw/xwayland/xwayland-window.c -+++ b/hw/xwayland/xwayland-window.c -@@ -46,7 +46,6 @@ - #include "xwayland-shm.h" - - #include "linux-dmabuf-unstable-v1-client-protocol.h" --#include "tearing-control-v1-client-protocol.h" - #include "viewporter-client-protocol.h" - #include "xdg-shell-client-protocol.h" - #include "xwayland-shell-v1-client-protocol.h" -@@ -967,11 +966,6 @@ ensure_surface_for_window(WindowPtr window) - xwl_window_check_resolution_change_emulation(xwl_window); - } - -- if (xwl_screen->tearing_control_manager) { -- xwl_window->tearing_control = wp_tearing_control_manager_v1_get_tearing_control( -- xwl_screen->tearing_control_manager, xwl_window->surface); -- } -- - return TRUE; - - err: -@@ -1182,9 +1176,6 @@ xwl_unrealize_window(WindowPtr window) - xwl_present_for_each_frame_callback(xwl_window, xwl_present_unrealize_window); - #endif - -- if (xwl_window->tearing_control) -- wp_tearing_control_v1_destroy(xwl_window->tearing_control); -- - release_wl_surface_for_window(xwl_window); - xorg_list_del(&xwl_window->link_damage); - xorg_list_del(&xwl_window->link_window); -diff --git a/hw/xwayland/xwayland-window.h b/hw/xwayland/xwayland-window.h -index 7fbb2a623..f8200d537 100644 ---- a/hw/xwayland/xwayland-window.h -+++ b/hw/xwayland/xwayland-window.h -@@ -121,7 +121,6 @@ struct xwl_window { - struct xwl_dmabuf_feedback feedback; - /* If TRUE, the window buffer format supports scanout with implicit modifier */ - Bool has_implicit_scanout_support; -- struct wp_tearing_control_v1 *tearing_control; - }; - - struct xwl_window *xwl_window_get(WindowPtr window); --- -2.42.0 - - -From 01a8a454f04dca944db446815f28bf46f8f822b6 Mon Sep 17 00:00:00 2001 -From: Joshua Ashton -Date: Wed, 24 Aug 2022 23:16:24 +0000 -Subject: [PATCH 2/4] xwayland: Implement tearing protocol - ---- - hw/xwayland/meson.build | 3 + - .../tearing-control-unstable-v1.xml | 142 ++++++++++++++++++ - hw/xwayland/xwayland-present.c | 11 ++ - hw/xwayland/xwayland-screen.c | 4 + - hw/xwayland/xwayland-screen.h | 1 + - hw/xwayland/xwayland-window.c | 11 ++ - hw/xwayland/xwayland-window.h | 1 + - 7 files changed, 173 insertions(+) - create mode 100644 hw/xwayland/protocols/unstable/tearing-control/tearing-control-unstable-v1.xml - -diff --git a/hw/xwayland/meson.build b/hw/xwayland/meson.build -index fbdbb2458..d29e55d7d 100644 ---- a/hw/xwayland/meson.build -+++ b/hw/xwayland/meson.build -@@ -46,6 +46,7 @@ dmabuf_xml = join_paths(protodir, 'unstable', 'linux-dmabuf', 'linux-dmabuf-unst - viewporter_xml = join_paths(protodir, 'stable', 'viewporter', 'viewporter.xml') - xdg_shell_xml = join_paths(protodir, 'stable', 'xdg-shell', 'xdg-shell.xml') - drm_lease_xml = join_paths(protodir, 'staging', 'drm-lease', 'drm-lease-v1.xml') -+tearing_xml = join_paths('protocols', 'unstable', 'tearing-control', 'tearing-control-unstable-v1.xml') - shortcuts_inhibit_xml = join_paths(protodir, 'unstable', 'keyboard-shortcuts-inhibit', 'keyboard-shortcuts-inhibit-unstable-v1.xml') - xwayland_shell_xml = join_paths(protodir, 'staging', 'xwayland-shell', 'xwayland-shell-v1.xml') - -@@ -74,6 +75,7 @@ srcs += client_header.process(dmabuf_xml) - srcs += client_header.process(viewporter_xml) - srcs += client_header.process(xdg_shell_xml) - srcs += client_header.process(drm_lease_xml) -+srcs += client_header.process(tearing_xml) - srcs += client_header.process(shortcuts_inhibit_xml) - srcs += client_header.process(xwayland_shell_xml) - srcs += code.process(relative_xml) -@@ -86,6 +88,7 @@ srcs += code.process(dmabuf_xml) - srcs += code.process(viewporter_xml) - srcs += code.process(xdg_shell_xml) - srcs += code.process(drm_lease_xml) -+srcs += code.process(tearing_xml) - srcs += code.process(shortcuts_inhibit_xml) - srcs += code.process(xwayland_shell_xml) - -diff --git a/hw/xwayland/protocols/unstable/tearing-control/tearing-control-unstable-v1.xml b/hw/xwayland/protocols/unstable/tearing-control/tearing-control-unstable-v1.xml -new file mode 100644 -index 000000000..ce130718e ---- /dev/null -+++ b/hw/xwayland/protocols/unstable/tearing-control/tearing-control-unstable-v1.xml -@@ -0,0 +1,142 @@ -+ -+ -+ -+ -+ Copyright © 2021 Xaver Hugl -+ -+ Permission is hereby granted, free of charge, to any person obtaining a -+ copy of this software and associated documentation files (the "Software"), -+ to deal in the Software without restriction, including without limitation -+ the rights to use, copy, modify, merge, publish, distribute, sublicense, -+ and/or sell copies of the Software, and to permit persons to whom the -+ Software is furnished to do so, subject to the following conditions: -+ -+ The above copyright notice and this permission notice (including the next -+ paragraph) shall be included in all copies or substantial portions of the -+ Software. -+ -+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -+ THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -+ DEALINGS IN THE SOFTWARE. -+ -+ -+ -+ -+ This global is a factory interface, allowing clients to request -+ the compositor to use asynchronous page flips on a per-surface basis. -+ -+ Graphics APIs, like EGL or Vulkan, that manage the buffer queue and -+ commits of a wl_surface themselves, are likely to be using this -+ extension internally. If a client is using such an API for a -+ wl_surface, it should not directly use this extension on that surface, -+ to avoid raising a tearing_control_exists protocol error. -+ -+ Warning! The protocol described in this file is experimental and -+ backward incompatible changes may be made. Backward compatible changes -+ may be added together with the corresponding interface version bump. -+ Backward incompatible changes are done by bumping the version number in -+ the protocol and interface names and resetting the interface version. -+ Once the protocol is to be declared stable, the 'z' prefix and the -+ version number in the protocol and interface names are removed and the -+ interface version number is reset. -+ -+ -+ -+ -+ Destroy this tearing control factory object. Other objects, including -+ zwp_surface_tearing_control_v1 objects created by this factory, -+ shall not be affected by this request. -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Instantiate an interface extension for the given wl_surface to -+ request asynchronous page flips for presentation. -+ -+ If the given wl_surface already has a zwp_surface_tearing_control_v1 -+ object associated, the tearing_control_exists protocol error is raised. -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ An additional interface to a wl_surface object, which allows the client -+ to hint to the compositor if and when it should use asynchronous page -+ flips for presentation. -+ -+ -+ -+ -+ This enum provides information for if and when submitted frames from -+ the client may be presented with tearing. The possible values are: -+ -+ VSYNC: -+ Presentation should be synchronized to the vertical retrace by the -+ display hardware so that tearing doesn't happen. -+ -+ VSYNC_RELAXED: -+ Presentation should be synchronized to the vertical retrace by the -+ display hardware so that tearing doesn't happen as long as the client -+ submits new frame fast enough. If a frame is late for presentation, -+ that is, if more than one vertical retrace has occurred since the last -+ commit then the compositor should use asynchronous page flips to -+ immediately present the frame. This may cause visible tearing. -+ The compositor is encouraged to send requested frame callbacks as soon -+ as possible after such a late commit to make sure clients have as much -+ time as possible to render their next frame. -+ -+ ASYNC: -+ Presentation should not be synchronized to the vertical retrace, -+ committed frames are meant to be immediately presented with asynchronous -+ page flips with as little delay as possible. Tearing will be visible. -+ The compositor is encouraged to send requested frame callbacks as soon -+ as possible after every commit. -+ -+ -+ -+ -+ -+ -+ -+ -+ Set the presentation hint for the associated wl_surface. See -+ presentation_hint for the description. This state is double-buffered -+ and is applied on the next wl_surface.commit. -+ -+ The compositor is free to dynamically respect or ignore this hint based -+ on various conditions, including GPU capabilities and surface window -+ state. -+ -+ -+ -+ -+ -+ -+ Destroy this surface tearing object and remove the presentation hint. -+ The change will be applied on the next wl_surface.commit. -+ -+ -+ -+ -+ -+ -diff --git a/hw/xwayland/xwayland-present.c b/hw/xwayland/xwayland-present.c -index bb3310dc9..6f1d57a42 100644 ---- a/hw/xwayland/xwayland-present.c -+++ b/hw/xwayland/xwayland-present.c -@@ -34,6 +34,8 @@ - #include "xwayland-pixmap.h" - #include "glamor.h" - -+#include "tearing-control-unstable-v1-client-protocol.h" -+ - - #define XWL_PRESENT_CAPS PresentCapabilityAsync - -@@ -796,6 +798,15 @@ xwl_present_flip(present_vblank_ptr vblank, RegionPtr damage) - damage_box->x2 - damage_box->x1, - damage_box->y2 - damage_box->y1); - -+ -+ // Josh: No support for VSync relaxed, this is something that should -+ // be determined by a user setting in gamescope. -+ if (xwl_window->tearing_control) -+ zwp_surface_tearing_control_v1_set_presentation_hint(xwl_window->tearing_control, -+ sync_flip -+ ? ZWP_SURFACE_TEARING_CONTROL_V1_PRESENTATION_HINT_VSYNC -+ : ZWP_SURFACE_TEARING_CONTROL_V1_PRESENTATION_HINT_ASYNC); -+ - wl_surface_commit(xwl_window->surface); - - if (!vblank->sync_flip) { -diff --git a/hw/xwayland/xwayland-screen.c b/hw/xwayland/xwayland-screen.c -index 2bc553b50..e35861e46 100644 ---- a/hw/xwayland/xwayland-screen.c -+++ b/hw/xwayland/xwayland-screen.c -@@ -62,6 +62,7 @@ - #include "xdg-output-unstable-v1-client-protocol.h" - #include "viewporter-client-protocol.h" - #include "xdg-shell-client-protocol.h" -+#include "tearing-control-unstable-v1-client-protocol.h" - #include "xwayland-shell-v1-client-protocol.h" - - static DevPrivateKeyRec xwl_screen_private_key; -@@ -457,6 +458,9 @@ registry_global(void *data, struct wl_registry *registry, uint32_t id, - else if (strcmp(interface, "wp_viewporter") == 0) { - xwl_screen->viewporter = wl_registry_bind(registry, id, &wp_viewporter_interface, 1); - } -+ else if (strcmp(interface, "zwp_tearing_control_v1") == 0) { -+ xwl_screen->tearing_control = wl_registry_bind(registry, id, &zwp_tearing_control_v1_interface, 1); -+ } - else if (strcmp(interface, "xwayland_shell_v1") == 0 && xwl_screen->rootless) { - xwl_screen->xwayland_shell = - wl_registry_bind(registry, id, &xwayland_shell_v1_interface, 1); -diff --git a/hw/xwayland/xwayland-screen.h b/hw/xwayland/xwayland-screen.h -index 656d2afde..bf75278fd 100644 ---- a/hw/xwayland/xwayland-screen.h -+++ b/hw/xwayland/xwayland-screen.h -@@ -113,6 +113,7 @@ struct xwl_screen { - struct xorg_list drm_lease_devices; - struct xorg_list queued_drm_lease_devices; - struct xorg_list drm_leases; -+ struct zwp_tearing_control_v1 *tearing_control; - struct xwl_output *fixed_output; - struct xorg_list pending_wl_surface_destroy; - uint64_t surface_association_serial; -diff --git a/hw/xwayland/xwayland-window.c b/hw/xwayland/xwayland-window.c -index b018d9656..7b3534385 100644 ---- a/hw/xwayland/xwayland-window.c -+++ b/hw/xwayland/xwayland-window.c -@@ -48,6 +48,7 @@ - #include "linux-dmabuf-unstable-v1-client-protocol.h" - #include "viewporter-client-protocol.h" - #include "xdg-shell-client-protocol.h" -+#include "tearing-control-unstable-v1-client-protocol.h" - #include "xwayland-shell-v1-client-protocol.h" - - #define DELAYED_WL_SURFACE_DESTROY 1000 /* ms */ -@@ -920,6 +921,11 @@ ensure_surface_for_window(WindowPtr window) - goto err; - } - -+ if (xwl_screen->tearing_control) { -+ xwl_window->tearing_control = -+ zwp_tearing_control_v1_get_tearing_control(xwl_screen->tearing_control, xwl_window->surface); -+ } -+ - if (xwl_screen->xwayland_shell) { - xwl_window->xwayland_surface = xwayland_shell_v1_get_xwayland_surface( - xwl_screen->xwayland_shell, xwl_window->surface); -@@ -1169,6 +1175,11 @@ xwl_unrealize_window(WindowPtr window) - if (xwl_window_has_viewport_enabled(xwl_window)) - xwl_window_disable_viewport(xwl_window); - -+ if (xwl_window->tearing_control) { -+ zwp_surface_tearing_control_v1_destroy(xwl_window->tearing_control); -+ xwl_window->tearing_control = NULL; -+ } -+ - xwl_dmabuf_feedback_destroy(&xwl_window->feedback); - - #ifdef GLAMOR_HAS_GBM -diff --git a/hw/xwayland/xwayland-window.h b/hw/xwayland/xwayland-window.h -index f8200d537..519d9394c 100644 ---- a/hw/xwayland/xwayland-window.h -+++ b/hw/xwayland/xwayland-window.h -@@ -99,6 +99,7 @@ struct xwl_window { - struct wp_viewport *viewport; - float scale_x, scale_y; - struct xdg_surface *xdg_surface; -+ struct zwp_surface_tearing_control_v1 *tearing_control; - struct xdg_toplevel *xdg_toplevel; - WindowPtr window; - struct xorg_list link_damage; --- -2.42.0 - - -From 3357fc57deb1e397e6a2023a4b0254aeed957349 Mon Sep 17 00:00:00 2001 -From: Joshua Ashton -Date: Wed, 31 Aug 2022 12:57:09 +0000 -Subject: [PATCH 3/4] Use gamescope tearing protocol instead - -Renamed to not clash ---- - hw/xwayland/meson.build | 2 +- - ...xml => gamescope-tearing-control-unstable-v1.xml} | 12 ++++++------ - hw/xwayland/xwayland-present.c | 8 ++++---- - hw/xwayland/xwayland-screen.c | 6 +++--- - hw/xwayland/xwayland-screen.h | 2 +- - hw/xwayland/xwayland-window.c | 6 +++--- - hw/xwayland/xwayland-window.h | 2 +- - 7 files changed, 19 insertions(+), 19 deletions(-) - rename hw/xwayland/protocols/unstable/tearing-control/{tearing-control-unstable-v1.xml => gamescope-tearing-control-unstable-v1.xml} (93%) - -diff --git a/hw/xwayland/meson.build b/hw/xwayland/meson.build -index d29e55d7d..73f2bdd94 100644 ---- a/hw/xwayland/meson.build -+++ b/hw/xwayland/meson.build -@@ -46,7 +46,7 @@ dmabuf_xml = join_paths(protodir, 'unstable', 'linux-dmabuf', 'linux-dmabuf-unst - viewporter_xml = join_paths(protodir, 'stable', 'viewporter', 'viewporter.xml') - xdg_shell_xml = join_paths(protodir, 'stable', 'xdg-shell', 'xdg-shell.xml') - drm_lease_xml = join_paths(protodir, 'staging', 'drm-lease', 'drm-lease-v1.xml') --tearing_xml = join_paths('protocols', 'unstable', 'tearing-control', 'tearing-control-unstable-v1.xml') -+tearing_xml = join_paths('protocols', 'unstable', 'tearing-control', 'gamescope-tearing-control-unstable-v1.xml') - shortcuts_inhibit_xml = join_paths(protodir, 'unstable', 'keyboard-shortcuts-inhibit', 'keyboard-shortcuts-inhibit-unstable-v1.xml') - xwayland_shell_xml = join_paths(protodir, 'staging', 'xwayland-shell', 'xwayland-shell-v1.xml') - -diff --git a/hw/xwayland/protocols/unstable/tearing-control/tearing-control-unstable-v1.xml b/hw/xwayland/protocols/unstable/tearing-control/gamescope-tearing-control-unstable-v1.xml -similarity index 93% -rename from hw/xwayland/protocols/unstable/tearing-control/tearing-control-unstable-v1.xml -rename to hw/xwayland/protocols/unstable/tearing-control/gamescope-tearing-control-unstable-v1.xml -index ce130718e..3c7cfb09e 100644 ---- a/hw/xwayland/protocols/unstable/tearing-control/tearing-control-unstable-v1.xml -+++ b/hw/xwayland/protocols/unstable/tearing-control/gamescope-tearing-control-unstable-v1.xml -@@ -1,5 +1,5 @@ - -- -+ - - - Copyright © 2021 Xaver Hugl -@@ -24,7 +24,7 @@ - DEALINGS IN THE SOFTWARE. - - -- -+ - - This global is a factory interface, allowing clients to request - the compositor to use asynchronous page flips on a per-surface basis. -@@ -48,7 +48,7 @@ - - - Destroy this tearing control factory object. Other objects, including -- zwp_surface_tearing_control_v1 objects created by this factory, -+ gamescope_surface_tearing_control_v1 objects created by this factory, - shall not be affected by this request. - - -@@ -63,19 +63,19 @@ - Instantiate an interface extension for the given wl_surface to - request asynchronous page flips for presentation. - -- If the given wl_surface already has a zwp_surface_tearing_control_v1 -+ If the given wl_surface already has a gamescope_surface_tearing_control_v1 - object associated, the tearing_control_exists protocol error is raised. - - - - - - - -- -+ - - An additional interface to a wl_surface object, which allows the client - to hint to the compositor if and when it should use asynchronous page -diff --git a/hw/xwayland/xwayland-present.c b/hw/xwayland/xwayland-present.c -index 6f1d57a42..5cbd767c9 100644 ---- a/hw/xwayland/xwayland-present.c -+++ b/hw/xwayland/xwayland-present.c -@@ -34,7 +34,7 @@ - #include "xwayland-pixmap.h" - #include "glamor.h" - --#include "tearing-control-unstable-v1-client-protocol.h" -+#include "gamescope-tearing-control-unstable-v1-client-protocol.h" - - - #define XWL_PRESENT_CAPS PresentCapabilityAsync -@@ -802,10 +802,10 @@ xwl_present_flip(present_vblank_ptr vblank, RegionPtr damage) - // Josh: No support for VSync relaxed, this is something that should - // be determined by a user setting in gamescope. - if (xwl_window->tearing_control) -- zwp_surface_tearing_control_v1_set_presentation_hint(xwl_window->tearing_control, -+ gamescope_surface_tearing_control_v1_set_presentation_hint(xwl_window->tearing_control, - sync_flip -- ? ZWP_SURFACE_TEARING_CONTROL_V1_PRESENTATION_HINT_VSYNC -- : ZWP_SURFACE_TEARING_CONTROL_V1_PRESENTATION_HINT_ASYNC); -+ ? GAMESCOPE_SURFACE_TEARING_CONTROL_V1_PRESENTATION_HINT_VSYNC -+ : GAMESCOPE_SURFACE_TEARING_CONTROL_V1_PRESENTATION_HINT_ASYNC); - - wl_surface_commit(xwl_window->surface); - -diff --git a/hw/xwayland/xwayland-screen.c b/hw/xwayland/xwayland-screen.c -index e35861e46..2a025db18 100644 ---- a/hw/xwayland/xwayland-screen.c -+++ b/hw/xwayland/xwayland-screen.c -@@ -62,7 +62,7 @@ - #include "xdg-output-unstable-v1-client-protocol.h" - #include "viewporter-client-protocol.h" - #include "xdg-shell-client-protocol.h" --#include "tearing-control-unstable-v1-client-protocol.h" -+#include "gamescope-tearing-control-unstable-v1-client-protocol.h" - #include "xwayland-shell-v1-client-protocol.h" - - static DevPrivateKeyRec xwl_screen_private_key; -@@ -458,8 +458,8 @@ registry_global(void *data, struct wl_registry *registry, uint32_t id, - else if (strcmp(interface, "wp_viewporter") == 0) { - xwl_screen->viewporter = wl_registry_bind(registry, id, &wp_viewporter_interface, 1); - } -- else if (strcmp(interface, "zwp_tearing_control_v1") == 0) { -- xwl_screen->tearing_control = wl_registry_bind(registry, id, &zwp_tearing_control_v1_interface, 1); -+ else if (strcmp(interface, "gamescope_tearing_control_v1") == 0) { -+ xwl_screen->tearing_control = wl_registry_bind(registry, id, &gamescope_tearing_control_v1_interface, 1); - } - else if (strcmp(interface, "xwayland_shell_v1") == 0 && xwl_screen->rootless) { - xwl_screen->xwayland_shell = -diff --git a/hw/xwayland/xwayland-screen.h b/hw/xwayland/xwayland-screen.h -index bf75278fd..d6b1a1d84 100644 ---- a/hw/xwayland/xwayland-screen.h -+++ b/hw/xwayland/xwayland-screen.h -@@ -113,7 +113,7 @@ struct xwl_screen { - struct xorg_list drm_lease_devices; - struct xorg_list queued_drm_lease_devices; - struct xorg_list drm_leases; -- struct zwp_tearing_control_v1 *tearing_control; -+ struct gamescope_tearing_control_v1 *tearing_control; - struct xwl_output *fixed_output; - struct xorg_list pending_wl_surface_destroy; - uint64_t surface_association_serial; -diff --git a/hw/xwayland/xwayland-window.c b/hw/xwayland/xwayland-window.c -index 7b3534385..d3bbe703d 100644 ---- a/hw/xwayland/xwayland-window.c -+++ b/hw/xwayland/xwayland-window.c -@@ -48,7 +48,7 @@ - #include "linux-dmabuf-unstable-v1-client-protocol.h" - #include "viewporter-client-protocol.h" - #include "xdg-shell-client-protocol.h" --#include "tearing-control-unstable-v1-client-protocol.h" -+#include "gamescope-tearing-control-unstable-v1-client-protocol.h" - #include "xwayland-shell-v1-client-protocol.h" - - #define DELAYED_WL_SURFACE_DESTROY 1000 /* ms */ -@@ -923,7 +923,7 @@ ensure_surface_for_window(WindowPtr window) - - if (xwl_screen->tearing_control) { - xwl_window->tearing_control = -- zwp_tearing_control_v1_get_tearing_control(xwl_screen->tearing_control, xwl_window->surface); -+ gamescope_tearing_control_v1_get_tearing_control(xwl_screen->tearing_control, xwl_window->surface); - } - - if (xwl_screen->xwayland_shell) { -@@ -1176,7 +1176,7 @@ xwl_unrealize_window(WindowPtr window) - xwl_window_disable_viewport(xwl_window); - - if (xwl_window->tearing_control) { -- zwp_surface_tearing_control_v1_destroy(xwl_window->tearing_control); -+ gamescope_surface_tearing_control_v1_destroy(xwl_window->tearing_control); - xwl_window->tearing_control = NULL; - } - -diff --git a/hw/xwayland/xwayland-window.h b/hw/xwayland/xwayland-window.h -index 519d9394c..95f770c07 100644 ---- a/hw/xwayland/xwayland-window.h -+++ b/hw/xwayland/xwayland-window.h -@@ -99,7 +99,7 @@ struct xwl_window { - struct wp_viewport *viewport; - float scale_x, scale_y; - struct xdg_surface *xdg_surface; -- struct zwp_surface_tearing_control_v1 *tearing_control; -+ struct gamescope_surface_tearing_control_v1 *tearing_control; - struct xdg_toplevel *xdg_toplevel; - WindowPtr window; - struct xorg_list link_damage; --- -2.42.0 - - -From c799ef123d1ed4eddc7972451b1b313b14195935 Mon Sep 17 00:00:00 2001 -From: Kyle Gospodnetich -Date: Wed, 31 Jan 2024 17:36:04 -0800 -Subject: [PATCH 4/4] Fix missing sync_flip param - ---- - hw/xwayland/xwayland-present.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/hw/xwayland/xwayland-present.c b/hw/xwayland/xwayland-present.c -index 5cbd767c9..f22e8f987 100644 ---- a/hw/xwayland/xwayland-present.c -+++ b/hw/xwayland/xwayland-present.c -@@ -754,7 +754,7 @@ xwl_present_clear_window_flip(WindowPtr window) - } - - static Bool --xwl_present_flip(present_vblank_ptr vblank, RegionPtr damage) -+xwl_present_flip(present_vblank_ptr vblank, RegionPtr damage, Bool sync_flip) - { - WindowPtr present_window = vblank->window; - PixmapPtr pixmap = vblank->pixmap; -@@ -873,7 +873,7 @@ xwl_present_execute(present_vblank_ptr vblank, uint64_t ust, uint64_t crtc_msc) - } else - damage = RegionDuplicate(&window->clipList); - -- if (xwl_present_flip(vblank, damage)) { -+ if (xwl_present_flip(vblank, damage, vblank->sync_flip)) { - WindowPtr toplvl_window = xwl_present_toplvl_pixmap_window(vblank->window); - PixmapPtr old_pixmap = screen->GetWindowPixmap(window); - --- -2.42.0 - diff --git a/spec_files/xorg-x11-server-Xwayland/0001-xwayland-Send-ei_device_frame-on-device_scroll_discr.patch b/spec_files/xorg-x11-server-Xwayland/0001-xwayland-Send-ei_device_frame-on-device_scroll_discr.patch new file mode 100644 index 00000000..1b30dbee --- /dev/null +++ b/spec_files/xorg-x11-server-Xwayland/0001-xwayland-Send-ei_device_frame-on-device_scroll_discr.patch @@ -0,0 +1,28 @@ +From 317712eb5a1aa4a1c3d737a8fcaee57add9981c9 Mon Sep 17 00:00:00 2001 +From: Joshua Ashton +Date: Sat, 11 May 2024 07:25:48 +0100 +Subject: [PATCH] xwayland: Send ei_device_frame on device_scroll_discrete + +This fixes the scroll action in Steam Input in SteamOS/Gamescope when using the new libeis backend. + +Fixes: a13333427072dfb27792c5c9ff22ed145ede0f0a ("xwayland: Add XTEST support using EIS") +Signed-off-by: Joshua Ashton +--- + hw/xwayland/xwayland-xtest.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/hw/xwayland/xwayland-xtest.c b/hw/xwayland/xwayland-xtest.c +index 756a6d8f7..4976a3d7e 100644 +--- a/hw/xwayland/xwayland-xtest.c ++++ b/hw/xwayland/xwayland-xtest.c +@@ -584,6 +584,7 @@ xwl_send_event_to_ei(struct xwl_ei_client *xwl_ei_client, + } else if (detail == 7) { + ei_device_scroll_discrete(ei_device, SCROLL_STEP, 0); + } ++ ei_device_frame(ei_device, ei_now(ei)); + } + break; + case KeyPress: +-- +2.44.0 + diff --git a/spec_files/xorg-x11-server-Xwayland/README.md b/spec_files/xorg-x11-server-Xwayland/README.md new file mode 100644 index 00000000..a09da1f3 --- /dev/null +++ b/spec_files/xorg-x11-server-Xwayland/README.md @@ -0,0 +1,3 @@ +# xorg-x11-server-Xwayland + +The xorg-x11-server-Xwayland package diff --git a/spec_files/xorg-x11-server-Xwayland/old/0001-Valve.patch b/spec_files/xorg-x11-server-Xwayland/old/0001-Valve.patch deleted file mode 100644 index 5c0bc7f4..00000000 --- a/spec_files/xorg-x11-server-Xwayland/old/0001-Valve.patch +++ /dev/null @@ -1,729 +0,0 @@ -From 0151613de184f0ac8bc2c685f37492919602e15f Mon Sep 17 00:00:00 2001 -From: Kyle Gospodnetich -Date: Wed, 31 Jan 2024 17:22:32 -0800 -Subject: [PATCH 1/4] Revert "xwayland: add support for wp-tearing-control-v1" - -This reverts commit 1ce2025822244c85826ab36febfa5945186b4a2a. ---- - hw/xwayland/meson.build | 3 --- - hw/xwayland/xwayland-present.c | 21 +++------------------ - hw/xwayland/xwayland-present.h | 1 - - hw/xwayland/xwayland-screen.c | 5 ----- - hw/xwayland/xwayland-screen.h | 1 - - hw/xwayland/xwayland-window.c | 9 --------- - hw/xwayland/xwayland-window.h | 1 - - 7 files changed, 3 insertions(+), 38 deletions(-) - -diff --git a/hw/xwayland/meson.build b/hw/xwayland/meson.build -index 54529b64e..fbdbb2458 100644 ---- a/hw/xwayland/meson.build -+++ b/hw/xwayland/meson.build -@@ -48,7 +48,6 @@ xdg_shell_xml = join_paths(protodir, 'stable', 'xdg-shell', 'xdg-shell.xml') - drm_lease_xml = join_paths(protodir, 'staging', 'drm-lease', 'drm-lease-v1.xml') - shortcuts_inhibit_xml = join_paths(protodir, 'unstable', 'keyboard-shortcuts-inhibit', 'keyboard-shortcuts-inhibit-unstable-v1.xml') - xwayland_shell_xml = join_paths(protodir, 'staging', 'xwayland-shell', 'xwayland-shell-v1.xml') --tearing_xml = join_paths(protodir, 'staging', 'tearing-control', 'tearing-control-v1.xml') - - client_header = generator(scanner, - output : '@BASENAME@-client-protocol.h', -@@ -77,7 +76,6 @@ srcs += client_header.process(xdg_shell_xml) - srcs += client_header.process(drm_lease_xml) - srcs += client_header.process(shortcuts_inhibit_xml) - srcs += client_header.process(xwayland_shell_xml) --srcs += client_header.process(tearing_xml) - srcs += code.process(relative_xml) - srcs += code.process(pointer_xml) - srcs += code.process(gestures_xml) -@@ -90,7 +88,6 @@ srcs += code.process(xdg_shell_xml) - srcs += code.process(drm_lease_xml) - srcs += code.process(shortcuts_inhibit_xml) - srcs += code.process(xwayland_shell_xml) --srcs += code.process(tearing_xml) - - if build_ei - xwayland_dep += libei_dep -diff --git a/hw/xwayland/xwayland-present.c b/hw/xwayland/xwayland-present.c -index 941be06da..bb3310dc9 100644 ---- a/hw/xwayland/xwayland-present.c -+++ b/hw/xwayland/xwayland-present.c -@@ -34,9 +34,8 @@ - #include "xwayland-pixmap.h" - #include "glamor.h" - --#include "tearing-control-v1-client-protocol.h" - --#define XWL_PRESENT_CAPS PresentCapabilityAsync | PresentCapabilityAsyncMayTear -+#define XWL_PRESENT_CAPS PresentCapabilityAsync - - - /* -@@ -797,16 +796,6 @@ xwl_present_flip(present_vblank_ptr vblank, RegionPtr damage) - damage_box->x2 - damage_box->x1, - damage_box->y2 - damage_box->y1); - -- if (xwl_window->tearing_control) { -- uint32_t hint; -- if (event->async_may_tear) -- hint = WP_TEARING_CONTROL_V1_PRESENTATION_HINT_ASYNC; -- else -- hint = WP_TEARING_CONTROL_V1_PRESENTATION_HINT_VSYNC; -- -- wp_tearing_control_v1_set_presentation_hint(xwl_window->tearing_control, hint); -- } -- - wl_surface_commit(xwl_window->surface); - - if (!vblank->sync_flip) { -@@ -1010,15 +999,11 @@ xwl_present_pixmap(WindowPtr window, - } - - vblank->event_id = ++xwl_present_event_id; -- event->async_may_tear = options & PresentOptionAsyncMayTear; - -- /* Synchronous Xwayland presentations always complete (at least) one frame after they -+ /* Xwayland presentations always complete (at least) one frame after they - * are executed - */ -- if (event->async_may_tear) -- vblank->exec_msc = vblank->target_msc; -- else -- vblank->exec_msc = vblank->target_msc - 1; -+ vblank->exec_msc = vblank->target_msc - 1; - - vblank->queued = TRUE; - if (crtc_msc < vblank->exec_msc) { -diff --git a/hw/xwayland/xwayland-present.h b/hw/xwayland/xwayland-present.h -index 4fd1e579f..806272089 100644 ---- a/hw/xwayland/xwayland-present.h -+++ b/hw/xwayland/xwayland-present.h -@@ -59,7 +59,6 @@ struct xwl_present_event { - present_vblank_rec vblank; - - PixmapPtr pixmap; -- Bool async_may_tear; - }; - - Bool xwl_present_entered_for_each_frame_callback(void); -diff --git a/hw/xwayland/xwayland-screen.c b/hw/xwayland/xwayland-screen.c -index cc14e0771..2bc553b50 100644 ---- a/hw/xwayland/xwayland-screen.c -+++ b/hw/xwayland/xwayland-screen.c -@@ -63,7 +63,6 @@ - #include "viewporter-client-protocol.h" - #include "xdg-shell-client-protocol.h" - #include "xwayland-shell-v1-client-protocol.h" --#include "tearing-control-v1-client-protocol.h" - - static DevPrivateKeyRec xwl_screen_private_key; - static DevPrivateKeyRec xwl_client_private_key; -@@ -462,10 +461,6 @@ registry_global(void *data, struct wl_registry *registry, uint32_t id, - xwl_screen->xwayland_shell = - wl_registry_bind(registry, id, &xwayland_shell_v1_interface, 1); - } -- else if (strcmp(interface, "wp_tearing_control_manager_v1") == 0) { -- xwl_screen->tearing_control_manager = -- wl_registry_bind(registry, id, &wp_tearing_control_manager_v1_interface, 1); -- } - #ifdef XWL_HAS_GLAMOR - else if (xwl_screen->glamor) { - xwl_glamor_init_wl_registry(xwl_screen, registry, id, interface, -diff --git a/hw/xwayland/xwayland-screen.h b/hw/xwayland/xwayland-screen.h -index bd66dd681..656d2afde 100644 ---- a/hw/xwayland/xwayland-screen.h -+++ b/hw/xwayland/xwayland-screen.h -@@ -110,7 +110,6 @@ struct xwl_screen { - struct zxdg_output_manager_v1 *xdg_output_manager; - struct wp_viewporter *viewporter; - struct xwayland_shell_v1 *xwayland_shell; -- struct wp_tearing_control_manager_v1 *tearing_control_manager; - struct xorg_list drm_lease_devices; - struct xorg_list queued_drm_lease_devices; - struct xorg_list drm_leases; -diff --git a/hw/xwayland/xwayland-window.c b/hw/xwayland/xwayland-window.c -index a4f02a058..54ba9d896 100644 ---- a/hw/xwayland/xwayland-window.c -+++ b/hw/xwayland/xwayland-window.c -@@ -46,7 +46,6 @@ - #include "xwayland-shm.h" - - #include "linux-dmabuf-unstable-v1-client-protocol.h" --#include "tearing-control-v1-client-protocol.h" - #include "viewporter-client-protocol.h" - #include "xdg-shell-client-protocol.h" - #include "xwayland-shell-v1-client-protocol.h" -@@ -941,11 +940,6 @@ ensure_surface_for_window(WindowPtr window) - xwl_window_check_resolution_change_emulation(xwl_window); - } - -- if (xwl_screen->tearing_control_manager) { -- xwl_window->tearing_control = wp_tearing_control_manager_v1_get_tearing_control( -- xwl_screen->tearing_control_manager, xwl_window->surface); -- } -- - return TRUE; - - err: -@@ -1156,9 +1150,6 @@ xwl_unrealize_window(WindowPtr window) - xwl_present_for_each_frame_callback(xwl_window, xwl_present_unrealize_window); - #endif - -- if (xwl_window->tearing_control) -- wp_tearing_control_v1_destroy(xwl_window->tearing_control); -- - release_wl_surface_for_window(xwl_window); - xorg_list_del(&xwl_window->link_damage); - xorg_list_del(&xwl_window->link_window); -diff --git a/hw/xwayland/xwayland-window.h b/hw/xwayland/xwayland-window.h -index 45ae16da0..92c700e41 100644 ---- a/hw/xwayland/xwayland-window.h -+++ b/hw/xwayland/xwayland-window.h -@@ -121,7 +121,6 @@ struct xwl_window { - struct xwl_dmabuf_feedback feedback; - /* If TRUE, the window buffer format supports scanout with implicit modifier */ - Bool has_implicit_scanout_support; -- struct wp_tearing_control_v1 *tearing_control; - }; - - struct xwl_window *xwl_window_get(WindowPtr window); --- -2.42.0 - - -From 7e43bb1113e7732d587d783a8db7ae86aefdb04d Mon Sep 17 00:00:00 2001 -From: Joshua Ashton -Date: Wed, 24 Aug 2022 23:16:24 +0000 -Subject: [PATCH 2/4] xwayland: Implement tearing protocol - ---- - hw/xwayland/meson.build | 3 + - .../tearing-control-unstable-v1.xml | 142 ++++++++++++++++++ - hw/xwayland/xwayland-present.c | 11 ++ - hw/xwayland/xwayland-screen.c | 4 + - hw/xwayland/xwayland-screen.h | 1 + - hw/xwayland/xwayland-window.c | 11 ++ - hw/xwayland/xwayland-window.h | 1 + - 7 files changed, 173 insertions(+) - create mode 100644 hw/xwayland/protocols/unstable/tearing-control/tearing-control-unstable-v1.xml - -diff --git a/hw/xwayland/meson.build b/hw/xwayland/meson.build -index fbdbb2458..d29e55d7d 100644 ---- a/hw/xwayland/meson.build -+++ b/hw/xwayland/meson.build -@@ -46,6 +46,7 @@ dmabuf_xml = join_paths(protodir, 'unstable', 'linux-dmabuf', 'linux-dmabuf-unst - viewporter_xml = join_paths(protodir, 'stable', 'viewporter', 'viewporter.xml') - xdg_shell_xml = join_paths(protodir, 'stable', 'xdg-shell', 'xdg-shell.xml') - drm_lease_xml = join_paths(protodir, 'staging', 'drm-lease', 'drm-lease-v1.xml') -+tearing_xml = join_paths('protocols', 'unstable', 'tearing-control', 'tearing-control-unstable-v1.xml') - shortcuts_inhibit_xml = join_paths(protodir, 'unstable', 'keyboard-shortcuts-inhibit', 'keyboard-shortcuts-inhibit-unstable-v1.xml') - xwayland_shell_xml = join_paths(protodir, 'staging', 'xwayland-shell', 'xwayland-shell-v1.xml') - -@@ -74,6 +75,7 @@ srcs += client_header.process(dmabuf_xml) - srcs += client_header.process(viewporter_xml) - srcs += client_header.process(xdg_shell_xml) - srcs += client_header.process(drm_lease_xml) -+srcs += client_header.process(tearing_xml) - srcs += client_header.process(shortcuts_inhibit_xml) - srcs += client_header.process(xwayland_shell_xml) - srcs += code.process(relative_xml) -@@ -86,6 +88,7 @@ srcs += code.process(dmabuf_xml) - srcs += code.process(viewporter_xml) - srcs += code.process(xdg_shell_xml) - srcs += code.process(drm_lease_xml) -+srcs += code.process(tearing_xml) - srcs += code.process(shortcuts_inhibit_xml) - srcs += code.process(xwayland_shell_xml) - -diff --git a/hw/xwayland/protocols/unstable/tearing-control/tearing-control-unstable-v1.xml b/hw/xwayland/protocols/unstable/tearing-control/tearing-control-unstable-v1.xml -new file mode 100644 -index 000000000..ce130718e ---- /dev/null -+++ b/hw/xwayland/protocols/unstable/tearing-control/tearing-control-unstable-v1.xml -@@ -0,0 +1,142 @@ -+ -+ -+ -+ -+ Copyright © 2021 Xaver Hugl -+ -+ Permission is hereby granted, free of charge, to any person obtaining a -+ copy of this software and associated documentation files (the "Software"), -+ to deal in the Software without restriction, including without limitation -+ the rights to use, copy, modify, merge, publish, distribute, sublicense, -+ and/or sell copies of the Software, and to permit persons to whom the -+ Software is furnished to do so, subject to the following conditions: -+ -+ The above copyright notice and this permission notice (including the next -+ paragraph) shall be included in all copies or substantial portions of the -+ Software. -+ -+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -+ THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -+ DEALINGS IN THE SOFTWARE. -+ -+ -+ -+ -+ This global is a factory interface, allowing clients to request -+ the compositor to use asynchronous page flips on a per-surface basis. -+ -+ Graphics APIs, like EGL or Vulkan, that manage the buffer queue and -+ commits of a wl_surface themselves, are likely to be using this -+ extension internally. If a client is using such an API for a -+ wl_surface, it should not directly use this extension on that surface, -+ to avoid raising a tearing_control_exists protocol error. -+ -+ Warning! The protocol described in this file is experimental and -+ backward incompatible changes may be made. Backward compatible changes -+ may be added together with the corresponding interface version bump. -+ Backward incompatible changes are done by bumping the version number in -+ the protocol and interface names and resetting the interface version. -+ Once the protocol is to be declared stable, the 'z' prefix and the -+ version number in the protocol and interface names are removed and the -+ interface version number is reset. -+ -+ -+ -+ -+ Destroy this tearing control factory object. Other objects, including -+ zwp_surface_tearing_control_v1 objects created by this factory, -+ shall not be affected by this request. -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Instantiate an interface extension for the given wl_surface to -+ request asynchronous page flips for presentation. -+ -+ If the given wl_surface already has a zwp_surface_tearing_control_v1 -+ object associated, the tearing_control_exists protocol error is raised. -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ An additional interface to a wl_surface object, which allows the client -+ to hint to the compositor if and when it should use asynchronous page -+ flips for presentation. -+ -+ -+ -+ -+ This enum provides information for if and when submitted frames from -+ the client may be presented with tearing. The possible values are: -+ -+ VSYNC: -+ Presentation should be synchronized to the vertical retrace by the -+ display hardware so that tearing doesn't happen. -+ -+ VSYNC_RELAXED: -+ Presentation should be synchronized to the vertical retrace by the -+ display hardware so that tearing doesn't happen as long as the client -+ submits new frame fast enough. If a frame is late for presentation, -+ that is, if more than one vertical retrace has occurred since the last -+ commit then the compositor should use asynchronous page flips to -+ immediately present the frame. This may cause visible tearing. -+ The compositor is encouraged to send requested frame callbacks as soon -+ as possible after such a late commit to make sure clients have as much -+ time as possible to render their next frame. -+ -+ ASYNC: -+ Presentation should not be synchronized to the vertical retrace, -+ committed frames are meant to be immediately presented with asynchronous -+ page flips with as little delay as possible. Tearing will be visible. -+ The compositor is encouraged to send requested frame callbacks as soon -+ as possible after every commit. -+ -+ -+ -+ -+ -+ -+ -+ -+ Set the presentation hint for the associated wl_surface. See -+ presentation_hint for the description. This state is double-buffered -+ and is applied on the next wl_surface.commit. -+ -+ The compositor is free to dynamically respect or ignore this hint based -+ on various conditions, including GPU capabilities and surface window -+ state. -+ -+ -+ -+ -+ -+ -+ Destroy this surface tearing object and remove the presentation hint. -+ The change will be applied on the next wl_surface.commit. -+ -+ -+ -+ -+ -+ -diff --git a/hw/xwayland/xwayland-present.c b/hw/xwayland/xwayland-present.c -index bb3310dc9..6f1d57a42 100644 ---- a/hw/xwayland/xwayland-present.c -+++ b/hw/xwayland/xwayland-present.c -@@ -34,6 +34,8 @@ - #include "xwayland-pixmap.h" - #include "glamor.h" - -+#include "tearing-control-unstable-v1-client-protocol.h" -+ - - #define XWL_PRESENT_CAPS PresentCapabilityAsync - -@@ -796,6 +798,15 @@ xwl_present_flip(present_vblank_ptr vblank, RegionPtr damage) - damage_box->x2 - damage_box->x1, - damage_box->y2 - damage_box->y1); - -+ -+ // Josh: No support for VSync relaxed, this is something that should -+ // be determined by a user setting in gamescope. -+ if (xwl_window->tearing_control) -+ zwp_surface_tearing_control_v1_set_presentation_hint(xwl_window->tearing_control, -+ sync_flip -+ ? ZWP_SURFACE_TEARING_CONTROL_V1_PRESENTATION_HINT_VSYNC -+ : ZWP_SURFACE_TEARING_CONTROL_V1_PRESENTATION_HINT_ASYNC); -+ - wl_surface_commit(xwl_window->surface); - - if (!vblank->sync_flip) { -diff --git a/hw/xwayland/xwayland-screen.c b/hw/xwayland/xwayland-screen.c -index 2bc553b50..e35861e46 100644 ---- a/hw/xwayland/xwayland-screen.c -+++ b/hw/xwayland/xwayland-screen.c -@@ -62,6 +62,7 @@ - #include "xdg-output-unstable-v1-client-protocol.h" - #include "viewporter-client-protocol.h" - #include "xdg-shell-client-protocol.h" -+#include "tearing-control-unstable-v1-client-protocol.h" - #include "xwayland-shell-v1-client-protocol.h" - - static DevPrivateKeyRec xwl_screen_private_key; -@@ -457,6 +458,9 @@ registry_global(void *data, struct wl_registry *registry, uint32_t id, - else if (strcmp(interface, "wp_viewporter") == 0) { - xwl_screen->viewporter = wl_registry_bind(registry, id, &wp_viewporter_interface, 1); - } -+ else if (strcmp(interface, "zwp_tearing_control_v1") == 0) { -+ xwl_screen->tearing_control = wl_registry_bind(registry, id, &zwp_tearing_control_v1_interface, 1); -+ } - else if (strcmp(interface, "xwayland_shell_v1") == 0 && xwl_screen->rootless) { - xwl_screen->xwayland_shell = - wl_registry_bind(registry, id, &xwayland_shell_v1_interface, 1); -diff --git a/hw/xwayland/xwayland-screen.h b/hw/xwayland/xwayland-screen.h -index 656d2afde..bf75278fd 100644 ---- a/hw/xwayland/xwayland-screen.h -+++ b/hw/xwayland/xwayland-screen.h -@@ -113,6 +113,7 @@ struct xwl_screen { - struct xorg_list drm_lease_devices; - struct xorg_list queued_drm_lease_devices; - struct xorg_list drm_leases; -+ struct zwp_tearing_control_v1 *tearing_control; - struct xwl_output *fixed_output; - struct xorg_list pending_wl_surface_destroy; - uint64_t surface_association_serial; -diff --git a/hw/xwayland/xwayland-window.c b/hw/xwayland/xwayland-window.c -index 54ba9d896..527f41c90 100644 ---- a/hw/xwayland/xwayland-window.c -+++ b/hw/xwayland/xwayland-window.c -@@ -48,6 +48,7 @@ - #include "linux-dmabuf-unstable-v1-client-protocol.h" - #include "viewporter-client-protocol.h" - #include "xdg-shell-client-protocol.h" -+#include "tearing-control-unstable-v1-client-protocol.h" - #include "xwayland-shell-v1-client-protocol.h" - - #define DELAYED_WL_SURFACE_DESTROY 1000 /* ms */ -@@ -894,6 +895,11 @@ ensure_surface_for_window(WindowPtr window) - goto err; - } - -+ if (xwl_screen->tearing_control) { -+ xwl_window->tearing_control = -+ zwp_tearing_control_v1_get_tearing_control(xwl_screen->tearing_control, xwl_window->surface); -+ } -+ - if (xwl_screen->xwayland_shell) { - xwl_window->xwayland_surface = xwayland_shell_v1_get_xwayland_surface( - xwl_screen->xwayland_shell, xwl_window->surface); -@@ -1143,6 +1149,11 @@ xwl_unrealize_window(WindowPtr window) - if (xwl_window_has_viewport_enabled(xwl_window)) - xwl_window_disable_viewport(xwl_window); - -+ if (xwl_window->tearing_control) { -+ zwp_surface_tearing_control_v1_destroy(xwl_window->tearing_control); -+ xwl_window->tearing_control = NULL; -+ } -+ - xwl_dmabuf_feedback_destroy(&xwl_window->feedback); - - #ifdef GLAMOR_HAS_GBM -diff --git a/hw/xwayland/xwayland-window.h b/hw/xwayland/xwayland-window.h -index 92c700e41..efbb1f2fc 100644 ---- a/hw/xwayland/xwayland-window.h -+++ b/hw/xwayland/xwayland-window.h -@@ -99,6 +99,7 @@ struct xwl_window { - struct wp_viewport *viewport; - float scale_x, scale_y; - struct xdg_surface *xdg_surface; -+ struct zwp_surface_tearing_control_v1 *tearing_control; - struct xdg_toplevel *xdg_toplevel; - WindowPtr window; - struct xorg_list link_damage; --- -2.42.0 - - -From ac5a78ddabf16b6876bf286e93d770f50d8e9315 Mon Sep 17 00:00:00 2001 -From: Joshua Ashton -Date: Wed, 31 Aug 2022 12:57:09 +0000 -Subject: [PATCH 3/4] Use gamescope tearing protocol instead - -Renamed to not clash ---- - hw/xwayland/meson.build | 2 +- - ...xml => gamescope-tearing-control-unstable-v1.xml} | 12 ++++++------ - hw/xwayland/xwayland-present.c | 8 ++++---- - hw/xwayland/xwayland-screen.c | 6 +++--- - hw/xwayland/xwayland-screen.h | 2 +- - hw/xwayland/xwayland-window.c | 6 +++--- - hw/xwayland/xwayland-window.h | 2 +- - 7 files changed, 19 insertions(+), 19 deletions(-) - rename hw/xwayland/protocols/unstable/tearing-control/{tearing-control-unstable-v1.xml => gamescope-tearing-control-unstable-v1.xml} (93%) - -diff --git a/hw/xwayland/meson.build b/hw/xwayland/meson.build -index d29e55d7d..73f2bdd94 100644 ---- a/hw/xwayland/meson.build -+++ b/hw/xwayland/meson.build -@@ -46,7 +46,7 @@ dmabuf_xml = join_paths(protodir, 'unstable', 'linux-dmabuf', 'linux-dmabuf-unst - viewporter_xml = join_paths(protodir, 'stable', 'viewporter', 'viewporter.xml') - xdg_shell_xml = join_paths(protodir, 'stable', 'xdg-shell', 'xdg-shell.xml') - drm_lease_xml = join_paths(protodir, 'staging', 'drm-lease', 'drm-lease-v1.xml') --tearing_xml = join_paths('protocols', 'unstable', 'tearing-control', 'tearing-control-unstable-v1.xml') -+tearing_xml = join_paths('protocols', 'unstable', 'tearing-control', 'gamescope-tearing-control-unstable-v1.xml') - shortcuts_inhibit_xml = join_paths(protodir, 'unstable', 'keyboard-shortcuts-inhibit', 'keyboard-shortcuts-inhibit-unstable-v1.xml') - xwayland_shell_xml = join_paths(protodir, 'staging', 'xwayland-shell', 'xwayland-shell-v1.xml') - -diff --git a/hw/xwayland/protocols/unstable/tearing-control/tearing-control-unstable-v1.xml b/hw/xwayland/protocols/unstable/tearing-control/gamescope-tearing-control-unstable-v1.xml -similarity index 93% -rename from hw/xwayland/protocols/unstable/tearing-control/tearing-control-unstable-v1.xml -rename to hw/xwayland/protocols/unstable/tearing-control/gamescope-tearing-control-unstable-v1.xml -index ce130718e..3c7cfb09e 100644 ---- a/hw/xwayland/protocols/unstable/tearing-control/tearing-control-unstable-v1.xml -+++ b/hw/xwayland/protocols/unstable/tearing-control/gamescope-tearing-control-unstable-v1.xml -@@ -1,5 +1,5 @@ - -- -+ - - - Copyright © 2021 Xaver Hugl -@@ -24,7 +24,7 @@ - DEALINGS IN THE SOFTWARE. - - -- -+ - - This global is a factory interface, allowing clients to request - the compositor to use asynchronous page flips on a per-surface basis. -@@ -48,7 +48,7 @@ - - - Destroy this tearing control factory object. Other objects, including -- zwp_surface_tearing_control_v1 objects created by this factory, -+ gamescope_surface_tearing_control_v1 objects created by this factory, - shall not be affected by this request. - - -@@ -63,19 +63,19 @@ - Instantiate an interface extension for the given wl_surface to - request asynchronous page flips for presentation. - -- If the given wl_surface already has a zwp_surface_tearing_control_v1 -+ If the given wl_surface already has a gamescope_surface_tearing_control_v1 - object associated, the tearing_control_exists protocol error is raised. - - - - - - - -- -+ - - An additional interface to a wl_surface object, which allows the client - to hint to the compositor if and when it should use asynchronous page -diff --git a/hw/xwayland/xwayland-present.c b/hw/xwayland/xwayland-present.c -index 6f1d57a42..5cbd767c9 100644 ---- a/hw/xwayland/xwayland-present.c -+++ b/hw/xwayland/xwayland-present.c -@@ -34,7 +34,7 @@ - #include "xwayland-pixmap.h" - #include "glamor.h" - --#include "tearing-control-unstable-v1-client-protocol.h" -+#include "gamescope-tearing-control-unstable-v1-client-protocol.h" - - - #define XWL_PRESENT_CAPS PresentCapabilityAsync -@@ -802,10 +802,10 @@ xwl_present_flip(present_vblank_ptr vblank, RegionPtr damage) - // Josh: No support for VSync relaxed, this is something that should - // be determined by a user setting in gamescope. - if (xwl_window->tearing_control) -- zwp_surface_tearing_control_v1_set_presentation_hint(xwl_window->tearing_control, -+ gamescope_surface_tearing_control_v1_set_presentation_hint(xwl_window->tearing_control, - sync_flip -- ? ZWP_SURFACE_TEARING_CONTROL_V1_PRESENTATION_HINT_VSYNC -- : ZWP_SURFACE_TEARING_CONTROL_V1_PRESENTATION_HINT_ASYNC); -+ ? GAMESCOPE_SURFACE_TEARING_CONTROL_V1_PRESENTATION_HINT_VSYNC -+ : GAMESCOPE_SURFACE_TEARING_CONTROL_V1_PRESENTATION_HINT_ASYNC); - - wl_surface_commit(xwl_window->surface); - -diff --git a/hw/xwayland/xwayland-screen.c b/hw/xwayland/xwayland-screen.c -index e35861e46..2a025db18 100644 ---- a/hw/xwayland/xwayland-screen.c -+++ b/hw/xwayland/xwayland-screen.c -@@ -62,7 +62,7 @@ - #include "xdg-output-unstable-v1-client-protocol.h" - #include "viewporter-client-protocol.h" - #include "xdg-shell-client-protocol.h" --#include "tearing-control-unstable-v1-client-protocol.h" -+#include "gamescope-tearing-control-unstable-v1-client-protocol.h" - #include "xwayland-shell-v1-client-protocol.h" - - static DevPrivateKeyRec xwl_screen_private_key; -@@ -458,8 +458,8 @@ registry_global(void *data, struct wl_registry *registry, uint32_t id, - else if (strcmp(interface, "wp_viewporter") == 0) { - xwl_screen->viewporter = wl_registry_bind(registry, id, &wp_viewporter_interface, 1); - } -- else if (strcmp(interface, "zwp_tearing_control_v1") == 0) { -- xwl_screen->tearing_control = wl_registry_bind(registry, id, &zwp_tearing_control_v1_interface, 1); -+ else if (strcmp(interface, "gamescope_tearing_control_v1") == 0) { -+ xwl_screen->tearing_control = wl_registry_bind(registry, id, &gamescope_tearing_control_v1_interface, 1); - } - else if (strcmp(interface, "xwayland_shell_v1") == 0 && xwl_screen->rootless) { - xwl_screen->xwayland_shell = -diff --git a/hw/xwayland/xwayland-screen.h b/hw/xwayland/xwayland-screen.h -index bf75278fd..d6b1a1d84 100644 ---- a/hw/xwayland/xwayland-screen.h -+++ b/hw/xwayland/xwayland-screen.h -@@ -113,7 +113,7 @@ struct xwl_screen { - struct xorg_list drm_lease_devices; - struct xorg_list queued_drm_lease_devices; - struct xorg_list drm_leases; -- struct zwp_tearing_control_v1 *tearing_control; -+ struct gamescope_tearing_control_v1 *tearing_control; - struct xwl_output *fixed_output; - struct xorg_list pending_wl_surface_destroy; - uint64_t surface_association_serial; -diff --git a/hw/xwayland/xwayland-window.c b/hw/xwayland/xwayland-window.c -index 527f41c90..3e42eb1c0 100644 ---- a/hw/xwayland/xwayland-window.c -+++ b/hw/xwayland/xwayland-window.c -@@ -48,7 +48,7 @@ - #include "linux-dmabuf-unstable-v1-client-protocol.h" - #include "viewporter-client-protocol.h" - #include "xdg-shell-client-protocol.h" --#include "tearing-control-unstable-v1-client-protocol.h" -+#include "gamescope-tearing-control-unstable-v1-client-protocol.h" - #include "xwayland-shell-v1-client-protocol.h" - - #define DELAYED_WL_SURFACE_DESTROY 1000 /* ms */ -@@ -897,7 +897,7 @@ ensure_surface_for_window(WindowPtr window) - - if (xwl_screen->tearing_control) { - xwl_window->tearing_control = -- zwp_tearing_control_v1_get_tearing_control(xwl_screen->tearing_control, xwl_window->surface); -+ gamescope_tearing_control_v1_get_tearing_control(xwl_screen->tearing_control, xwl_window->surface); - } - - if (xwl_screen->xwayland_shell) { -@@ -1150,7 +1150,7 @@ xwl_unrealize_window(WindowPtr window) - xwl_window_disable_viewport(xwl_window); - - if (xwl_window->tearing_control) { -- zwp_surface_tearing_control_v1_destroy(xwl_window->tearing_control); -+ gamescope_surface_tearing_control_v1_destroy(xwl_window->tearing_control); - xwl_window->tearing_control = NULL; - } - -diff --git a/hw/xwayland/xwayland-window.h b/hw/xwayland/xwayland-window.h -index efbb1f2fc..f62a7f1bd 100644 ---- a/hw/xwayland/xwayland-window.h -+++ b/hw/xwayland/xwayland-window.h -@@ -99,7 +99,7 @@ struct xwl_window { - struct wp_viewport *viewport; - float scale_x, scale_y; - struct xdg_surface *xdg_surface; -- struct zwp_surface_tearing_control_v1 *tearing_control; -+ struct gamescope_surface_tearing_control_v1 *tearing_control; - struct xdg_toplevel *xdg_toplevel; - WindowPtr window; - struct xorg_list link_damage; --- -2.42.0 - - -From c1451e6720b20505b7ce4fef3294a493fe4fe312 Mon Sep 17 00:00:00 2001 -From: Kyle Gospodnetich -Date: Wed, 31 Jan 2024 17:36:04 -0800 -Subject: [PATCH 4/4] Fix missing sync_flip param - ---- - hw/xwayland/xwayland-present.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/hw/xwayland/xwayland-present.c b/hw/xwayland/xwayland-present.c -index 5cbd767c9..f22e8f987 100644 ---- a/hw/xwayland/xwayland-present.c -+++ b/hw/xwayland/xwayland-present.c -@@ -754,7 +754,7 @@ xwl_present_clear_window_flip(WindowPtr window) - } - - static Bool --xwl_present_flip(present_vblank_ptr vblank, RegionPtr damage) -+xwl_present_flip(present_vblank_ptr vblank, RegionPtr damage, Bool sync_flip) - { - WindowPtr present_window = vblank->window; - PixmapPtr pixmap = vblank->pixmap; -@@ -873,7 +873,7 @@ xwl_present_execute(present_vblank_ptr vblank, uint64_t ust, uint64_t crtc_msc) - } else - damage = RegionDuplicate(&window->clipList); - -- if (xwl_present_flip(vblank, damage)) { -+ if (xwl_present_flip(vblank, damage, vblank->sync_flip)) { - WindowPtr toplvl_window = xwl_present_toplvl_pixmap_window(vblank->window); - PixmapPtr old_pixmap = screen->GetWindowPixmap(window); - --- -2.42.0 - diff --git a/spec_files/xorg-x11-server-Xwayland/old/xorg-x11-server-Xwayland.spec b/spec_files/xorg-x11-server-Xwayland/old/xorg-x11-server-Xwayland.spec deleted file mode 100644 index f4fc5a99..00000000 --- a/spec_files/xorg-x11-server-Xwayland/old/xorg-x11-server-Xwayland.spec +++ /dev/null @@ -1,279 +0,0 @@ -%global commit 9a55c402aa803fb10e39ab4fd18a709d0cd06fd4 -%global shortcommit %(c=%{commit}; echo ${c:0:7}) - -#global gitdate 20230426 -%global pkgname %{?gitdate:xserver}%{!?gitdate:xwayland} - -%global default_font_path "catalogue:/etc/X11/fontpath.d,built-ins" - -Summary: Xwayland -Name: xorg-x11-server-Xwayland -%global xwayland_version 23.2.2 -Version: %{xwayland_version}.bazzite.{{{ git_dir_version }}} -Release: 1%{?gitdate:.%{gitdate}git%{shortcommit}}%{?dist} - -URL: http://www.x.org -%if 0%{?gitdate} -Source0: https://gitlab.freedesktop.org/xorg/%{pkgname}/-/archive/%{commit}/%{pkgname}-%{shortcommit}.tar.gz -%else -Source0: https://www.x.org/pub/individual/xserver/%{pkgname}-%{xwayland_version}.tar.xz -%endif - -Patch1: 0001-Valve.patch - -License: MIT - -Requires: xorg-x11-server-common -Requires: libEGL -Requires: libepoxy >= 1.5.5 - -BuildRequires: gcc -BuildRequires: git-core -BuildRequires: meson - -BuildRequires: wayland-devel -BuildRequires: desktop-file-utils - -BuildRequires: pkgconfig(wayland-client) >= 1.21.0 -BuildRequires: pkgconfig(wayland-protocols) >= 1.30 -BuildRequires: pkgconfig(wayland-eglstream-protocols) - -BuildRequires: pkgconfig(epoxy) >= 1.5.5 -BuildRequires: pkgconfig(fontenc) -BuildRequires: pkgconfig(libdrm) >= 2.4.89 -BuildRequires: pkgconfig(libssl) -BuildRequires: pkgconfig(libtirpc) -BuildRequires: pkgconfig(pixman-1) -BuildRequires: pkgconfig(x11) -BuildRequires: pkgconfig(xau) -BuildRequires: pkgconfig(xdmcp) -BuildRequires: pkgconfig(xext) -BuildRequires: pkgconfig(xfixes) -BuildRequires: pkgconfig(xfont2) -BuildRequires: pkgconfig(xi) -BuildRequires: pkgconfig(xinerama) -BuildRequires: pkgconfig(xkbfile) -BuildRequires: pkgconfig(xmu) -BuildRequires: pkgconfig(xorg-macros) >= 1.17 -BuildRequires: pkgconfig(xpm) -BuildRequires: pkgconfig(xrender) -BuildRequires: pkgconfig(xres) -BuildRequires: pkgconfig(xshmfence) >= 1.1 -BuildRequires: pkgconfig(xtrans) >= 1.3.2 -BuildRequires: pkgconfig(xtst) -BuildRequires: pkgconfig(xv) -BuildRequires: pkgconfig(libxcvt) -BuildRequires: pkgconfig(libdecor-0) >= 0.1.1 -BuildRequires: pkgconfig(liboeffis-1.0) >= 1.0.0 -BuildRequires: pkgconfig(libei-1.0) >= 1.0.0 -BuildRequires: xorg-x11-proto-devel >= 2023.2-1 - -BuildRequires: mesa-libGL-devel >= 9.2 -BuildRequires: mesa-libEGL-devel -BuildRequires: mesa-libgbm-devel - -BuildRequires: audit-libs-devel -BuildRequires: libselinux-devel >= 2.0.86-1 - -# libunwind is Exclusive for the following arches -%ifarch aarch64 %{arm} hppa ia64 mips ppc ppc64 %{ix86} x86_64 -%if !0%{?rhel} -BuildRequires: libunwind-devel -%endif -%endif - -BuildRequires: pkgconfig(xcb-aux) -BuildRequires: pkgconfig(xcb-image) -BuildRequires: pkgconfig(xcb-icccm) -BuildRequires: pkgconfig(xcb-keysyms) -BuildRequires: pkgconfig(xcb-renderutil) - -%description -Xwayland is an X server for running X clients under Wayland. - -%package devel -Summary: Development package -Requires: pkgconfig -Requires: %{name}%{?_isa} = %{xwayland_version}-%{release} - -%description devel -The development package provides the developmental files which are -necessary for developing Wayland compositors using Xwayland. - -%prep -%autosetup -S git_am -n %{pkgname}-%{?gitdate:%{commit}}%{!?gitdate:%{xwayland_version}} - -%build -%meson \ - %{?gitdate:-Dxwayland=true -D{xorg,xnest,xvfb,udev}=false} \ - -Dxwayland_eglstream=true \ - -Ddefault_font_path=%{default_font_path} \ - -Dbuilder_string="Build ID: %{name} %{xwayland_version}-%{release}" \ - -Dxkb_output_dir=%{_localstatedir}/lib/xkb \ - -Dxcsecurity=true \ - -Dglamor=true \ - -Ddri3=true - -%meson_build - -%install -%meson_install - -# Remove unwanted files/dirs -rm $RPM_BUILD_ROOT%{_mandir}/man1/Xserver.1* -rm -Rf $RPM_BUILD_ROOT%{_libdir}/xorg -rm -Rf $RPM_BUILD_ROOT%{_includedir}/xorg -rm -Rf $RPM_BUILD_ROOT%{_datadir}/aclocal -rm -Rf $RPM_BUILD_ROOT%{_localstatedir}/lib/xkb - -%check -desktop-file-validate %{buildroot}%{_datadir}/applications/*.desktop - -%files -%{_bindir}/Xwayland -%{_mandir}/man1/Xwayland.1* -%{_datadir}/applications/org.freedesktop.Xwayland.desktop - -%files devel -%{_libdir}/pkgconfig/xwayland.pc - -%changelog -* Thu Oct 26 2023 Olivier Fourdan - 23.2.2-1 -- xwayland 23.2.2 - (#2246029) - -* Wed Oct 25 2023 Peter Hutterer - 23.2.1-2 -- Fix for CVE-2023-5367 - -* Wed Sep 20 2023 Olivier Fourdan - 23.2.1-1 -- xwayland 23.2.1 - (#2239813) - -* Mon Sep 11 2023 Olivier Fourdan - 23.2.0-2 -- migrated to SPDX license - -* Wed Aug 16 2023 Olivier Fourdan - 23.2.0-1 -- xwayland 23.2.0 - -* Wed Aug 2 2023 Olivier Fourdan - 23.1.99.902-1 -- xwayland 23.1.99.902 (xwayland 23.2.0 rc2) - -* Mon Jul 31 2023 Olivier Fourdan - 23.1.99.901-2 -- Fix devel package requires. - -* Wed Jul 19 2023 Olivier Fourdan - 23.1.99.901-1 -- xwayland 23.1.99.901 (xwayland 23.2.0 rc1) - -* Tue Jun 6 2023 Olivier Fourdan - 23.1.2-1 -- xwayland 23.1.2 - -* Thu Apr 27 2023 Olivier Fourdan - 23.1.1-2 -- Fix spec file to build from git upstream - (#2190211) - -* Wed Mar 29 2023 Olivier Fourdan - 23.1.1-1 -- xwayland 23.1.1 - (#2182734) - CVE fix for: CVE-2023-1393 - -* Wed Mar 22 2023 Olivier Fourdan - 23.1.0-1 -- xwayland 23.1.0 - (#2180913) - -* Thu Mar 9 2023 Olivier Fourdan - 23.0.99.902-1 -- xwayland 23.0.99.902 (xwayland 23.1.0 rc2) - (#2172415, #2173201) - -* Wed Feb 22 2023 Olivier Fourdan - 23.0.99.901-1 -- xwayland 23.0.99.901 (xwayland 23.1.0 rc1) - (#2172415) - -* Tue Feb 7 2023 Olivier Fourdan - 22.1.8-1 -- xwayland 22.1.8 - Fixes CVE-2023-0494 (#2165995, #2167566, #2167734) - -* Sun Jan 29 2023 Stefan Bluhm - 22.1.7-4 -- Updated conditional Fedora statement. - -* Thu Jan 19 2023 Olivier Fourdan - 22.1.7-3 -- Use the recommended way to apply conditional patches without - conditionalizing the sources (for byte-swapped clients). - -* Tue Jan 17 2023 Olivier Fourdan - 22.1.7-2 -- Disallow byte-swapped clients on Fedora 38 and above (#2159489) - -* Mon Dec 19 2022 Olivier Fourdan - 22.1.7-1 -- xwayland 22.1.7 - -* Wed Dec 14 2022 Peter Hutterer - 22.1.6-1 -- xwayland 22.1.6 - Fixes CVE-2022-46340, CVE-2022-46341, CVE-2022-46342, CVE-2022-46343, - CVE-2022-46344, CVE-2022-4283 - -* Wed Nov 2 2022 Olivier Fourdan - 22.1.5-1 -- xwayland 22.1.5 (#2139387) - -* Thu Oct 20 2022 Olivier Fourdan - 22.1.4-1 -- xwayland 22.1.4 (#2136518) - -* Sat Jul 23 2022 Fedora Release Engineering - 22.1.3-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild - -* Tue Jul 12 2022 Olivier Fourdan - 22.1.3-1 -- xwayland 22.1.3 - (#2106387) - Fix CVE-2022-2319/ZDI-CAN-16062, CVE-2022-2320/ZDI-CAN-16070 - -* Wed May 25 2022 Olivier Fourdan - 22.1.2-1 -- xwayland 22.1.2 - (#2090172) - -* Thu Mar 31 2022 Olivier Fourdan - 22.1.1-1 -- xwayland 22.1.1 - (#2070435) - -* Wed Feb 16 2022 Olivier Fourdan - 22.1.0 -- xwayland 22.1.0 - (#2055270) - -* Wed Feb 2 2022 Olivier Fourdan - 22.0.99.902 -- xwayland 22.0.99.902 (xwayland 22.1.0 rc2) - (#2042521) - -* Tue Jan 25 2022 Olivier Fourdan - 22.0.99.901 -- xwayland 22.0.99.901 (xwayland 22.1.0 rc1) - (#2042521) - -* Sat Jan 22 2022 Fedora Release Engineering - 21.1.4-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild - -* Tue Dec 14 2021 Olivier Fourdan - 21.1.4 -- xwayland 21.1.4 - -* Mon Nov 8 2021 Olivier Fourdan - 21.1.3 -- xwayland 21.1.3 - (#2016468) - -* Thu Oct 21 2021 Olivier Fourdan - 21.1.2.901-1 -- xwayland 21.1.2.901 (aka 21.1.3 RC1) - (#2015413) - -* Tue Sep 14 2021 Sahana Prasad - 21.1.2-3 -- Rebuilt with OpenSSL 3.0.0 - -* Fri Jul 23 2021 Fedora Release Engineering - 21.1.2-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild - -* Fri Jul 9 2021 Olivier Fourdan - 21.1.2-1 -- xwayland 21.1.2 - -* Thu Jul 1 2021 Olivier Fourdan - 21.1.1.901-1 -- xwayland 21.1.1.901 - -* Mon Jun 21 2021 Olivier Fourdan - 21.1.1-3 -- Fix a use-after-free in the previous changes for GLX - -* Thu Jun 10 2021 Olivier Fourdan - 21.1.1-2 -- Backport fixes for GLX and EGLstream (#1948003) - -* Wed Apr 14 2021 Olivier Fourdan - 21.1.1-1 -- xwayland 21.1.1 (CVE-2021-3472 / ZDI-CAN-1259) - -* Thu Mar 18 2021 Olivier Fourdan - 21.1.0-1 -- xwayland 21.1.0 - -* Thu Mar 4 2021 Olivier Fourdan - 21.0.99.902-1 -- xwayland 21.0.99.902 -- Remove xdmcp, udev, udev_kms build options -- Stop overriding the vendor name, same as xorg-x11-server - -* Thu Feb 18 2021 Olivier Fourdan - 21.0.99.901-1 -- xwayland 21.0.99.901 - -* Mon Feb 1 2021 Olivier Fourdan - 1.20.99.1-0.1.20210201git5429791 -- Initial import (#1912335). diff --git a/spec_files/xorg-x11-server-Xwayland/xorg-x11-server-Xwayland.spec b/spec_files/xorg-x11-server-Xwayland/xorg-x11-server-Xwayland.spec index e56eaa94..3236435d 100644 --- a/spec_files/xorg-x11-server-Xwayland/xorg-x11-server-Xwayland.spec +++ b/spec_files/xorg-x11-server-Xwayland/xorg-x11-server-Xwayland.spec @@ -8,7 +8,7 @@ Summary: Xwayland Name: xorg-x11-server-Xwayland -%global xwayland_version 23.2.4 +%global xwayland_version 23.2.6 Version: %{xwayland_version}.bazzite.{{{ git_dir_version }}} Release: 1%{?gitdate:.%{gitdate}git%{shortcommit}}%{?dist} @@ -19,7 +19,8 @@ Source0: https://gitlab.freedesktop.org/xorg/%{pkgname}/-/archive/%{commit}/%{ Source0: https://www.x.org/pub/individual/xserver/%{pkgname}-%{xwayland_version}.tar.xz %endif -Patch1: 0001-Valve.patch +Patch0: xwayland-pointer-warp-fix.patch +Patch1: 0001-xwayland-Send-ei_device_frame-on-device_scroll_discr.patch License: MIT @@ -95,7 +96,7 @@ Xwayland is an X server for running X clients under Wayland. %package devel Summary: Development package Requires: pkgconfig -Requires: %{name}%{?_isa} = %{xwayland_version}-%{release} +Requires: %{name}%{?_isa} = %{version}-%{release} %description devel The development package provides the developmental files which are @@ -106,10 +107,10 @@ necessary for developing Wayland compositors using Xwayland. %build %meson \ - %{?gitdate:-Dxwayland=true -D{xorg,xnest,xvfb,udev}=false} \ + %{?gitdate:-Dxwayland=true -D{xorg,xnest,xvfb,udev}=false} \ -Dxwayland_eglstream=true \ -Ddefault_font_path=%{default_font_path} \ - -Dbuilder_string="Build ID: %{name} %{xwayland_version}-%{release}" \ + -Dbuilder_string="Build ID: %{name} %{version}-%{release}" \ -Dxkb_output_dir=%{_localstatedir}/lib/xkb \ -Dserverconfigdir=%{_datadir}/xwayland \ -Dxcsecurity=true \ @@ -140,6 +141,19 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/*.desktop %{_libdir}/pkgconfig/xwayland.pc %changelog +* Tue Apr 09 2024 Olivier Fourdan - 23.2.6-1 +- xwayland 23.2.6 - (#2273002) + +* Wed Apr 03 2024 José Expósito - 23.2.5-1 +- CVE fix for: CVE-2024-31080, CVE-2024-31081, CVE-2024-31082 and + CVE-2024-31083 + +* Mon Jan 29 2024 Florian Weimer - 23.2.4-3 +- Fix C compatibility issue on i686 + +* Sat Jan 27 2024 Fedora Release Engineering - 23.2.4-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + * Tue Jan 16 2024 Olivier Fourdan - 23.2.4-1 - xwayland 23.2.4 - (#2254280) CVE fix for: CVE-2023-6816, CVE-2024-0229, CVE-2024-21885, CVE-2024-21886, diff --git a/spec_files/xorg-x11-server-Xwayland/xwayland-pointer-warp-fix.patch b/spec_files/xorg-x11-server-Xwayland/xwayland-pointer-warp-fix.patch new file mode 100644 index 00000000..e9a53ed6 --- /dev/null +++ b/spec_files/xorg-x11-server-Xwayland/xwayland-pointer-warp-fix.patch @@ -0,0 +1,35 @@ +From fdc71a08f059d2466e39968652c3df71cc582b3e Mon Sep 17 00:00:00 2001 +From: GloriousEggroll +Date: Sun, 21 May 2023 03:34:46 -0600 +Subject: [PATCH] xwayland pointer warp fix + +--- + hw/xwayland/xwayland-input.c | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +diff --git a/hw/xwayland/xwayland-input.c b/hw/xwayland/xwayland-input.c +index 34dd3c8..f7fa737 100644 +--- a/hw/xwayland/xwayland-input.c ++++ b/hw/xwayland/xwayland-input.c +@@ -3202,9 +3202,6 @@ xwl_seat_emulate_pointer_warp(struct xwl_seat *xwl_seat, + if (!xwl_seat_can_emulate_pointer_warp(xwl_seat)) + return; + +- if (xwl_seat->x_cursor != NULL) +- return; +- + if (!xwl_seat->pointer_warp_emulator) + xwl_seat_create_pointer_warp_emulator(xwl_seat); + +@@ -3215,6 +3212,8 @@ xwl_seat_emulate_pointer_warp(struct xwl_seat *xwl_seat, + xwl_window, + sprite, + x, y); ++ if (xwl_seat->x_cursor != NULL) ++ xwl_seat_destroy_pointer_warp_emulator(xwl_seat); + } + + static Bool +-- +2.40.1 +