initial seed: retrofit campaign lineage from local working trees

panvk-bifrost campaigns (r1..r4 Vulkan compositor + r5.video1 Vulkan
video decode) shipped before this repo existed; the deliverable
patches live in marfrit-packages, but the reasoning chain, phase docs,
and source-state evidence lived only in local working trees on the
development host.

This retrofit imports:
- mesa-panvk-bifrost/   — r1..r4 era phase docs (iter1..iter18)
                          (libmali stub blobs at iter18/blob/ excluded
                          — 109MB of RE artifacts replaced with a README
                          pointer)
- mesa-panvk-bifrost-video/ — sibling campaign phase docs + probe
- evidence/             — frozen .tgz source snapshots at each milestone
                          (basis for the 0005 patch diff generation)

Future iterations should branch off here from day one, so each iter is
a commit rather than a snapshot. See [[feedback-session-local-process-pins]]
for the process drift this retrofit closes.

Total: 1.9 MB across 124 files.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-05-23 05:25:37 +02:00
parent 430d0da278
commit a4e7d8ab90
124 changed files with 22551 additions and 1 deletions
@@ -0,0 +1,58 @@
# Phase 0 — substrate for iter7
Opened **2026-05-19** after [iter6 close GREEN](phase8_iteration6_close.md).
## Locked research question — iter7
> **Run stock `vkcube --c 120 --wsi wayland` (Vulkan reference rotating-cube demo) on ohm against the live Plasma/Wayland session, with `PAN_I_WANT_A_BROKEN_VULKAN_DRIVER=1`. Verify:**
>
> - Process exits 0
> - 120 frames rendered (vkcube reports if --c was honored)
> - No GPU faults in dmesg during the run
> - No kernel-side panfrost errors
> - Operator may visually confirm correct cube rendering (PineTab2 has its own display)
## Why this shape
iter16 closed all the synthetic-probe paths. iter7 is the **first real off-the-shelf application**. New surface area:
- **WSI / swapchain (`VK_KHR_swapchain`)** — first time we use the swapchain path.
- **`VK_KHR_wayland_surface`** — first time we connect to a live Wayland compositor.
- **Continuous frame submission** — many `vkQueueSubmit` calls in sequence, with synchronization across frames.
- **Acquire/present cycle** — vkAcquireNextImageKHR + vkQueuePresentKHR per frame.
- **vkcube's own state** — rotation matrix per frame, textured cube vertices, depth buffer, all bundled together.
If vkcube works end-to-end, that's massive validation toward TuxRacer-via-Zink. If it crashes, we have a known-reference reproducer + a real bug to characterize.
## Session info (gathered)
- Active user: `mfritsche` (UID 1001) on `tty1`
- `XDG_RUNTIME_DIR=/run/user/1001`
- `WAYLAND_DISPLAY=wayland-0` (socket present at `/run/user/1001/wayland-0`)
- vkcube version: from `vulkan-tools 1.4.350.0-1` package
## Hypothesis space
1. **`VK_KHR_wayland_surface` plumbing.** First-ever PanVk-Bifrost test of Wayland surface creation.
2. **Swapchain creation.** PanVk's swapchain path may have stale or untested code on v6/v7 — particularly modifier-aware swapchain images.
3. **Present queue** — vulkaninfo's "present support = false" on the only queue family (no-surface query) may turn into a runtime issue when a real surface exists.
4. **Continuous frame submission** — sync2 / timeline semaphore plumbing across frames.
5. **vkcube's specific draw shape** — textured cube uses MVP UBO, vertex buffer with positions, normals, texcoords; texture upload; depth test. All things proven in isolation, but combined here.
## In-scope (LOCKED 2026-05-19 for iter7)
- 120 frames of vkcube via Wayland WSI on ohm.
- Stock binary (no modifications).
- Whatever GPU PanVk picks (single Mali on ohm).
## Out-of-scope (LOCKED 2026-05-19 for iter7)
- VK_KHR_xcb_surface / VK_KHR_xlib_surface paths.
- VK_KHR_display direct-mode (would conflict with Plasma session).
- VK_EXT_headless_surface (not strictly needed if Wayland works).
- vkmark / Zink (iter8+).
- vkcube subtests (--use_staging variations).
## Reference
- Prior closes: [iter1](phase8_iteration1_close.md) [iter6](phase8_iteration6_close.md).