Merge branch 'main' into testing

This commit is contained in:
Kyle Gospodnetich 2024-05-12 23:43:20 -07:00
commit 69362a11a5
14 changed files with 87 additions and 3018 deletions

View File

@ -20,8 +20,7 @@ Patch1: 720p.patch
Patch2: disable-steam-touch-click-atom.patch
Patch3: external-rotation.patch
Patch4: panel-type.patch
Patch5: gestures.patch
Patch6: deckhd.patch
Patch5: deckhd.patch
BuildRequires: meson >= 0.54.0
BuildRequires: ninja-build

View File

@ -1,257 +0,0 @@
diff --git a/meson.build b/meson.build
index ab55c7f..a0ea1f3 100644
--- a/meson.build
+++ b/meson.build
@@ -44,6 +44,7 @@
'ext-session-lock': ['v1'],
'fractional-scale': ['v1'],
'security-context': ['v1'],
+ 'linux-drm-syncobj': ['v1'],
'single-pixel-buffer': ['v1'],
'tearing-control': ['v1'],
'xdg-activation': ['v1'],
diff --git a/staging/linux-drm-syncobj/README b/staging/linux-drm-syncobj/README
new file mode 100644
index 0000000..a380b31
--- /dev/null
+++ b/staging/linux-drm-syncobj/README
@@ -0,0 +1,4 @@
+Linux DRM syncobj protocol
+
+Maintainers:
+Simon Ser <contact@emersion.fr>
diff --git a/staging/linux-drm-syncobj/linux-drm-syncobj-v1.xml b/staging/linux-drm-syncobj/linux-drm-syncobj-v1.xml
new file mode 100644
index 0000000..7326421
--- /dev/null
+++ b/staging/linux-drm-syncobj/linux-drm-syncobj-v1.xml
@@ -0,0 +1,229 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<protocol name="linux_drm_syncobj_v1">
+ <copyright>
+ Copyright 2016 The Chromium Authors.
+ Copyright 2017 Intel Corporation
+ Copyright 2018 Collabora, Ltd
+ Copyright 2021 Simon Ser
+
+ 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.
+ </copyright>
+
+ <description summary="protocol for providing explicit synchronization">
+ This protocol allows clients to request explicit synchronization for
+ buffers. It is tied to the Linux DRM synchronization object framework.
+
+ Synchronization refers to co-ordination of pipelined operations performed
+ on buffers. Most GPU clients will schedule an asynchronous operation to
+ render to the buffer, then immediately send the buffer to the compositor
+ to be attached to a surface.
+
+ With implicit synchronization, ensuring that the rendering operation is
+ complete before the compositor displays the buffer is an implementation
+ detail handled by either the kernel or userspace graphics driver.
+
+ By contrast, with explicit synchronization, DRM synchronization object
+ timeline points mark when the asynchronous operations are complete. When
+ submitting a buffer, the client provides a timeline point which will be
+ waited on before the compositor accesses the buffer. The client can also
+ provide a timeline point that the compositor will signal when it no longer
+ needs to access the buffer contents for the purposes of the surface commit.
+
+ Linux DRM synchronization objects are documented at:
+ https://dri.freedesktop.org/docs/drm/gpu/drm-mm.html#drm-sync-objects
+
+ Warning! The protocol described in this file is currently in the testing
+ phase. Backward compatible changes may be added together with the
+ corresponding interface version bump. Backward incompatible changes can
+ only be done by creating a new major version of the extension.
+ </description>
+
+ <interface name="wp_linux_drm_syncobj_v1" version="1">
+ <description summary="global for providing explicit synchronization">
+ This global is a factory interface, allowing clients to request
+ explicit synchronization for buffers on a per-surface basis.
+
+ See wp_linux_drm_syncobj_surface_v1 for more information.
+ </description>
+
+ <request name="destroy" type="destructor">
+ <description summary="destroy explicit synchronization factory object">
+ Destroy this explicit synchronization factory object. Other objects
+ shall not be affected by this request.
+ </description>
+ </request>
+
+ <enum name="error">
+ <entry name="surface_exists" value="0"
+ summary="the surface already has a synchronization object associated"/>
+ <entry name="invalid_timeline" value="1"
+ summary="the timeline object could not be imported"/>
+ </enum>
+
+ <request name="get_surface">
+ <description summary="extend surface interface for explicit synchronization">
+ Instantiate an interface extension for the given wl_surface to provide
+ explicit synchronization.
+
+ If the given wl_surface already has an explicit synchronization object
+ associated, the surface_exists protocol error is raised.
+
+ 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 surface_exists protocol error.
+ </description>
+ <arg name="id" type="new_id" interface="wp_linux_drm_syncobj_surface_v1"
+ summary="the new synchronization surface object id"/>
+ <arg name="surface" type="object" interface="wl_surface"
+ summary="the surface"/>
+ </request>
+
+ <request name="import_timeline">
+ <description summary="import a DRM syncobj timeline">
+ Import a DRM synchronization object timeline.
+
+ If the FD cannot be imported, the invalid_timeline error is raised.
+ </description>
+ <arg name="id" type="new_id" interface="wp_linux_drm_syncobj_timeline_v1"/>
+ <arg name="fd" type="fd" summary="drm_syncobj file descriptor"/>
+ </request>
+ </interface>
+
+ <interface name="wp_linux_drm_syncobj_timeline_v1" version="1">
+ <description summary="synchronization object timeline">
+ This object represents an explicit synchronization object timeline
+ imported by the client to the compositor.
+ </description>
+
+ <request name="destroy" type="destructor">
+ <description summary="destroy the timeline">
+ Destroy the synchronization object timeline. Other objects are not
+ affected by this request, in particular timeline points set by
+ set_acquire_point and set_release_point are not unset.
+ </description>
+ </request>
+ </interface>
+
+ <interface name="wp_linux_drm_syncobj_surface_v1" version="1">
+ <description summary="per-surface explicit synchronization">
+ This object is an add-on interface for wl_surface to enable explicit
+ synchronization.
+
+ Each surface can be associated with only one object of this interface at
+ any time.
+
+ Explicit synchronization is guaranteed to be supported for buffers
+ created with any version of the linux-dmabuf protocol and for opaque EGL
+ buffers described in EGL_WL_bind_wayland_display. Compositors are free to
+ support explicit synchronization for additional buffer types.
+
+ As long as the wp_linux_drm_syncobj_surface_v1 object is alive, the
+ compositor may ignore implicit synchronization for buffers attached and
+ committed to the wl_surface.
+ </description>
+
+ <request name="destroy" type="destructor">
+ <description summary="destroy the surface synchronization object">
+ Destroy this surface synchronization object.
+
+ Any timeline point set by this object with set_acquire_point or
+ set_release_point since the last commit will be discarded by the
+ compositor. Any timeline point set by this object before the last
+ commit will not be affected.
+ </description>
+ </request>
+
+ <enum name="error">
+ <entry name="no_surface" value="1"
+ summary="the associated wl_surface was destroyed"/>
+ <entry name="unsupported_buffer" value="2"
+ summary="the buffer does not support explicit synchronization"/>
+ <entry name="no_buffer" value="3" summary="no buffer was attached"/>
+ </enum>
+
+ <request name="set_acquire_point">
+ <description summary="set the acquire timeline point">
+ Set the timeline point that must be signalled before the compositor may
+ sample from the buffer attached with wl_surface.attach.
+
+ The 64-bit unsigned value combined from point_hi and point_lo is the
+ point value.
+
+ The acquire point is double-buffered state, and will be applied on the
+ next wl_surface.commit request for the associated surface. Thus, it
+ applies only to the buffer that is attached to the surface at commit
+ time.
+
+ If an acquire point has already been attached during the same commit
+ cycle, the new point replaces the old one.
+
+ If the associated wl_surface was destroyed, a no_surface error is
+ raised.
+
+ If at surface commit time the attached buffer does not support explicit
+ synchronization, an unsupported_buffer error is raised.
+
+ If at surface commit time there is no buffer attached, a no_buffer
+ error is raised.
+ </description>
+ <arg name="timeline" type="object" interface="wp_linux_drm_syncobj_timeline_v1"/>
+ <arg name="point_hi" type="uint" summary="high 32 bits of the point value"/>
+ <arg name="point_lo" type="uint" summary="low 32 bits of the point value"/>
+ </request>
+
+ <request name="set_release_point">
+ <description summary="set the release timeline point">
+ Set the timeline point that must be signalled by the compositor when it
+ has finished its usage of the buffer attached with wl_surface.attach
+ for the relevant commit.
+
+ Once the timeline point is signaled, and assuming the associated buffer
+ is not pending release from other wl_surface.commit requests on other
+ surfaces, no additional explicit or implicit synchronization is
+ required to safely re-use the buffer.
+
+ The 64-bit unsigned value combined from point_hi and point_lo is the
+ point value.
+
+ The release point is double-buffered state, and will be applied on the
+ next wl_surface.commit request for the associated surface. Thus, it
+ applies only to the buffer that is attached to the surface at commit
+ time.
+
+ If a release point has already been attached during the same commit
+ cycle, the new point replaces the old one.
+
+ If the associated wl_surface was destroyed, a no_surface error is
+ raised.
+
+ If at surface commit time the attached buffer does not support explicit
+ synchronization, an unsupported_buffer error is raised.
+
+ If at surface commit time there is no buffer attached, a no_buffer
+ error is raised.
+ </description>
+ <arg name="timeline" type="object" interface="wp_linux_drm_syncobj_timeline_v1"/>
+ <arg name="point_hi" type="uint" summary="high 32 bits of the point value"/>
+ <arg name="point_lo" type="uint" summary="low 32 bits of the point value"/>
+ </request>
+ </interface>
+</protocol>

View File

@ -1,198 +0,0 @@
Name: wayland-protocols
%global wayland_version 1.32
Version: %{wayland_version}.bazzite.{{{ git_dir_version }}}
Release: 2%{?dist}
Summary: Wayland protocols that adds functionality not available in the core protocol
License: MIT
URL: https://wayland.freedesktop.org/
Source0: https://gitlab.freedesktop.org/wayland/%{name}/-/releases/%{wayland_version}/downloads/%{name}-%{wayland_version}.tar.xz
# needed for nvidia on wayland
# https://gitlab.freedesktop.org/wayland/wayland-protocols/-/merge_requests/90
Patch0: 90.patch
BuildArch: noarch
BuildRequires: gcc
BuildRequires: gcc-g++
BuildRequires: meson
BuildRequires: wayland-devel
%description
wayland-protocols contains Wayland protocols that adds functionality not
available in the Wayland core protocol. Such protocols either adds
completely new functionality, or extends the functionality of some other
protocol either in Wayland core, or some other protocol in
wayland-protocols.
%package devel
Summary: Wayland protocols that adds functionality not available in the core protocol
%description devel
wayland-protocols contains Wayland protocols that adds functionality not
available in the Wayland core protocol. Such protocols either adds
completely new functionality, or extends the functionality of some other
protocol either in Wayland core, or some other protocol in
wayland-protocols.
%prep
%autosetup -n %{name}-%{wayland_version}
mkdir -p staging/linux-drm-syncobj/
mv README staging/linux-drm-syncobj/
mv linux-drm-syncobj-v1.xml staging/linux-drm-syncobj/
%build
%meson
%meson_build
%install
%meson_install
%files devel
%license COPYING
%doc README.md
%{_datadir}/pkgconfig/%{name}.pc
%{_datadir}/%{name}/
%changelog
* Sat Jan 21 2023 Fedora Release Engineering <releng@fedoraproject.org> - 1.31-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
* Tue Nov 29 2022 Kalev Lember <klember@redhat.com> - 1.31-1
- Update to 1.31
* Mon Nov 21 2022 Kalev Lember <klember@redhat.com> - 1.30-1
- Update to 1.30
* Tue Nov 15 2022 Kalev Lember <klember@redhat.com> - 1.29-1
- Update to 1.29
* Sat Nov 05 2022 Kalev Lember <klember@redhat.com> - 1.28-1
- Update to 1.28
* Wed Oct 12 2022 Neal Gompa <ngompa@fedoraproject.org> - 1.27-1
- Update to 1.27
* Sat Jul 23 2022 Fedora Release Engineering <releng@fedoraproject.org> - 1.26-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
* Fri Jul 8 2022 Olivier Fourdan <ofourdan@redhat.com> - 1.26-1
- Update to 1.26
* Sat Feb 19 2022 Neal Gompa <ngompa@fedoraproject.org> - 1.25-1
- Update to 1.25
* Sat Jan 22 2022 Fedora Release Engineering <releng@fedoraproject.org> - 1.24-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
* Sat Nov 27 2021 Neal Gompa <ngompa@fedoraproject.org> - 1.24-1
- Update to 1.24
* Mon Sep 20 2021 Neal Gompa <ngompa@fedoraproject.org> - 1.23-1
- Update to 1.23
* Mon Sep 20 2021 Neal Gompa <ngompa@fedoraproject.org> - 1.22-1
- Update to 1.22
* Fri Jul 23 2021 Fedora Release Engineering <releng@fedoraproject.org> - 1.21-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
* Tue May 04 2021 Kalev Lember <klember@redhat.com> - 1.21-1
- Update to 1.21
- Switch to meson build system
* Wed Jan 27 2021 Fedora Release Engineering <releng@fedoraproject.org> - 1.20-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
* Wed Jul 29 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1.20-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Sat Feb 29 2020 Jonas Ådahl <jadahl@redhat.com> - 1.20-1
- Update to 1.20
* Fri Jan 31 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1.18-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
* Mon Jul 29 2019 Olivier Fourdan <ofourdan@redhat.com> - 1.18-1
- Update to 1.18
* Sat Jul 27 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1.17-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
* Sun Feb 03 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1.17-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
* Wed Nov 21 2018 Kalev Lember <klember@redhat.com> - 1.17-1
- Update to 1.17
* Tue Jul 31 2018 Kalev Lember <klember@redhat.com> - 1.16-1
- Update to 1.16
* Sat Jul 14 2018 Fedora Release Engineering <releng@fedoraproject.org> - 1.15-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
* Thu Jul 05 2018 Adam Jackson <ajax@redhat.com> - 1.15-1
- Update to 1.15
* Tue May 08 2018 Kalev Lember <klember@redhat.com> - 1.14-1
- Update to 1.14
* Thu Feb 15 2018 Kalev Lember <klember@redhat.com> - 1.13-1
- Update to 1.13
* Fri Feb 09 2018 Fedora Release Engineering <releng@fedoraproject.org> - 1.12-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
* Thu Dec 07 2017 Kalev Lember <klember@redhat.com> - 1.12-1
- Update to 1.12
* Wed Nov 15 2017 Kalev Lember <klember@redhat.com> - 1.11-1
- Update to 1.11
* Mon Jul 31 2017 Kalev Lember <klember@redhat.com> - 1.10-1
- Update to 1.10
* Thu Jul 27 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1.9-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
* Wed Jul 19 2017 Kalev Lember <klember@redhat.com> - 1.9-1
- Update to 1.9
* Sat Feb 11 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1.7-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
* Tue Aug 16 2016 Kalev Lember <klember@redhat.com> - 1.7-1
- Update to 1.7
* Fri Aug 12 2016 Kalev Lember <klember@redhat.com> - 1.6-1
- Update to 1.6
* Tue Jul 26 2016 Kalev Lember <klember@redhat.com> - 1.5-1
- Update to 1.5
* Tue May 24 2016 Kalev Lember <klember@redhat.com> - 1.4-1
- Update to 1.4
* Mon Apr 11 2016 Kalev Lember <klember@redhat.com> - 1.3-1
- Update to 1.3
* Mon Mar 07 2016 Kalev Lember <klember@redhat.com> - 1.2-1
- Update to 1.2
* Thu Feb 18 2016 Kalev Lember <klember@redhat.com> - 1.1-1
- Update to 1.1
* Fri Feb 05 2016 Fedora Release Engineering <releng@fedoraproject.org> - 1.0-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
* Sat Dec 05 2015 Igor Gnatenko <i.gnatenko.brain@gmail.com> - 1.0-2
- Fix description
* Thu Nov 26 2015 Igor Gnatenko <i.gnatenko.brain@gmail.com> - 1.0-1
- Update to released 1.0
- Move XMLs to devel pkg
- Drop non-interesting part of description
* Sun Nov 22 2015 Igor Gnatenko <i.gnatenko.brain@gmail.com> - 0.1.0-0.gitf828a43
- Initial package

View File

@ -1,387 +0,0 @@
From 1a25782bd57e4a4d4329eae138c136be7c6f0532 Mon Sep 17 00:00:00 2001
From: Erik Kurzinger <ekurzinger@nvidia.com>
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 <ekurzinger@nvidia.com>
---
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 <ekurzinger@nvidia.com>
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 <ekurzinger@nvidia.com>
---
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 <X11/extensions/presenttokens.h>
+#include <X11/extensions/dri3proto.h>
#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

View File

@ -1,31 +0,0 @@
#!/bin/sh
proto=$1
branch=$2
if [ -z "$proto" ]; then
echo "Usage: $0 <proto name> [<branch>]"
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"

View File

@ -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 <releng@fedoraproject.org> - 2023.2-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
* Fri Jun 16 2023 Olivier Fourdan <ofourdan@redhat.com> - 2023.2-1
- xorgproto 2023.2
* Mon Jun 5 2023 Olivier Fourdan <ofourdan@redhat.com> - 2023.1-1
- xorgproto 2023.1
* Sat Jan 21 2023 Fedora Release Engineering <releng@fedoraproject.org> - 2022.2-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
* Thu Aug 11 2022 Peter Hutterer <peter.hutterer@redhat.com> - 2022.2-2
- xorgproto 2022.2
* Sat Jul 23 2022 Fedora Release Engineering <releng@fedoraproject.org> - 2022.1-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
* Thu Apr 21 2022 Peter Hutterer <peter.hutterer@redhat.com> - 2022.1-1
- xorgproto 2022.1
* Sat Jan 22 2022 Fedora Release Engineering <releng@fedoraproject.org> - 2021.5-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
* Thu Sep 16 2021 Peter Hutterer <peter.hutterer@redhat.com> - 2021.5-1
- xorgproto 2021.5
* Fri Jul 23 2021 Fedora Release Engineering <releng@fedoraproject.org> - 2021.4.99.2-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
* Fri Jun 04 2021 Adam Jackson <ajax@redhat.com> - 2021.4.99.2-1
- Prerelease for inputproto snapshot
* Wed Jun 02 2021 Adam Jackson <ajax@redhat.com> - 2021.4-2
- Build with meson not autotools
* Fri Apr 30 2021 Peter Hutterer <peter.hutterer@redhat.com> 2021.4-1
- xorgproto 2021.4 with XFixes 6
* Thu Feb 25 2021 Peter Hutterer <peter.hutterer@redhat.com> 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 <peter.hutterer@redhat.com> 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 <releng@fedoraproject.org> - 2019.1-6
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
* Thu Nov 5 10:26:38 AEST 2020 Peter Hutterer <peter.hutterer@redhat.com> - 2019.1-5
- Add BuildRequires for make
* Wed Jul 29 2020 Fedora Release Engineering <releng@fedoraproject.org> - 2019.1-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Fri Jan 31 2020 Fedora Release Engineering <releng@fedoraproject.org> - 2019.1-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
* Sat Jul 27 2019 Fedora Release Engineering <releng@fedoraproject.org> - 2019.1-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
* Thu Jun 20 2019 Peter Hutterer <peter.hutterer@redhat.com> 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 <releng@fedoraproject.org> - 2018.4-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
* Sat Jul 14 2018 Fedora Release Engineering <releng@fedoraproject.org> - 2018.4-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
* Wed Feb 28 2018 Adam Jackson <ajax@redhat.com> - 2018.4-1
- xorgproto 2018.4
* Wed Feb 21 2018 Adam Jackson <ajax@redhat.com> - 2018.3-1
- xorgproto 2018.3
* Mon Feb 12 2018 Adam Jackson <ajax@redhat.com> - 2018.2-1
- xorgproto 2018.2
* Fri Feb 09 2018 Fedora Release Engineering <releng@fedoraproject.org> - 2018.1-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
* Mon Feb 05 2018 Adam Jackson <ajax@redhat.com> - 2018.1-1
- Switch to merged protocol headers
- Drop evie headers
- Pre-F18 changelog trim
* Tue Nov 07 2017 Adam Jackson <ajax@redhat.com> - 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 <releng@fedoraproject.org> - 7.7-23
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
* Fri May 12 2017 Hans de Goede <hdegoede@redhat.com> - 7.7-22
- Add xproto patches from upstream adding XF86Keyboard and XF86RFKill keysyms
* Sat Feb 11 2017 Fedora Release Engineering <releng@fedoraproject.org> - 7.7-21
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
* Mon Sep 26 2016 Adam Jackson <ajax@redhat.com> - 7.7-20
- xproto 7.0.31
* Mon Apr 04 2016 Peter Hutterer <peter.hutterer@redhat.com> 7.7-19
- inputproto 2.3.2
* Fri Mar 11 2016 Adam Jackson <ajax@redhat.com> 7.7-18
- videoproto 2.3.3
* Fri Feb 05 2016 Fedora Release Engineering <releng@fedoraproject.org> - 7.7-17
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
* Wed Jan 20 2016 Peter Hutterer <peter.hutterer@redhat.com>
- s/define/global/
* Wed Jul 01 2015 Adam Jackson <ajax@redhat.com> 7.7-16
- xproto 7.0.28
* Fri Jun 19 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 7.7-15
- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
* Sun May 17 2015 Dave Airlie <airlied@redhat.com> 7.7-14
- randrproto-1.5.0
* Wed Apr 01 2015 Dave Airlie <airlied@redhat.com> 7.7-13
- randrproto-1.4.1
* Thu Jun 12 2014 Hans de Goede <hdegoede@redhat.com> - 7.7-12
- inputproto-2.3.1
* Sun Jun 08 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 7.7-11
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
* Wed Apr 16 2014 Hans de Goede <hdegoede@redhat.com> - 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 <ajax@redhat.com> 7.7-9
- Backport pointer-to-void* changes
* Tue Dec 10 2013 Adam Jackson <ajax@redhat.com> 7.7-8
- glproto 1.4.17
* Wed Nov 06 2013 Adam Jackson <ajax@redhat.com> 7.7-7
- presentproto 1.0
- dri3proto 1.0
- xextproto 7.2.99.901
* Sun Aug 04 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 7.7-6
- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
* Tue Apr 02 2013 Peter Hutterer <peter.hutterer@redhat.com> 7.7-5
- xproto 7.0.24
* Thu Mar 07 2013 Dave Airlie <airlied@redhat.com> 7.7-4
- autoreconf for aarch64
* Thu Mar 07 2013 Peter Hutterer <peter.hutterer@redhat.com> 7.7-3
- inputproto 2.3
* Fri Feb 15 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 7.7-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild
* Tue Jan 08 2013 Adam Jackson <ajax@redhat.com> 7.7-1
- inputproto 2.2.99.1
* Thu Jul 26 2012 Peter Hutterer <peter.hutterer@redhat.com> 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 <rel-eng@lists.fedoraproject.org> - 7.6-23
- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild

View File

@ -1,729 +0,0 @@
From e496ed0a6b6c467ac01e33fa14e05dc2e0888a74 Mon Sep 17 00:00:00 2001
From: Kyle Gospodnetich <me@kylegospodneti.ch>
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 <joshua@froggi.es>
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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<protocol name="zwp_tearing_control_unstable_v1">
+
+ <copyright>
+ 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.
+ </copyright>
+
+ <interface name="zwp_tearing_control_v1" version="1">
+ <description summary="protocol for tearing control">
+ 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.
+ </description>
+
+ <request name="destroy" type="destructor">
+ <description summary="destroy tearing control factory object">
+ 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.
+ </description>
+ </request>
+
+ <enum name="error">
+ <entry name="tearing_control_exists" value="0"
+ summary="the surface already has a tearing object associated"/>
+ </enum>
+
+ <request name="get_tearing_control">
+ <description summary="extend surface interface for tearing control">
+ 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.
+ </description>
+
+ <arg name="id" type="new_id"
+ interface="zwp_surface_tearing_control_v1"
+ summary="the new surface tearing interface id"/>
+ <arg name="surface" type="object" interface="wl_surface"
+ summary="the surface"/>
+ </request>
+ </interface>
+
+ <interface name="zwp_surface_tearing_control_v1" version="1">
+ <description summary="per-surface tearing control request">
+ 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.
+ </description>
+
+ <enum name="presentation_hint">
+ <description summary="presentation hint values">
+ 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.
+ </description>
+ <entry name="vsync" value="0"
+ summary="tearing-free presentation"/>
+ <entry name="vsync_relaxed" value="1"
+ summary="async pageflips on missed presentation deadline"/>
+ <entry name="async" value="2"
+ summary="async pageflips for all frames"/>
+ </enum>
+
+ <request name="set_presentation_hint">
+ <description summary="set presentation hint">
+ 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.
+ </description>
+ <arg name="hint" type="uint" enum="presentation_hint"/>
+ </request>
+
+ <request name="destroy" type="destructor">
+ <description summary="destroy synchronization object">
+ Destroy this surface tearing object and remove the presentation hint.
+ The change will be applied on the next wl_surface.commit.
+ </description>
+ </request>
+ </interface>
+
+</protocol>
+
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 <joshua@froggi.es>
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 @@
<?xml version="1.0" encoding="UTF-8"?>
-<protocol name="zwp_tearing_control_unstable_v1">
+<protocol name="gamescope_tearing_control_unstable_v1">
<copyright>
Copyright © 2021 Xaver Hugl
@@ -24,7 +24,7 @@
DEALINGS IN THE SOFTWARE.
</copyright>
- <interface name="zwp_tearing_control_v1" version="1">
+ <interface name="gamescope_tearing_control_v1" version="1">
<description summary="protocol for tearing control">
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 @@
<request name="destroy" type="destructor">
<description summary="destroy tearing control factory object">
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.
</description>
</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.
</description>
<arg name="id" type="new_id"
- interface="zwp_surface_tearing_control_v1"
+ interface="gamescope_surface_tearing_control_v1"
summary="the new surface tearing interface id"/>
<arg name="surface" type="object" interface="wl_surface"
summary="the surface"/>
</request>
</interface>
- <interface name="zwp_surface_tearing_control_v1" version="1">
+ <interface name="gamescope_surface_tearing_control_v1" version="1">
<description summary="per-surface tearing control request">
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 <me@kylegospodneti.ch>
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

View File

@ -0,0 +1,28 @@
From 317712eb5a1aa4a1c3d737a8fcaee57add9981c9 Mon Sep 17 00:00:00 2001
From: Joshua Ashton <joshua@froggi.es>
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 <joshua@froggi.es>
---
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

View File

@ -0,0 +1,3 @@
# xorg-x11-server-Xwayland
The xorg-x11-server-Xwayland package

View File

@ -1,729 +0,0 @@
From 0151613de184f0ac8bc2c685f37492919602e15f Mon Sep 17 00:00:00 2001
From: Kyle Gospodnetich <me@kylegospodneti.ch>
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 <joshua@froggi.es>
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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<protocol name="zwp_tearing_control_unstable_v1">
+
+ <copyright>
+ 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.
+ </copyright>
+
+ <interface name="zwp_tearing_control_v1" version="1">
+ <description summary="protocol for tearing control">
+ 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.
+ </description>
+
+ <request name="destroy" type="destructor">
+ <description summary="destroy tearing control factory object">
+ 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.
+ </description>
+ </request>
+
+ <enum name="error">
+ <entry name="tearing_control_exists" value="0"
+ summary="the surface already has a tearing object associated"/>
+ </enum>
+
+ <request name="get_tearing_control">
+ <description summary="extend surface interface for tearing control">
+ 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.
+ </description>
+
+ <arg name="id" type="new_id"
+ interface="zwp_surface_tearing_control_v1"
+ summary="the new surface tearing interface id"/>
+ <arg name="surface" type="object" interface="wl_surface"
+ summary="the surface"/>
+ </request>
+ </interface>
+
+ <interface name="zwp_surface_tearing_control_v1" version="1">
+ <description summary="per-surface tearing control request">
+ 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.
+ </description>
+
+ <enum name="presentation_hint">
+ <description summary="presentation hint values">
+ 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.
+ </description>
+ <entry name="vsync" value="0"
+ summary="tearing-free presentation"/>
+ <entry name="vsync_relaxed" value="1"
+ summary="async pageflips on missed presentation deadline"/>
+ <entry name="async" value="2"
+ summary="async pageflips for all frames"/>
+ </enum>
+
+ <request name="set_presentation_hint">
+ <description summary="set presentation hint">
+ 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.
+ </description>
+ <arg name="hint" type="uint" enum="presentation_hint"/>
+ </request>
+
+ <request name="destroy" type="destructor">
+ <description summary="destroy synchronization object">
+ Destroy this surface tearing object and remove the presentation hint.
+ The change will be applied on the next wl_surface.commit.
+ </description>
+ </request>
+ </interface>
+
+</protocol>
+
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 <joshua@froggi.es>
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 @@
<?xml version="1.0" encoding="UTF-8"?>
-<protocol name="zwp_tearing_control_unstable_v1">
+<protocol name="gamescope_tearing_control_unstable_v1">
<copyright>
Copyright © 2021 Xaver Hugl
@@ -24,7 +24,7 @@
DEALINGS IN THE SOFTWARE.
</copyright>
- <interface name="zwp_tearing_control_v1" version="1">
+ <interface name="gamescope_tearing_control_v1" version="1">
<description summary="protocol for tearing control">
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 @@
<request name="destroy" type="destructor">
<description summary="destroy tearing control factory object">
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.
</description>
</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.
</description>
<arg name="id" type="new_id"
- interface="zwp_surface_tearing_control_v1"
+ interface="gamescope_surface_tearing_control_v1"
summary="the new surface tearing interface id"/>
<arg name="surface" type="object" interface="wl_surface"
summary="the surface"/>
</request>
</interface>
- <interface name="zwp_surface_tearing_control_v1" version="1">
+ <interface name="gamescope_surface_tearing_control_v1" version="1">
<description summary="per-surface tearing control request">
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 <me@kylegospodneti.ch>
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

View File

@ -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 <ofourdan@redhat.com> - 23.2.2-1
- xwayland 23.2.2 - (#2246029)
* Wed Oct 25 2023 Peter Hutterer <peter.hutterer@redhat.com> - 23.2.1-2
- Fix for CVE-2023-5367
* Wed Sep 20 2023 Olivier Fourdan <ofourdan@redhat.com> - 23.2.1-1
- xwayland 23.2.1 - (#2239813)
* Mon Sep 11 2023 Olivier Fourdan <ofourdan@redhat.com> - 23.2.0-2
- migrated to SPDX license
* Wed Aug 16 2023 Olivier Fourdan <ofourdan@redhat.com> - 23.2.0-1
- xwayland 23.2.0
* Wed Aug 2 2023 Olivier Fourdan <ofourdan@redhat.com> - 23.1.99.902-1
- xwayland 23.1.99.902 (xwayland 23.2.0 rc2)
* Mon Jul 31 2023 Olivier Fourdan <ofourdan@redhat.com> - 23.1.99.901-2
- Fix devel package requires.
* Wed Jul 19 2023 Olivier Fourdan <ofourdan@redhat.com> - 23.1.99.901-1
- xwayland 23.1.99.901 (xwayland 23.2.0 rc1)
* Tue Jun 6 2023 Olivier Fourdan <ofourdan@redhat.com> - 23.1.2-1
- xwayland 23.1.2
* Thu Apr 27 2023 Olivier Fourdan <ofourdan@redhat.com> - 23.1.1-2
- Fix spec file to build from git upstream - (#2190211)
* Wed Mar 29 2023 Olivier Fourdan <ofourdan@redhat.com> - 23.1.1-1
- xwayland 23.1.1 - (#2182734)
CVE fix for: CVE-2023-1393
* Wed Mar 22 2023 Olivier Fourdan <ofourdan@redhat.com> - 23.1.0-1
- xwayland 23.1.0 - (#2180913)
* Thu Mar 9 2023 Olivier Fourdan <ofourdan@redhat.com> - 23.0.99.902-1
- xwayland 23.0.99.902 (xwayland 23.1.0 rc2) - (#2172415, #2173201)
* Wed Feb 22 2023 Olivier Fourdan <ofourdan@redhat.com> - 23.0.99.901-1
- xwayland 23.0.99.901 (xwayland 23.1.0 rc1) - (#2172415)
* Tue Feb 7 2023 Olivier Fourdan <ofourdan@redhat.com> - 22.1.8-1
- xwayland 22.1.8
Fixes CVE-2023-0494 (#2165995, #2167566, #2167734)
* Sun Jan 29 2023 Stefan Bluhm <stefan.bluhm@clacee.eu> - 22.1.7-4
- Updated conditional Fedora statement.
* Thu Jan 19 2023 Olivier Fourdan <ofourdan@redhat.com> - 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 <ofourdan@redhat.com> - 22.1.7-2
- Disallow byte-swapped clients on Fedora 38 and above (#2159489)
* Mon Dec 19 2022 Olivier Fourdan <ofourdan@redhat.com> - 22.1.7-1
- xwayland 22.1.7
* Wed Dec 14 2022 Peter Hutterer <peter.hutterer@redhat.com> - 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 <ofourdan@redhat.com> - 22.1.5-1
- xwayland 22.1.5 (#2139387)
* Thu Oct 20 2022 Olivier Fourdan <ofourdan@redhat.com> - 22.1.4-1
- xwayland 22.1.4 (#2136518)
* Sat Jul 23 2022 Fedora Release Engineering <releng@fedoraproject.org> - 22.1.3-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
* Tue Jul 12 2022 Olivier Fourdan <ofourdan@redhat.com> - 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 <ofourdan@redhat.com> - 22.1.2-1
- xwayland 22.1.2 - (#2090172)
* Thu Mar 31 2022 Olivier Fourdan <ofourdan@redhat.com> - 22.1.1-1
- xwayland 22.1.1 - (#2070435)
* Wed Feb 16 2022 Olivier Fourdan <ofourdan@redhat.com> - 22.1.0
- xwayland 22.1.0 - (#2055270)
* Wed Feb 2 2022 Olivier Fourdan <ofourdan@redhat.com> - 22.0.99.902
- xwayland 22.0.99.902 (xwayland 22.1.0 rc2) - (#2042521)
* Tue Jan 25 2022 Olivier Fourdan <ofourdan@redhat.com> - 22.0.99.901
- xwayland 22.0.99.901 (xwayland 22.1.0 rc1) - (#2042521)
* Sat Jan 22 2022 Fedora Release Engineering <releng@fedoraproject.org> - 21.1.4-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
* Tue Dec 14 2021 Olivier Fourdan <ofourdan@redhat.com> - 21.1.4
- xwayland 21.1.4
* Mon Nov 8 2021 Olivier Fourdan <ofourdan@redhat.com> - 21.1.3
- xwayland 21.1.3 - (#2016468)
* Thu Oct 21 2021 Olivier Fourdan <ofourdan@redhat.com> - 21.1.2.901-1
- xwayland 21.1.2.901 (aka 21.1.3 RC1) - (#2015413)
* Tue Sep 14 2021 Sahana Prasad <sahana@redhat.com> - 21.1.2-3
- Rebuilt with OpenSSL 3.0.0
* Fri Jul 23 2021 Fedora Release Engineering <releng@fedoraproject.org> - 21.1.2-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
* Fri Jul 9 2021 Olivier Fourdan <ofourdan@redhat.com> - 21.1.2-1
- xwayland 21.1.2
* Thu Jul 1 2021 Olivier Fourdan <ofourdan@redhat.com> - 21.1.1.901-1
- xwayland 21.1.1.901
* Mon Jun 21 2021 Olivier Fourdan <ofourdan@redhat.com> - 21.1.1-3
- Fix a use-after-free in the previous changes for GLX
* Thu Jun 10 2021 Olivier Fourdan <ofourdan@redhat.com> - 21.1.1-2
- Backport fixes for GLX and EGLstream (#1948003)
* Wed Apr 14 2021 Olivier Fourdan <ofourdan@redhat.com> - 21.1.1-1
- xwayland 21.1.1 (CVE-2021-3472 / ZDI-CAN-1259)
* Thu Mar 18 2021 Olivier Fourdan <ofourdan@redhat.com> - 21.1.0-1
- xwayland 21.1.0
* Thu Mar 4 2021 Olivier Fourdan <ofourdan@redhat.com> - 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 <ofourdan@redhat.com> - 21.0.99.901-1
- xwayland 21.0.99.901
* Mon Feb 1 2021 Olivier Fourdan <ofourdan@redhat.com> - 1.20.99.1-0.1.20210201git5429791
- Initial import (#1912335).

View File

@ -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 <ofourdan@redhat.com> - 23.2.6-1
- xwayland 23.2.6 - (#2273002)
* Wed Apr 03 2024 José Expósito <jexposit@redhat.com> - 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 <fweimer@redhat.com> - 23.2.4-3
- Fix C compatibility issue on i686
* Sat Jan 27 2024 Fedora Release Engineering <releng@fedoraproject.org> - 23.2.4-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Tue Jan 16 2024 Olivier Fourdan <ofourdan@redhat.com> - 23.2.4-1
- xwayland 23.2.4 - (#2254280)
CVE fix for: CVE-2023-6816, CVE-2024-0229, CVE-2024-21885, CVE-2024-21886,

View File

@ -0,0 +1,35 @@
From fdc71a08f059d2466e39968652c3df71cc582b3e Mon Sep 17 00:00:00 2001
From: GloriousEggroll <gloriouseggroll@gmail.com>
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

View File

@ -0,0 +1 @@
ACTION=="add", SUBSYSTEM=="bluetooth", RUN+="/usr/bin/cec-control onboot"