diff --git a/local/docs/3D-DRIVER-PLAN.md b/local/docs/3D-DRIVER-PLAN.md index 1810993266..43d8d9670d 100644 --- a/local/docs/3D-DRIVER-PLAN.md +++ b/local/docs/3D-DRIVER-PLAN.md @@ -794,6 +794,117 @@ address additional stubs that the original Round 7 did not reach. | `a85675d00d` | relibc submodule pointer | Bump to d9760bdc (getifaddrs real impl) | | `d9760bdc` (in submodule/relibc) | relibc | Real `getifaddrs` via /scheme/net/ifs enumeration | +## 8.2 Round 8 follow-up: Mesa EGL back-buffer, pipe_loader redox, kf6-kcmutils, termios + +Round 8 (2026-07-27/28) closes the remaining hard stubs and stale references +that the Round 7 follow-up and v5.8/v5.9 v5.10 round 8 sweeps left behind. + +### Mesa EGL back-buffer: real allocation, not a no-op + +`local/recipes/libs/mesa/source/src/egl/drivers/dri2/platform_redox.c` and +`egl_dri2.h` (Round 8 commit `c20032435d`): + +- `redox_image_get_buffers` previously set `buffers->back = NULL` unconditionally + (line 62). Now handles `__DRI_IMAGE_BUFFER_BACK`: allocates a `dri_image` + on first request, caches it on `dri2_egl_surface.back`, returns it via + `buffers->back`. Symmetric with the existing front-buffer handling. +- `redox_free_images` destroys the back image if it was allocated + (symmetric with front). +- New `back` field on `struct dri2_egl_surface` in `egl_dri2.h`, placed + right after `front` to match upstream Mesa ordering. + +**Impact**: All Wayland double-buffered EGL clients (Qt6 OpenGL windows, +KWin scene rendering, etc.) now get real back-buffer image allocation +on Redox. Previously they got a no-op create with NULL back pointer, +which caused black-screen or undefined-behavior crashes. + +### Mesa pipe_loader: redox backend for /scheme/drm/card0 + +New file `local/recipes/libs/mesa/source/src/gallium/auxiliary/pipe-loader/pipe_loader_redox.c` +(Round 8 commit `101ce11844`, 200+ lines): + +- `pipe_loader_redux_probe` opens `/scheme/drm/card0` via + `loader_open_device()`, calls `drmGetVersion()` to read the driver name + (set by libdrm's redox patch from the kernel-side scheme handler), + looks up the matching descriptor via `get_driver_descriptor()`, + exposes it as a `PIPE_LOADER_DEVICE_PLATFORM`. +- `pipe_loader_redux_create_screen` delegates to the matched driver's + `create_screen(fd, config)`. +- `pipe_loader_redux_release` closes the fd, frees the name, calls + `pipe_loader_base_release`. +- Gated on `#ifdef HAVE_GALLIUM_REDOX` in `pipe_loader.c`'s backends array. + +**Impact**: Non-EGL gallium consumers (VAAPI, VDPAU, drm-info, any app +that goes through `pipe_loader_probe()`) can now discover the Redox DRM +device. Previously the redox winsys was unreachable through the standard +pipe_loader entry point — it was only reachable via the EGL redox +platform's direct `dri2_create_screen()` call. Now VAAPI drm-info +detection on Redox works. + +### kf6-kcmutils: resolve git conflict markers (BLOCKER) + +`local/recipes/kde/kf6-kcmutils/recipe.toml` (lines 31-41) and +`local/recipes/kde/kf6-kcmutils/source/CMakeLists.txt` (lines 77-81) had +active `<<<<<<< Updated upstream` / `=======` / `>>>>>>> Stashed changes` +markers from a previous merge attempt. Round 8 commit `5aa5c96506` +resolved them: + +- `recipe.toml`: chose the **upstream** branch (keeps `qml` in + `redbear_qt_link_sysroot_dirs ... modules qml`). The stashed branch + had removed `qml`, which would have broken kcmshell/QtQuick module + resolution and SDDM. +- `CMakeLists.txt`: kept the more verbose `#ki18n_install(po)` comment + ("translations deferred until lupdate/lrelease is built for target"). + +**Impact**: This was a **BLOCKER** for `redbear-full` build — the shell +script would have tried to execute the literal `<<<<<<<` and `>>>>>>>` +strings as commands, causing immediate build failure. kf6-kcmutils is +the entry point for System Settings, kcmshell, and many other +Plasma modules; without it, the entire desktop session layer is broken. + +### relibc cfgetispeed/cfsetispeed/cfsetospeed on Redox + +`local/sources/relibc/src/header/termios/mod.rs` (Round 8 commit +`c73e4227`): + +- Added two non-POSIX extension fields to the Redox termios struct: + `__c_ispeed: speed_t` and `__c_ospeed: speed_t`, both default 0. + Documented as "non-POSIX; B0..=B4000000" per BSD conventions. +- `cfgetispeed` now reads `termios.__c_ispeed` (was 0) +- `cfgetospeed` now reads `termios.__c_ospeed` (was 0) +- `cfsetispeed` writes `termios.__c_ispeed` for valid speeds + (`B0..=B38400`, `B57600..=B4000000`); `EINVAL` otherwise + (was `EINVAL` for all speeds on Redox) +- `cfsetospeed` writes `termios.__c_ospeed` for valid speeds + (was `EINVAL` for all speeds on Redox) + +**Impact**: Serial tools that query baud rate (minicom, screen, cu) +now get real roundtripping. Previously they always saw 0 on Redox. +Four "medium severity" stubs from the Round 7 survey resolved. + +### Documentation cleanups + +- `local/AGENTS.md` line 1415-1416: removed stale reference to + `local/docs/legacy-obsolete-2026-07-25/DRM-MODERNIZATION-EXECUTION-PLAN.md` + as "the current DRM-focused execution plan". The plan was moved to + legacy-obsolete during Round 5; the work it covered is now + consolidated in 3D-DRIVER-PLAN.md (Rounds 1-7). +- `local/recipes/AGENTS.md` line 30: marked `pcid-spawner` as + **Retired 2026-07-24** (superseded by `driver-manager`). The recipe + directory is kept for historical reference per never-delete policy. + +### Round 8 follow-up commits in 3D path + +| Commit | Component | What | +|--------|-----------|------| +| `5aa5c96506` | kf6-kcmutils | Resolve git conflict markers (recipe + source) — BLOCKER FIX | +| `9bc6ba0b6e` | redbear-compositor | Real keyboard modifier state tracking (shift/ctrl/alt/logo/caps/num/mod5) | +| `1d930cd425` | qtbase | Remove redundant open_memstream stub (relibc provides it) | +| `101ce11844` | Mesa | pipe_loader_redux backend for /scheme/drm/card0 | +| `c20032435d` | Mesa EGL redox | Back-buffer allocation (front+back) | +| `f6420ec8c3` | relibc submodule pointer | Bump to c73e4227 (cfget* real impl) | +| `c73e4227` (in submodule/relibc) | relibc | cfgetispeed/cfsetispeed Redox impl | + ## 9. Validation matrix (post-Round 7)