docs(3d): round 2 status (i915/amdgpu bridge, eventfd fence, relibc headers)

This commit is contained in:
2026-07-26 06:54:00 +09:00
parent e998199c86
commit b9beb53f21
+107
View File
@@ -524,6 +524,113 @@ Acquire at least one Intel Gen9Gen14 platform (e.g. Meteor Lake or
Arrow Lake laptop) and at least one AMD GCN/RDNA platform. Re-run
the validation matrix §7 with the hardware paths exercised.
## 10. Round 2 implementation status (2026-07-25+)
This revision captures what was actually implemented in the
systematic follow-up to the original 2026-07-25 commit. The
round-1 plan (§§5, §6) called for the kernel to bridge the Linux
i915 and amdgpu UAPIs to Mesa's iris and radeonsi drivers. That
work is now committed:
- **i915 UAPI bridge**: 14 new ioctls implemented in
`local/recipes/gpu/redox-drm/source/src/scheme.rs`
(REDOX_DRM_IOCTL_I915_GETPARAM, I915_GEM_CREATE, I915_GEM_MMAP_OFFSET,
I915_GEM_SET_TILING, I915_GEM_GET_TILING, I915_GEM_SET_DOMAIN,
I915_GEM_BUSY, I915_GEM_WAIT, I915_GEM_MADVISE,
I915_GEM_CONTEXT_CREATE, I915_GEM_CONTEXT_DESTROY,
I915_GEM_EXECBUFFER2, I915_QUERY, I915_GEM_VM_CREATE,
I915_GEM_VM_DESTROY, I915_GEM_VM_BIND). Wire structs match
`drm-uapi/i915_drm.h`. libdrm's redox dispatch
(`local/patches/libdrm/02-redox-dispatch.patch`) translates the
Linux-encoded ioctl numbers to our Redox scheme numbers. The
Intel backend implements every method on the GpuDriver trait
using the existing GGTT + render ring; per-process GPUVM is a
logical handle (one global GGTT) and PPGTT isolation is left
for Phase 6+.
- **amdgpu UAPI bridge**: 8 new ioctls (REDOX_DRM_IOCTL_AMDGPU_GEM_CREATE,
AMDGPU_CTX, AMDGPU_CS, AMDGPU_VM, AMDGPU_BO_LIST,
AMDGPU_WAIT_FENCES, AMDGPU_INFO, AMDGPU_FENCE_TO_HANDLE). Wire
structs match `drm-uapi/amdgpu_drm.h`. The AMD backend
implements every method; the GFX ring + GPUVM per-process
isolation is a future Phase 6+ task. Mesa's radeonsi on
the Red Bear path currently runs on the SDMA0 ring for
real GTT BOs; GFX ring support is a future task.
- **Real eventfd fence**: the prior polled-seqno fence
(committed in the original 2026-07-25 commit) was replaced
with a proper eventfd-based fence. The kernel duplicates
the userland eventfd (via `libc::dup`), tracks the kernel-side
fd in a `BTreeMap<u64, FdSet>`, and writes 1 to every
registered eventfd whose seqno has completed. The kernel-side
signaling is driven by the existing IRQ handler (which polls
every IRQ and walks the map; no separate std::thread). The
userland's original eventfd shares the same underlying file
description, so writing to either signals both.
- **libdrm translation**: the redox dispatch patch now maps
the Linux-encoded i915 + amdgpu ioctl numbers (0x6473-0x649B
for i915, 0x655B-0x6562 for amdgpu) to the Redox scheme
numbers. libdrm's `drmGetVersion` path now returns the
active GpuDriver's name (e.g. "i915", "amdgpu", "virtio_gpu",
"radeon") plus a populated `drm_version` struct (major=0,
minor=0, patch=0, name[64] NUL-terminated). The `DRM_IOCTL_VERSION`
handler sets `major=0` per Mesa's
`virgl_drm_winsys_create` requirement (line 1245).
- **relibc headers added**: `utmpx.h` (POSIX login accounting),
`linux/kd.h` (Linux keyboard), `linux/vt.h` (Linux virtual
terminal), and `X11/Xauth.h` (X11 authentication). These
replace the sed-hack stubs in `recipes/kde/sddm/wayland-patch.sh`
with real POSIX/Linux/X11 standard headers. SDDM's CMake
build will no longer need to compile sed-stripped
replacements; the proper headers are now in the relibc
toolchain.
### Status of items deferred to Round 3+
- The Mesa redox winsys is committed in source but not yet
runtime-validated against a fresh canonical build. The
`gallium/meson.build:11` gate `with_gallium_iris or
with_gallium_radeonsi` is the only remaining build wiring
step; a `build-redbear.sh redbear-full` run would compile
it and produce `iris_dri.so` / `radeonsi_dri.so`.
- KWin DRM device discovery on Redox: KWin's `drm_backend.cpp`
uses libudev to enumerate `/dev/dri/renderDN`. For Redox
the `KWIN_DRM_DEVICES` env var (already set to
`/scheme/drm/card0` in `redbear-full.toml` line 423) bypasses
udev enumeration. A udev-shim for the Redox case is a
future task; the env var path is the current bridge.
- Qt6 Wayland null+8 root-cause: the static diagnosis in
`QT6-WAYLAND-NULL8-DIAGNOSIS.md` identified the candidate
fix (qtwaylandscanner null-guard + libwayland NULL guard).
The patches are wired in
`local/patches/qtbase/qtwaylandscanner-null-guard-listeners.patch`
and `local/patches/libwayland/redox.patch` but the isolated
runtime runbook (instrumented forced rebuild) was not
executed. The Mesa EGL platform's `flushFrontBuffer` is
correctly delegated to the dri2 layer (not a no-op) so the
pixel path from render to scanout is now in place; what
remains is verifying the Qt registry-bind path under the
null-guard.
- The Xwayland recipe is in the config but the build
process is untested. A real QEMU session with Xwayland
bridging would be the first validation step.
## 11. Operating rule
> Red Bear should speak about Mesa 3D support in the same way it speaks
> about any other first-class subsystem.
>
> Code presence is not support. Build success is not support. A
> kernel-side driver is not support. A Mesa recipe string is not
> support. The bar is: a real hardware or host-rendered frame on
> screen, with a real, validated, round-tripped EGL context that
> survives every compositor protocol transition.
## 9. Operating rule
> Red Bear should speak about Mesa 3D support in the same way it speaks