acdream/docs/research/2026-07-27-slice-l1-graphical-capability-checkpoint.md

122 lines
5.3 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.

# Slice L1 graphical capability checkpoint
**Date:** 2026-07-27
**Production commit:** `11501d52cad942850d88f83490710faf1d5cdf28`
**Status:** implementation complete; further Linux graphical work deferred by
the user on 2026-07-27. The supported physical-Linux driver matrix remains the
first gate when Slice L resumes.
## Scope
This checkpoint establishes the Linux/Windows graphical startup oracle before
renderer construction. It does not add a renderer fallback and does not change
gameplay or visual behavior.
`GraphicalHostPlatformServices` now owns an immutable GLFW backend selection.
`ACDREAM_DISPLAY_PROTOCOL=auto|x11|wayland` is consumed once before
`Window.Create`. The platform owner configures the exact
`GlfwProvider.UninitializedGLFW` instance used by Silk's window backend.
Silk 2.23 asks for `libglfw.so.3.3`, while its packaged multi-backend GLFW 3.4
asset is `libglfw.so.3`. The default native search order previously selected
Ubuntu's machine-global GLFW 3.3 before reaching the packaged 3.4 library.
Startup now prioritizes the application directory inside Silk's path resolver,
so X11/Wayland selection and package provenance are deterministic.
Before any renderer object is created, the client records:
- OS, RID, requested and active display protocol, GLFW backend/version;
- GL vendor, renderer, version, GLSL, context flags/profile, limits, and every
extension;
- default framebuffer color/depth/stencil/MSAA/sRGB facts;
- window, monitor, refresh, framebuffer/logical size, and input-device facts;
- audio request/availability/playback/disposal state;
- window/GL/input/audio ownership and terminal shutdown state.
Advertisement is not treated as proof. A balanced active probe executes:
- bindless texture handle, resident, and non-resident calls;
- a shader using `gl_DrawIDARB`/`gl_BaseInstanceARB` plus MDI;
- SSBO allocation and binding;
- a timer query;
- an sRGB color plus depth/stencil framebuffer;
- persistent coherent mapping whenever buffer storage is advertised.
Unsupported hardware receives one actionable report and exit code 4. The
Studio smoke defers native close until after `RenderStack.EndFrame`, so both
successful and rejected startup release every owned context resource before
the final report is atomically rewritten.
## Positive supported gate
Windows 11 Pro build 26200, AMD Radeon RX 9070 XT, driver
`32.0.31021.5001`:
- GLFW `3.4.0 Win32 WGL`;
- OpenGL `4.3.0 Core Profile Context 26.6.4.260624`;
- 240 Hz monitor, 1280 x 720 logical/framebuffer smoke;
- bindless, shader draw parameters, MDI, SSBO, timer query, sRGB
depth/stencil, and persistent coherent storage all actively pass;
- OpenAL Soft default device opens, accepts the 50 ms smoke wave, and disposes;
- the 1280 x 720 retained-UI mockup screenshot is visually intact;
- process exits 0 with zero owned window, GL, input, and audio resources and
`ShutdownComplete=true`.
## Linux backend and negative-capability gates
Package: exact framework-dependent `linux-x64` publish of
`11501d52cad942850d88f83490710faf1d5cdf28`.
Host: Ubuntu 24.04.3 LTS under WSL2 kernel
`6.6.87.2-microsoft-standard-WSL2`, WSLg X11 and Wayland endpoints.
Both explicit backends create an OpenGL 4.5 core context, expose one keyboard
and one mouse, capture their framebuffer/monitor facts, and identify the
packaged multi-backend GLFW 3.4:
| Protocol | Monitor | Renderer | Result |
|---|---|---|---|
| X11 | `XWAYLAND0`, 60 Hz | Mesa llvmpipe 25.2.8 | exit 4: bindless absent |
| Wayland | `weston rdp`, 60 Hz | Mesa llvmpipe 25.2.8 | exit 4: bindless absent |
| X11 + `GALLIUM_DRIVER=d3d12` | `XWAYLAND0`, 60 Hz | D3D12 (AMD Radeon RX 9070 XT), GL 4.6 | exit 4: bindless absent |
Each final report names only `GL_ARB_bindless_texture` as the mandatory
missing feature, preserves the complete capability record, and reports zero
window/GL/input/audio ownership with `ShutdownComplete=true`. This is the
intended mandatory-modern-renderer failure, not an accepted Linux driver row.
The Ubuntu graphical CI job now builds/publishes the App, runs the focused
platform/capability tests, checks the native package closure, and verifies the
same actionable X11 software-driver rejection under Xvfb.
## Automated gates
- graphical backend/capability/Studio focused tests: 29/29;
- App Release tests: 3,763 passed / 3 skipped;
- complete Release solution: 8,826 passed / 5 skipped;
- Release solution build: zero warnings and zero errors;
- Windows supported smoke: exit 0, screenshot present, all function probes
pass, audio playback submitted, all terminal ledgers zero;
- WSLg X11 and Wayland negative gates: exit 4, exact bindless diagnostic,
all terminal ledgers zero;
- concurrent two-account Linux headless process remained 2/2 in-world with
zero faults/reconnects/resource-envelope violations throughout the gates.
## Deferred L1 acceptance
Do not claim Linux graphical support from WSLg. L1 still requires at least one
physical supported Linux row and the committed driver matrix:
- AMD Mesa/RadeonSI X11 and Wayland;
- NVIDIA proprietary X11 and supported Wayland;
- Intel only when every mandatory capability is present.
On each supported row, rerun the packaged screenshot/input/audio/teardown
smoke. Only then close L1 and begin the connected L2 route. This work and
Slices L2L6 were explicitly parked by the user on 2026-07-27.
## Rollback
```text
git revert 11501d52cad942850d88f83490710faf1d5cdf28
```