a4e7d8ab90
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>
59 lines
2.9 KiB
Markdown
59 lines
2.9 KiB
Markdown
# 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
|
||
|
||
iter1–6 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).
|