Commit 8c8b0b4c authored by Joshua Ashton's avatar Joshua Ashton 🐸
Browse files

xwayland: Add -force-xrandr-emulation switch

Adds a -force-xrandr-emulation cmdline switch that always exposes extra
modes when viewporter isn't exposed by the Wayland compositor.

Having the additional modes exposed by the X server is important for
games to function and be configured

Compositors, such as Gamescope (the compositor for Steam Deck),
support only a single window that is rendered in the centre of the
screen that is scaled up to fill the screen by the compositor based
on some user scaling settings.

Exposing viewporter, wouldn't make sense here, and could mislead native
Wayland clients, so exposing dummy modesets in X is preferred here.
Signed-off-by: Joshua Ashton's avatarJoshua Ashton <>
Reviewed-by: Olivier Fourdan's avatarOlivier Fourdan <>
parent 7b7170ec
Pipeline #584317 passed with stages
in 1 minute and 53 seconds
......@@ -71,6 +71,10 @@ Disable touch pointer emulation. This allows the Wayland compositor to
implement its own pointer emulation mechanism for X11 clients that don't
support touch input.
.TP 8
.B \-force-xrandr-emulation
Force additional non-native modes to be exposed when viewporter is not
supported by the Wayland compositor.
.TP 8
.B \-rootless
Run \fIXwayland\fP rootless, so that X clients integrate seamlessly with
Wayland clients in a Wayland desktop. That requires the Wayland server
......@@ -350,7 +350,7 @@ output_get_rr_modes(struct xwl_output *xwl_output,
*count = 1;
if (!xwl_screen_has_resolution_change_emulation(xwl_screen))
if (!xwl_screen_has_resolution_change_emulation(xwl_screen) && !xwl_screen->force_xrandr_emulation)
return rr_modes;
/* Add fake modes */
......@@ -643,6 +643,9 @@ xwl_screen_init(ScreenPtr pScreen, int argc, char **argv)
ErrorF("xwayland glamor: this build does not have EGLStream support\n");
else if (strcmp(argv[i], "-force-xrandr-emulation") == 0) {
xwl_screen->force_xrandr_emulation = 1;
......@@ -56,6 +56,7 @@ struct xwl_screen {
int rootless;
int glamor;
int present;
int force_xrandr_emulation;
CreateScreenResourcesProcPtr CreateScreenResources;
CloseScreenProcPtr CloseScreen;
......@@ -102,6 +102,7 @@ ddxUseMsg(void)
ErrorF("-verbose [n] verbose startup messages\n");
ErrorF("-version show the server version and exit\n");
ErrorF("-noTouchPointerEmulation disable touch pointer emulation\n");
ErrorF("-force-xrandr-emulation force non-native modes to be exposed when viewporter is not exposed by the compositor\n");
static int init_fd = -1;
......@@ -12,3 +12,4 @@ have_listenfd=true
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment