chore: Temporarily add old Xwayland patches

This commit is contained in:
Kyle Gospodnetich 2024-01-31 19:10:31 -08:00
parent accf950dd1
commit 71ecc9cc03
2 changed files with 1008 additions and 0 deletions

View File

@ -0,0 +1,729 @@
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

@ -0,0 +1,279 @@
%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).