From 0034d492d84122ff7dc8703c861c7909b2a6cd5f Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Mon, 2 Aug 2021 18:13:55 +0200 Subject: [PATCH] wlserver: create wl_output before starting Xwayland Apparently there's a race that makes Steam unhappy and fail with: libGL error: failed to create drawable Closes: https://github.com/Plagman/gamescope/issues/228 --- src/wlserver.cpp | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/wlserver.cpp b/src/wlserver.cpp index a2f808c..4769a40 100644 --- a/src/wlserver.cpp +++ b/src/wlserver.cpp @@ -602,13 +602,6 @@ int wlserver_init(int argc, char **argv, bool bIsNested) { wl_signal_add( &wlserver.wlr.compositor->events.new_surface, &new_surface_listener ); create_gamescope_xwayland(); - - struct wlr_xwayland_server_options xwayland_options = { - .lazy = false, - .enable_wm = false, - }; - wlserver.wlr.xwayland_server = wlr_xwayland_server_create(wlserver.display, &xwayland_options); - wl_signal_add(&wlserver.wlr.xwayland_server->events.ready, &xwayland_ready_listener); int result = -1; int display_slot = 0; @@ -640,6 +633,19 @@ int wlserver_init(int argc, char **argv, bool bIsNested) { return 1; } + wlr_output_enable( wlserver.wlr.output, true ); + wlr_output_set_custom_mode( wlserver.wlr.output, g_nNestedWidth, g_nNestedHeight, g_nOutputRefresh * 1000 ); + wlr_output_commit( wlserver.wlr.output ); + + wlr_output_create_global( wlserver.wlr.output ); + + struct wlr_xwayland_server_options xwayland_options = { + .lazy = false, + .enable_wm = false, + }; + wlserver.wlr.xwayland_server = wlr_xwayland_server_create(wlserver.display, &xwayland_options); + wl_signal_add(&wlserver.wlr.xwayland_server->events.ready, &xwayland_ready_listener); + while (!bXwaylandReady) { wl_display_flush_clients(wlserver.display); if (wl_event_loop_dispatch(wlserver.event_loop, -1) < 0) { @@ -655,12 +661,6 @@ int wlserver_init(int argc, char **argv, bool bIsNested) { return 1; } - wlr_output_enable( wlserver.wlr.output, true ); - wlr_output_set_custom_mode( wlserver.wlr.output, g_nNestedWidth, g_nNestedHeight, g_nOutputRefresh * 1000 ); - wlr_output_commit( wlserver.wlr.output ); - - wlr_output_create_global( wlserver.wlr.output ); - return 0; }