acdream/memory/project_linux_graphical.md

96 lines
4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Modern Runtime Linux graphical continuation
## Current checkpoint
Slice L0 completed at
`66f114b258c0c37b51a7c0e04ca0d6441f4b1699`.
Slice L1's implementation checkpoint landed at
`11501d52cad942850d88f83490710faf1d5cdf28`.
The same `AcDream.App` now builds and publishes for `linux-x64`; there is no
Linux gameplay or renderer fork.
Canonical seams:
- `AcDream.Runtime.Platform.ApplicationPathSet` owns XDG/Windows config, data,
cache, plugin, screenshot, and diagnostic paths for graphical and headless
hosts.
- `AcDream.App.Platform.GraphicalHostPlatformServices` owns one startup OS,
architecture, RID, native-dependency manifest, path set, and pacing factory.
- `PlatformFramePacingWaiterFactory` selects the existing Windows
high-resolution waitable timer or Linux
`LinuxMonotonicFramePacingWaiter`.
- Linux waiting uses absolute `CLOCK_MONOTONIC` +
`clock_nanosleep(TIMER_ABSTIME)`, retries `EINTR`, does not busy-spin, and
rejects use after disposal.
- Windows legacy `%LOCALAPPDATA%\acdream\settings.json` and
`keybinds.json` are copied only when the new roaming destination is absent.
- bundled plugins are read beside the binary; user plugins are read from the
portable data root. A successful bundled ID wins; a failed load does not
reserve the ID.
Exact L0 evidence:
- Windows: Runtime 415, Headless 67, UI 543, App 3,736 / 3 skips, complete
Release 8,799 / 5 skips.
- native Ubuntu/WSL: Runtime 415, Headless 67, UI 543, 14 L0 App tests.
- exact framework-dependent `linux-x64` publish contains executable, managed
closure, GLFW, OpenAL Soft, cimgui, shaders, and smoke plugin/manifest;
direct `ldd` has no unresolved dependency.
- closeout:
`docs/research/2026-07-27-slice-l0-platform-services.md`.
Rollback:
```text
git revert 66f114b258c0c37b51a7c0e04ca0d6441f4b1699
```
## L1 implementation checkpoint
Canonical seams:
- `ACDREAM_DISPLAY_PROTOCOL=auto|x11|wayland` selects one immutable backend
before `Window.Create`.
- `GraphicalWindowBackendSelection` configures Silk's exact GLFW backend and
makes the packaged GLFW 3.4 native library win over older system installs.
- `GraphicalCapabilityRecord` captures platform, RID, display protocol, GL
identity/extensions/limits, framebuffer, input/window, audio, and terminal
ownership into one atomic report.
- `GraphicalGlFunctionProbe` actively validates bindless texture,
draw-parameters plus MDI, SSBO, timer query, sRGB/depth/stencil FBO, and
persistent coherent buffer behavior before renderer construction.
- Unsupported contexts exit with code 4 and a precise report. No legacy
renderer or fabricated fallback is introduced.
- Studio screenshot shutdown is deferred until the completed render frame;
accepted and rejected startup paths both report zero terminal ownership.
Evidence:
- native Windows 11 + AMD Radeon RX 9070 XT: every active GL probe passes,
OpenAL submits playback and disposes, the packaged smoke frame is intact,
and terminal ownership is zero;
- WSLg X11 and Wayland: packaged GLFW 3.4 and protocol selection are correct,
but llvmpipe lacks mandatory `GL_ARB_bindless_texture`;
- WSLg with `GALLIUM_DRIVER=d3d12` reaches the AMD GPU and OpenGL 4.6, but
still lacks mandatory `GL_ARB_bindless_texture`; this is a WSLg/Mesa
capability limit, not an acdream package-resolution defect;
- App tests pass 3,763 / 3 skips; the complete Release suite passes
8,826 / 5 skips;
- checkpoint:
`docs/research/2026-07-27-slice-l1-graphical-capability-checkpoint.md`.
Rollback:
```text
git revert 11501d52cad942850d88f83490710faf1d5cdf28
```
## Deferred continuation
Do not claim native Linux graphical support from WSLg. Run the exact
`linux-x64` package on a physical Linux AMD RadeonSI or supported NVIDIA
driver under the available X11/Wayland sessions. It must pass the same
capability report, packaged smoke frame, input/window/audio checks, and
zero-debt shutdown. The user deferred this physical-driver gate and Slices
L2L6 on 2026-07-27. L2 has not started; resume at the physical L1 gate.