No window border/decorations on Ubuntu 24.04 GNOME (RX 9070 XT) #196

Closed
opened 2026-09-30 03:56:01 +00:00 by sky_line · 2 comments
Owner

Report

A user on Ubuntu 24.04 with GNOME and an AMD Radeon RX 9070 XT sees the viewer window with no window border / title bar (no decorations).

Likely area

  • GNOME (Mutter) does not draw server-side decorations for Wayland-native clients; the client must draw its own (libdecor). If SDL3 picks the Wayland video driver and libdecor isn't available (or isn't found in our packaged lib/), the window has no decorations at all.
  • Under X11/XWayland, Mutter draws decorations, so this is most likely the native Wayland path.

To collect

  • echo $XDG_SESSION_TYPE (wayland vs x11)
  • Slipstream.log lines about the SDL video driver
  • Whether libdecor-0-0 (and its plugins such as libdecor-0-plugin-1-gtk) is installed
  • Whether SDL_VIDEO_DRIVER=x11 ./slipstream restores the border (workaround + confirms the diagnosis)

Possible fixes

  • Make sure SDL3 is built with libdecor support and that it is loaded at runtime, or ship a fallback.
  • Log the chosen SDL video driver and whether decorations are available.
  • If decorations are unavailable on Wayland, fall back to X11 or add a setting to prefer it.
## Report A user on **Ubuntu 24.04 with GNOME** and an **AMD Radeon RX 9070 XT** sees the viewer window with **no window border / title bar** (no decorations). ## Likely area - GNOME (Mutter) does not draw server-side decorations for Wayland-native clients; the client must draw its own (libdecor). If SDL3 picks the Wayland video driver and libdecor isn't available (or isn't found in our packaged `lib/`), the window has no decorations at all. - Under X11/XWayland, Mutter draws decorations, so this is most likely the native Wayland path. ## To collect - `echo $XDG_SESSION_TYPE` (wayland vs x11) - Slipstream.log lines about the SDL video driver - Whether `libdecor-0-0` (and its plugins such as `libdecor-0-plugin-1-gtk`) is installed - Whether `SDL_VIDEO_DRIVER=x11 ./slipstream` restores the border (workaround + confirms the diagnosis) ## Possible fixes - Make sure SDL3 is built with libdecor support and that it is loaded at runtime, or ship a fallback. - Log the chosen SDL video driver and whether decorations are available. - If decorations are unavailable on Wayland, fall back to X11 or add a setting to prefer it.
Author
Owner

Root cause (from the reporter's Slipstream.log)

  • The log shows SDL video driver: wayland. Since 6639761b61 ("High-DPI window and native Wayland") llsdl.cpp:114 sets SDL_HINT_VIDEO_DRIVER="wayland,x11", forcing native Wayland. By default SDL 3.2 would put this GNOME 46 session on X11 (XWayland), where Mutter draws the frame, which is why Alchemy looks normal.
  • GNOME/Mutter does not implement xdg-decoration (server-side decorations). On Wayland under GNOME, the client has to draw its own frame, and SDL3 does that by dlopen'ing libdecor-0.so.0 plus a libdecor plugin (cairo or gtk).
  • We don't ship libdecor. If the user's system doesn't have libdecor-0-0 and a plugin installed, SDL silently creates a bare xdg_toplevel with no decorations.
  • This probably also plays into the reporter's frame pacing: under GNOME 46 there's no fifo-v1 protocol, and Wayland FIFO presentation stalls on frame callbacks while the window is occluded.

Workaround: launch with SDL_VIDEO_DRIVER=x11 ./slipstream.

Fix options

  1. Ship libdecor-0.so.0 and libdecor-0-cairo.so in lib/, with the launcher pointing LIBDECOR_PLUGIN_DIR at them. This keeps native Wayland (fractional scaling) with a drawn frame. It relies on cairo/pango being on the host, which any GNOME desktop has.
  2. Only prefer Wayland when it'll look right: KDE/wlroots have server-side decorations, or libdecor plus a plugin loads. Otherwise, e.g. on GNOME without libdecor, fall back to SDL's default order (x11 first).
  3. Add a setting or launcher flag to choose the video driver.

The recommendation is 1 + 2 together (2 as the safety net).

## Root cause (from the reporter's Slipstream.log) - The log shows `SDL video driver: wayland`. Since 6639761b61 ("High-DPI window and native Wayland") `llsdl.cpp:114` sets `SDL_HINT_VIDEO_DRIVER="wayland,x11"`, forcing native Wayland. By default SDL 3.2 would put this GNOME 46 session on X11 (XWayland), where Mutter draws the frame, which is why Alchemy looks normal. - GNOME/Mutter does not implement `xdg-decoration` (server-side decorations). On Wayland under GNOME, the client has to draw its own frame, and SDL3 does that by dlopen'ing **libdecor-0.so.0** plus a libdecor plugin (cairo or gtk). - We don't ship libdecor. If the user's system doesn't have `libdecor-0-0` and a plugin installed, SDL silently creates a bare `xdg_toplevel` with no decorations. - This probably also plays into the reporter's frame pacing: under GNOME 46 there's no `fifo-v1` protocol, and Wayland FIFO presentation stalls on frame callbacks while the window is occluded. **Workaround:** launch with `SDL_VIDEO_DRIVER=x11 ./slipstream`. ## Fix options 1. Ship `libdecor-0.so.0` and `libdecor-0-cairo.so` in `lib/`, with the launcher pointing `LIBDECOR_PLUGIN_DIR` at them. This keeps native Wayland (fractional scaling) with a drawn frame. It relies on cairo/pango being on the host, which any GNOME desktop has. 2. Only prefer Wayland when it'll look right: KDE/wlroots have server-side decorations, or libdecor plus a plugin loads. Otherwise, e.g. on GNOME without libdecor, fall back to SDL's default order (x11 first). 3. Add a setting or launcher flag to choose the video driver. The recommendation is 1 + 2 together (2 as the safety net).
sky_line added this to the Slipstream project 2026-10-06 15:04:15 +00:00
Author
Owner

Ticket audit 2026-10-07: done and shipped in 1.0.0 Beta 6. Bundled libdecor + cairo plugin, Wayland only when framed, launcher options (fddf09d435, c4da5dcc65, 77b7a1478e). If you still see the problem on the current beta, please reopen or file a new report.

Ticket audit 2026-10-07: done and shipped in **1.0.0 Beta 6**. Bundled libdecor + cairo plugin, Wayland only when framed, launcher options (fddf09d435, c4da5dcc65, 77b7a1478e). If you still see the problem on the current beta, please reopen or file a new report.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
sky_line/Slipstream#196
No description provided.