Skip to content

Add Wayland + Vulkan WSI support#64

Closed
ellierocks wants to merge 1 commit into
project-slippi:slippifrom
ellierocks:wayland-wsi-support
Closed

Add Wayland + Vulkan WSI support#64
ellierocks wants to merge 1 commit into
project-slippi:slippifrom
ellierocks:wayland-wsi-support

Conversation

@ellierocks

Copy link
Copy Markdown

Enables native Wayland rendering via Qt Wayland platform plugin and Vulkan KHR_wayland_surface. Previously Dolphin forced XCB even when QT_QPA_PLATFORM=wayland was set and had no Wayland surface creation path in the Vulkan backend.

  • CMake: ENABLE_WAYLAND option, pkg_check_modules for wayland-client
  • Vulkan: VK_USE_PLATFORM_WAYLAND_KHR, instance extension, vkCreateWaylandSurfaceKHR entry point, surface creation, UINT32_MAX currentExtent handling for compositor-driven sizing
  • Qt: removed forced xcb override, isExposed()-gated initial sizing for async Wayland configure, screen-size fallback
  • Presenter: SetSurfaceDimensions bridge for compositor-triggered window resize propagation to the swap chain
  • RenderWidget: removed stale SizeChanged emit in showFullScreen (fires before compositor configure on Wayland)

This provides a future proof path for presentation on Linux without disabling x11 or xwayland support. This means real support for tearing/VRR with VK_PRESENT_MODE_IMMEDIATE_KHR via tearing_control_v1 protocol as well. From my testing on Fedora Rawhide melee runs great on both Plasma and Sway and there doesn't seem to be any issues with the Qt UI.

Enables native Wayland rendering via Qt Wayland platform plugin and
Vulkan KHR_wayland_surface. Previously Dolphin forced XCB even
when QT_QPA_PLATFORM=wayland was set and had no Wayland surface
creation path in the Vulkan backend.

- CMake: ENABLE_WAYLAND option, pkg_check_modules for wayland-client
- Vulkan: VK_USE_PLATFORM_WAYLAND_KHR, instance extension,
  vkCreateWaylandSurfaceKHR entry point, surface creation,
  UINT32_MAX currentExtent handling for compositor-driven sizing
- Qt: removed forced xcb override, isExposed()-gated initial sizing
  for async Wayland configure, screen-size fallback
- Presenter: SetSurfaceDimensions bridge for compositor-triggered
  window resize propagation to the swap chain
- RenderWidget: removed stale SizeChanged emit in showFullScreen
  (fires before compositor configure on Wayland)
@ellierocks

Copy link
Copy Markdown
Author

dolphin-emu#14652

@ellierocks ellierocks closed this Jun 10, 2026
@ellierocks ellierocks deleted the wayland-wsi-support branch June 10, 2026 19:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant