docs(3d): round 3 status (winsys BO fix, null+8 fix, KWin device, xwayland)

This commit is contained in:
2026-07-26 08:29:07 +09:00
parent c6e625a276
commit 078cd91298
+88 -1
View File
@@ -620,7 +620,94 @@ work is now committed:
process is untested. A real QEMU session with Xwayland
bridging would be the first validation step.
## 11. Operating rule
## 11. Round 3 implementation status (2026-07-25+)
This revision captures what was implemented in the systematic
follow-up to the Round 2 commit. Round 3 focused on completing
the Mesa redox gallium winsys, the Qt6 Wayland null+8 fix, the
KWin DRM device discovery path, and the Xwayland wiring.
- **Mesa redox winsys BO byte-count fix**: the winsys'
`redox_drm_bo_create` was using `templat->width0` as the
allocation size, which is wrong for 2D textures (would
allocate only the width of a 1×1×1 buffer for a 100×100×1
texture) and breaks for compressed formats. The new
`redox_resource_byte_count` helper computes the correct
byte count based on the format (using
`util_format_get_blocksizebits` / `util_format_is_compressed`
for compressed and uncompressed), the dimensions
(`width0 × height0 × depth0 × array_size`), and the face
count (× 6 for cube maps). The result is passed to both
`redox_gem_create` and stored in `bo->size` for later
`redox_gem_map` use.
- **Qt6 Wayland null+8 root-cause fix**:
- qtwaylandscanner: the generated `init_listener()` now
wraps `wl_<interface>_add_listener(...)` in a `if (m_<interface>)`
guard. When the upstream proxy is NULL (the bind failed
or the global hasn't been emitted), the call becomes a
no-op and the Qt frontend falls back to the standard
"global not available" code path. We also added a guard
around the `init_listener()` call inside `init()`.
- libwayland: the userland library now guards every entry
point that dereferences a `wl_proxy*` (wl_proxy_add_listener,
wl_proxy_get_version, wl_proxy_set_user_data,
wl_proxy_get_user_data, wl_proxy_destroy) with an
`if (!proxy) { errno = EINVAL; return ...; }` check. The
matching server-side functions (wl_resource_set_user_data,
wl_resource_get_user_data, wl_resource_get_version)
also have NULL guards. This is the second NULL-guard site
that the qtwaylandscanner-generated code relies on.
- **KWin DRM device discovery**: KWin's `drm_backend.cpp` uses
libudev to enumerate `/dev/dri/renderDN`. On Redox, the
DRM device is at `/scheme/drm/card0`. We now set
`KWIN_DRM_DEVICES=/scheme/drm/card0` in
`redbear-full.toml` (was already there; now also documented
in the sddm.conf and 21_sddm.service envs). A
`/dev/dri/renderD128` symlink that points at the scheme is
the planned fallback for libudev-based discovery. The
comment in redbear-full.toml explains that libudev 252+
may ignore `KWIN_DRM_DEVICES` if the device is detectable
via udev — the symlink fallback covers that case.
- **Xwayland TODO expanded**: the recipe's `#TODO` comment
now lists 5 specific runtime validation steps: live X
client under Wayland, XInput2 input forwarding, Xrender +
Xshm extensions, screenshot capture, and the GLX/DRI3
acceleration path. The recipe is `recipes/wip/wayland/
xwayland/recipe.toml`; a duplicate of the recipe is in
`local/recipes/wayland/xwayland/` (per the WIP policy
"if Red Bear depends on a WIP subsystem long-term, prefer
moving the maintained shipping version under
`local/recipes/`"). Build dependencies are complete
(libepoxy, libxkbfile, libxfont2, libxau, libx11, libxcb,
pixman, libxcvt, libxshmfence, freetype2, libwayland,
wayland-protocols, openssl1, etc.).
### What was NOT done in Round 3 (Round 4+ follow-up)
- The canonical `build-redbear.sh redbear-full` run to
validate the Round 2+3 changes. The winsys improvements and
the wayland null-guard changes are committed but uncompiled
in a fresh image. The Mesa configure step needs to complete
(libclc dep is in place) and then produce `iris_dri.so` /
`radeonsi_dri.so` for the winsys to be runtime-linked.
- A real Qt6 Wayland client runbook execution. The static
diagnosis and the patches are in place; a fresh
libwayland→qtbase→qtdeclarative→qtwayland forced rebuild
is needed to confirm the fix. 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.
- Hardware validation: still zero bare-metal Intel/AMD
runs. The kernel Intel path treats `0x7D51` as MTL Gen14
with GGTT + render ring + i915 UAPI bridge; the AMD path
has the amdgpu UAPI bridge but no real GFX ring yet.
## 12. Operating rule
> Red Bear should speak about Mesa 3D support in the same way it speaks
> about any other first-class subsystem.