acdream/memory/project_linux_graphical.md

4 KiB
Raw Blame History

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:

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:

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.