ITADN

Wine-Wayland child viewport/subsurface reparenting freezes after SetParent; X11 works

#9860OpenPreXentagon 创建于 2026-06-07
P
PreXentagoncommented
## Issue type Native Wine-Wayland windowing/rendering issue in GE-Proton. This is filed as **Other** rather than a normal per-game compatibility report because the issue appears to be in the Wine-Wayland child-window / subsurface / embedded viewport path. Gaea 2 is the concrete reproducible application. I searched existing issues for `Gaea`, `Gaea.Viewport`, `winewayland`, `subsurface`, `SetParent`, and related terms, and did not find an existing matching issue. ## Proton version GE-Proton10-34 ## Affected title / reproducer * Application: QuadSpinner Gaea 2 * Version: Gaea 2.3.0.1 * Steam AppID / compatdata AppID: 3501090215 * Runtime: SteamLinuxRuntime_sniper ## System information * Distribution: Arch Linux * Session/compositor: Hyprland / Wayland * GPU: NVIDIA RTX 3070 Laptop GPU * NVIDIA driver: 610.43.02 * Kernel: 6.18.34-1-lts * Full Steam System Information / Steam Runtime Diagnostics gist: `<optional / can provide if needed>` ## Summary Under native Wine-Wayland, Gaea launches its embedded viewport process, `Gaea.Viewport.exe`. Gaea logs that viewport attachment completed, but immediately afterward the application freezes. The same clean prefix and same Gaea install work under X11/XWayland. Under X11/XWayland, the viewport attaches and the application remains responsive. Killing only `Gaea.Viewport.exe` while the native Wayland session is frozen immediately restores the main WPF shell responsiveness. After killing the viewport process, the previously missing shell/welcome content remains visible. This looks like a Wine-Wayland child-window / subsurface / docking issue rather than a font, codec, WPF resource, or general VKD3D problem. ## Launch options Failing native Wine-Wayland run: ```text PROTON_LOG=1 WAYLAND_DEBUG=1 WINEDEBUG=-all,+waylanddrv,+win,+event,+dwmapi PROTON_ENABLE_WAYLAND=1 __NV_PRIME_RENDER_OFFLOAD=1 __VK_LAYER_NV_optimus=NVIDIA_only __GLX_VENDOR_LIBRARY_NAME=nvidia %command% ``` Working X11/XWayland control run: ```text PROTON_LOG=1 WINEDEBUG=-all,+x11drv,+win,+event,+dwmapi __NV_PRIME_RENDER_OFFLOAD=1 __VK_LAYER_NV_optimus=NVIDIA_only __GLX_VENDOR_LIBRARY_NAME=nvidia %command% ``` The Wine graphics driver was switched between `wayland` and `x11` in the prefix registry for A/B testing. ## Symptoms Native Wine-Wayland: 1. Gaea opens the main shell and welcome window. 2. Some shell/welcome content is initially invisible, but hit-testing still works. 3. `Gaea.Viewport.exe` starts. 4. Gaea logs: `Viewport attachment completed`. 5. The previously missing shell content appears. 6. The application freezes. 7. Killing only `Gaea.Viewport.exe` restores shell responsiveness. X11/XWayland control: 1. Same clean prefix. 2. Same Gaea install. 3. Viewport attaches. 4. Application remains responsive. 5. Content renders. ## Reproduction 1. Use GE-Proton10-34. 2. Use a clean prefix. 3. Enable native Wine-Wayland with `PROTON_ENABLE_WAYLAND=1`. 4. Launch Gaea 2.3.0.1. 5. Wait for `Gaea.Viewport.exe` to start. 6. Observe Gaea log entry: `Viewport attachment completed`. 7. Observe that the application freezes. 8. Run: ```bash pkill -f 'Gaea.Viewport.exe' ``` 9. Observe that the main Gaea shell becomes responsive again. 10. Switch the same prefix to X11/XWayland and launch without `PROTON_ENABLE_WAYLAND=1`. 11. Observe that the viewport attaches and the application remains responsive under X11/XWayland. ## Debugging already performed The following did not fix the native Wine-Wayland freeze: * `PROTON_NO_NTSYNC=1 PROTON_NO_ESYNC=1 PROTON_NO_FSYNC=1` * `VKD3D_CONFIG=single_queue` * `VKD3D_SWAPCHAIN_PRESENT_MODE=IMMEDIATE` * `VKD3D_FRAME_RATE=30` * `VKD3D_DISABLE_EXTENSIONS=VK_KHR_present_id,VK_KHR_present_wait` * `WINEDLLOVERRIDES=openxr_loader,openvr_api=d` * disabling D3D12/D3D12Core * WPF/font/codecs related prefix experiments were reverted before the final A/B comparison. ## Relevant trace finding The attached Wine/Wayland trace suggests the embedded viewport uses a Wayland subsurface and then enters a problematic docking/reconfiguration path. Smallest relevant inline extract: ```text wl_subcompositor.get_subsurface(... wl_surface#46, wl_surface#3) wl_subsurface#50.set_desync() wl_subsurface#50.set_position(...) wl_subsurface#50.place_above(wl_surface#3) wl_surface#3.commit() ``` Later, around the freeze, the same viewport HWND (`0x200d6`) is repeatedly moved/reconfigured and `wayland_surface_reconfigure_client hwnd=0x200d6 subsurface=...` continues to appear. My current interpretation is: ```text Gaea.Viewport.exe creates/uses a Wayland subsurface for the embedded Unity viewport. When Gaea docks/reparents the viewport into the main shell, native Wine-Wayland appears to mishandle the child-window/subsurface relationship. The viewport process remains alive, but the shell freezes while waiting on the viewport. Killing only Gaea.Viewport.exe releases the shell. ``` ## Attachments Two archives: * [wayland-freeze-setparent-subsurface-logs.tar.gz](https://github.com/user-attachments/files/28674058/wayland-freeze-setparent-subsurface-logs.tar.gz) * [x11-control-viewport-attaches-responsive-logs.tar.gz](https://github.com/user-attachments/files/28674059/x11-control-viewport-attaches-responsive-logs.tar.gz) Each archive contains the Proton log, Gaea application log, captured process/window state, and extracted windowing/subsurface traces for that run. The Wayland archive contains the failing native Wine-Wayland run with `PROTON_LOG=1`, `WAYLAND_DEBUG=1`, and focused Wine windowing traces. The X11 archive contains the working X11/XWayland control run with `PROTON_LOG=1` and focused X11/windowing traces. I can provide the uncompressed/full logs separately if needed.
0 条评论