mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-11-07 01:53:24 +09:00
157 lines
6.5 KiB
Markdown
157 lines
6.5 KiB
Markdown
# MiniPC-8845 Arch WSL GPU Runner
|
|
|
|
Configuration recorded on 2026-10-05.
|
|
|
|
## Host
|
|
|
|
| Component | Configuration |
|
|
| --- | --- |
|
|
| Hostname | `MiniPC-8845` |
|
|
| Windows build | `10.0.26200.9445` |
|
|
| GPU | AMD Radeon 780M Graphics |
|
|
| Windows GPU driver | `32.0.12033.1030` |
|
|
| WSL version | `2.7.3.0` |
|
|
| Distribution | `archlinux`, Arch Linux on WSL 2 |
|
|
| Linux kernel | `6.6.114.1-microsoft-standard-WSL2` |
|
|
| Init system | systemd |
|
|
| WSL networking | Mirrored |
|
|
| GPU access | `/dev/dxg` and `/usr/lib/wsl/lib` |
|
|
|
|
## GitHub Actions Runner
|
|
|
|
| Setting | Value |
|
|
| --- | --- |
|
|
| Repository | `MobileGL-Dev/MobileGL` |
|
|
| Runner name | `minipc-8845-arch-wsl-gpu` |
|
|
| Runner version | `2.337.0`, automatic updates enabled |
|
|
| Labels | `self-hosted`, `Linux`, `X64`, `arch`, `wsl`, `gpu`, `gles`, `vulkan`, `d3d12` |
|
|
| Concurrent jobs | 1 |
|
|
| Linux account | `github-runner`, UID 1001, no sudo configuration |
|
|
| Installation directory | `/opt/actions-runner/mobilegl` |
|
|
| Work directory | `/opt/actions-runner/mobilegl/_work` |
|
|
| Environment file | `/etc/mobilegl-runner/gpu.env` |
|
|
|
|
Workflow runner selector:
|
|
|
|
```yaml
|
|
runs-on: [self-hosted, Linux, X64, arch, wsl, gpu, gles, vulkan]
|
|
```
|
|
|
|
## Graphics
|
|
|
|
| Component | Configuration |
|
|
| --- | --- |
|
|
| Mesa | `26.2.1-arch1.1` |
|
|
| OpenGL / GLES driver | Mesa D3D12 |
|
|
| Renderer | `D3D12 (AMD Radeon 780M Graphics)` |
|
|
| EGL | 1.5 |
|
|
| OpenGL | 4.6 |
|
|
| OpenGL ES | 3.1 |
|
|
| Vulkan driver | Mesa Dozen, translating Vulkan to D3D12 |
|
|
| Vulkan device API | 1.2.354 |
|
|
| Vulkan ICD | `/usr/share/vulkan/icd.d/dzn_icd.json` |
|
|
| Default EGL platform | Surfaceless |
|
|
|
|
Dozen reports a non-conformant Vulkan implementation. The exposed capabilities
|
|
are GLES 3.1 and Vulkan 1.2; GLES 3.2 and full Vulkan conformance are not available.
|
|
|
|
The runner service selects the Radeon GPU with these environment variables:
|
|
|
|
```sh
|
|
DISPLAY=:0
|
|
WAYLAND_DISPLAY=wayland-0
|
|
XDG_RUNTIME_DIR=/mnt/wslg/runtime-dir
|
|
LD_LIBRARY_PATH=/usr/lib/wsl/lib
|
|
MESA_LOADER_DRIVER_OVERRIDE=d3d12
|
|
GALLIUM_DRIVER=d3d12
|
|
MESA_D3D12_DEFAULT_ADAPTER_NAME="AMD Radeon 780M Graphics"
|
|
VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/dzn_icd.json
|
|
EGL_PLATFORM=surfaceless
|
|
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
|
```
|
|
|
|
The installed GPU probe is `/usr/local/libexec/mobilegl-runner/gpu-smoke`.
|
|
Its GLES source is `/usr/local/libexec/mobilegl-runner/gles-smoke.c`, and the
|
|
recorded verification log is `/var/log/mobilegl-runner/gpu-smoke.log`.
|
|
|
|
## Build Tools
|
|
|
|
Installed tools include GCC, Clang 22, CMake, Ninja, ccache, LLD, libc++, Git LFS,
|
|
GitHub CLI, and EGL/GLES/Vulkan development headers.
|
|
|
|
## Service and Startup
|
|
|
|
| Setting | Value |
|
|
| --- | --- |
|
|
| systemd unit | `actions.runner.MobileGL-Dev-MobileGL.minipc-8845-arch-wsl-gpu.service` |
|
|
| Service drop-in | `/etc/systemd/system/actions.runner.MobileGL-Dev-MobileGL.minipc-8845-arch-wsl-gpu.service.d/gpu.conf` |
|
|
| Service startup | Enabled at WSL systemd boot |
|
|
| Restart policy | `Restart=always`, `RestartSec=15` |
|
|
| Startup checks | GPU device access and WSLg X11/Wayland sockets |
|
|
| Windows scheduled task | `MobileGL Arch WSL Runner` |
|
|
| Task trigger | Windows login by `Swung0x48` |
|
|
| Task behavior | Starts WSL in a hidden window and keeps it running |
|
|
| Task execution limit | Unlimited |
|
|
| Task retry policy | Every minute, up to 999 retries |
|
|
|
|
Automatic startup requires the Windows user to log in. The runner cannot execute
|
|
jobs while the host is asleep.
|
|
|
|
## Network
|
|
|
|
The runner uses the Windows Clash proxy through WSL mirrored networking:
|
|
|
|
```sh
|
|
http_proxy=http://127.0.0.1:7897
|
|
https_proxy=http://127.0.0.1:7897
|
|
no_proxy=localhost,127.0.0.1,::1
|
|
```
|
|
|
|
Clash must be running for the runner's configured GitHub connection to work.
|
|
|
|
## Main Test workflow
|
|
|
|
CPU jobs do not query GPU availability. They run directly on the original GitHub
|
|
`ubuntu-latest` environment, without a job container. This preserves the installed
|
|
Git/Python/toolchain behavior and leaves 8845 free for GPU testing. Ubuntu-built
|
|
artifacts are consumed by either Ubuntu or the newer Arch userspace; metadata paths
|
|
and driver selection are relocated at the consuming stage.
|
|
|
|
All build and test hosts install **CMake 3.31.10**, including the native Arch GPU
|
|
runner. The GitHub action tag alone does not pin the installed CMake version, so
|
|
`cmakeVersion` is explicit. The existing escaped GoogleTest property lists work in
|
|
3.31.10. Newer GoogleTest implementations preserve those escapes differently;
|
|
`CMP0178=OLD` does not restore PROPERTIES parsing. No generated-file separator
|
|
unescaping is performed: the CMake/CTest version is consistent at both ends.
|
|
|
|
After each runtime build completes, a small GitHub-hosted selection job queries
|
|
this repository's runner inventory for the corresponding GPU stage. Integration,
|
|
verify, split and retrace select independently. Benchmark uses the integration
|
|
selection. `integration-verify-split` has a separate CPU build and GPU test job.
|
|
Retrace compilation and fixture preparation no longer wait for integration tests.
|
|
|
|
An online 8845 runner is preferred even when busy. Offline, unregistered, or
|
|
mismatched labels select `ubuntu-latest`. Test failures never trigger fallback.
|
|
Configure Actions secret `RUNNER_STATUS_TOKEN` with repository Administration:
|
|
Read-only access. The secret is passed only to the selection jobs. A missing token,
|
|
expired credential or API failure is an error, not evidence that the runner is offline.
|
|
|
|
`prepare_test_runtime.py` runs when producing and consuming runtime artifacts. It
|
|
records/relocates workspace paths, resolves CMake module paths on the execution
|
|
host, and preserves the 3.31.10 ENVIRONMENT/LABELS escaping through GoogleTest discovery.
|
|
This prevents a backend value like `DirectVulkan;MOBILEGL_TRANSPORT=inproc;...`.
|
|
At test time it replaces the built-in ICD path and removes software-rendering
|
|
and Mesa version overrides on the hardware runner. Thus an Ubuntu build can be
|
|
tested on Arch WSL with Dozen/D3D12 without recompiling or using the build host's
|
|
software driver configuration. Capability failures remain visible test failures.
|
|
|
|
Each GPU stage samples availability after its inputs are ready. A disconnection
|
|
later still leaves already scheduled jobs queued: GitHub cannot migrate those
|
|
jobs automatically. Rerun the workflow to select again. Arch-built native artifacts
|
|
are not mixed with Ubuntu consumers; CPU artifacts are built on GitHub Ubuntu.
|
|
|
|
Native GPU jobs use Arch's compiler and drivers plus the pinned user-space CMake;
|
|
they do not install OS packages, provision swap, download an SDK or change privileged core settings. The old standalone
|
|
`wsl-gpu-smoke.yml` has been removed; the host's installed probe remains available
|
|
for manual diagnostics.
|