[PR #397] [CLOSED] Fix Wayland startup race and AMD DMA-BUF negotiation #442

Closed
opened 2026-10-15 13:00:35 +00:00 by bsakaguchi · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/games-on-whales/wolf/pull/397
Author: @JBailes
Created: 4/23/2026
Status: ❌ Closed

Base: stable ← Head: fix/wolf-ui-runtime-dir-amd-startup


📝 Commits (10+)

  • a05c54d Fix Wolf UI startup in nested AMD setups
  • 7e664d2 Fix CI for fork-based pull requests
  • ca850d3 Fix AMD DMA-BUF negotiation for Wayland producer
  • 3695411 Fix fork clang-format CI and DMA-BUF build
  • 1dbef78 Fix clang-format diff in session helpers
  • 6460443 Fix fork test CI and Wayland wait in tests
  • d1ae9ba Address review on Wayland socket isolation
  • b3a32ba Fix API tests to use runtime dir socket
  • 0a040d3 Make Wayland socket wait timeout configurable
  • a529c2d Merge remote-tracking branch 'origin/stable' into pr-397

📊 Changes

16 files changed (+165 additions, -49 deletions)

View changed files

📝 .github/workflows/build-docs.yml (+1 -2)
📝 .github/workflows/linux-build-test.yml (+2 -2)
📝 cmake/BoostLoader.cmake (+2 -1)
📝 docker/wolf.Dockerfile (+1 -1)
📝 src/core/src/core/gstreamer.hpp (+10 -5)
📝 src/core/src/platforms/all/docker/docker/docker.cpp (+4 -3)
📝 src/core/src/platforms/all/docker/docker/json_formatters.hpp (+1 -1)
📝 src/core/src/platforms/all/helpers/CMakeLists.txt (+0 -8)
📝 src/moonlight-protocol/crypto/src/sign.hpp (+1 -0)
📝 src/moonlight-server/sessions/common.hpp (+65 -0)
📝 src/moonlight-server/sessions/lobbies.cpp (+8 -0)
📝 src/moonlight-server/sessions/moonlight.cpp (+10 -1)
📝 src/moonlight-server/state/configTOML.cpp (+12 -5)
📝 tests/CMakeLists.txt (+3 -1)
📝 tests/main.cpp (+1 -1)
📝 tests/testWolfAPI.cpp (+44 -18)

📄 Description

Summary

  • mount the full XDG runtime dir into runner containers instead of bind-mounting individual Wayland/Pulse sockets
  • wait for the compositor socket to exist before starting stream runners
  • fix AMD zero-copy DMA-BUF negotiation by intersecting waylanddisplaysrc source caps with vapostproc sink caps before enabling the pipeline
  • skip fork-PR auto-push behavior in the clang-format workflow so CI validates formatting without failing on detached HEAD

Why

Wolf UI startup on Proxmox LXC exposed two separate issues:

  • the runner could start before the compositor socket existed, which caused the app container to fail with Can't connect to a Wayland display
  • the AMD zero-copy path could advertise DMA-BUF formats that waylanddisplaysrc could not actually provide to vapostproc, which caused the producer pipeline to fail negotiation during stream startup

Mounting the full runtime dir and waiting for the Wayland socket removes the startup race. Intersecting the producer and consumer DMA-BUF caps fixes the real zero-copy negotiation bug instead of forcing Wolf UI onto legacy video/x-raw caps.

Validation

  • reproduced the failure against Wolf UI on Proxmox LXC + RX 7900 XTX
  • verified that the runtime-dir/socket changes address the Wayland display startup failure
  • verified that the DMA-BUF caps intersection keeps zero-copy enabled only when waylanddisplaysrc and vapostproc share compatible formats
  • ran git diff --check

🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/games-on-whales/wolf/pull/397 **Author:** [@JBailes](https://github.com/JBailes) **Created:** 4/23/2026 **Status:** ❌ Closed **Base:** `stable` ← **Head:** `fix/wolf-ui-runtime-dir-amd-startup` --- ### 📝 Commits (10+) - [`a05c54d`](https://github.com/games-on-whales/wolf/commit/a05c54d3ac9195ac4b2689573cc07653589d6014) Fix Wolf UI startup in nested AMD setups - [`7e664d2`](https://github.com/games-on-whales/wolf/commit/7e664d2b6b0c01a0f2a9e8f09a3d606cc45e6059) Fix CI for fork-based pull requests - [`ca850d3`](https://github.com/games-on-whales/wolf/commit/ca850d3575dfedaeda4e02bf612d2df13111ac15) Fix AMD DMA-BUF negotiation for Wayland producer - [`3695411`](https://github.com/games-on-whales/wolf/commit/3695411be032beda9672495e98922ac7c7fe6091) Fix fork clang-format CI and DMA-BUF build - [`1dbef78`](https://github.com/games-on-whales/wolf/commit/1dbef781bfca93b1e7b7df9b09abc6f9a2b67bf2) Fix clang-format diff in session helpers - [`6460443`](https://github.com/games-on-whales/wolf/commit/6460443129cccf331264d94df7f1176c83ecc18f) Fix fork test CI and Wayland wait in tests - [`d1ae9ba`](https://github.com/games-on-whales/wolf/commit/d1ae9bac46cb980baa109470ef73c859479dfc78) Address review on Wayland socket isolation - [`b3a32ba`](https://github.com/games-on-whales/wolf/commit/b3a32ba7ea5fefde1d92b8f172299fd9819204cf) Fix API tests to use runtime dir socket - [`0a040d3`](https://github.com/games-on-whales/wolf/commit/0a040d31ca36b6ceb00bb8bce0dbd9625f58c02b) Make Wayland socket wait timeout configurable - [`a529c2d`](https://github.com/games-on-whales/wolf/commit/a529c2d767df46fb487e7d8459c67bb3255ccc86) Merge remote-tracking branch 'origin/stable' into pr-397 ### 📊 Changes **16 files changed** (+165 additions, -49 deletions) <details> <summary>View changed files</summary> 📝 `.github/workflows/build-docs.yml` (+1 -2) 📝 `.github/workflows/linux-build-test.yml` (+2 -2) 📝 `cmake/BoostLoader.cmake` (+2 -1) 📝 `docker/wolf.Dockerfile` (+1 -1) 📝 `src/core/src/core/gstreamer.hpp` (+10 -5) 📝 `src/core/src/platforms/all/docker/docker/docker.cpp` (+4 -3) 📝 `src/core/src/platforms/all/docker/docker/json_formatters.hpp` (+1 -1) 📝 `src/core/src/platforms/all/helpers/CMakeLists.txt` (+0 -8) 📝 `src/moonlight-protocol/crypto/src/sign.hpp` (+1 -0) 📝 `src/moonlight-server/sessions/common.hpp` (+65 -0) 📝 `src/moonlight-server/sessions/lobbies.cpp` (+8 -0) 📝 `src/moonlight-server/sessions/moonlight.cpp` (+10 -1) 📝 `src/moonlight-server/state/configTOML.cpp` (+12 -5) 📝 `tests/CMakeLists.txt` (+3 -1) 📝 `tests/main.cpp` (+1 -1) 📝 `tests/testWolfAPI.cpp` (+44 -18) </details> ### 📄 Description ## Summary - mount the full XDG runtime dir into runner containers instead of bind-mounting individual Wayland/Pulse sockets - wait for the compositor socket to exist before starting stream runners - fix AMD zero-copy DMA-BUF negotiation by intersecting `waylanddisplaysrc` source caps with `vapostproc` sink caps before enabling the pipeline - skip fork-PR auto-push behavior in the `clang-format` workflow so CI validates formatting without failing on detached HEAD ## Why Wolf UI startup on Proxmox LXC exposed two separate issues: - the runner could start before the compositor socket existed, which caused the app container to fail with `Can't connect to a Wayland display` - the AMD zero-copy path could advertise DMA-BUF formats that `waylanddisplaysrc` could not actually provide to `vapostproc`, which caused the producer pipeline to fail negotiation during stream startup Mounting the full runtime dir and waiting for the Wayland socket removes the startup race. Intersecting the producer and consumer DMA-BUF caps fixes the real zero-copy negotiation bug instead of forcing Wolf UI onto legacy `video/x-raw` caps. ## Validation - reproduced the failure against Wolf UI on Proxmox LXC + RX 7900 XTX - verified that the runtime-dir/socket changes address the Wayland display startup failure - verified that the DMA-BUF caps intersection keeps zero-copy enabled only when `waylanddisplaysrc` and `vapostproc` share compatible formats - ran `git diff --check` --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
bsakaguchi 2026-10-15 13:00:35 +00:00
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
games-on-whales/wolf#442
No description provided.