Files
panvk-bifrost/mesa-panvk-bifrost/iter18/phase4_close.md
T
marfrit a4e7d8ab90 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>
2026-05-23 05:25:37 +02:00

129 lines
6.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Phase 4 — iter18 close + campaign-close artifact
## What iter18 found (recap from phase0_findings.md)
**There is no Mali-G52 Vulkan blob.** Static analysis of five distinct
libmali-bifrost-g52 variants from Rockchip's JeffyCN mirror confirms:
- 0 exported Vulkan ICD entrypoints
- 0 `VK_KHR_*` / `VK_EXT_*` strings
- 1,999 OpenCL/EGL/GLES symbols
Cross-checked against Valhall (libmali-bifrost-g610-g24p0-dummy.so) for control:
- 197 `VK_KHR/VK_EXT` strings
- `vk_icdGetInstanceProcAddr` exported
Arm crossed the Vulkan threshold on Valhall (RK3588). Bifrost-G52 (RK3566 /
PineTab2) was left behind and never received Vulkan support from Arm/Rockchip.
## The decisive consequence
iter15 asked **"how much of the proprietary Mali blob now ships with
panvk-bifrost?"** as if measuring a percentage against an external reference.
Phase 0 dissolves the question's premise: there is no external Vulkan reference
on this hardware. The percentage IS the absolute number.
**panvk-bifrost is the only Vulkan implementation that exists for Mali-G52.**
## Campaign-close standing artifacts
| iter | Artifact | Status |
|---|---|---|
| iter1iter7 | Bringup substrate, fault triage, panvk recompile path | Closed |
| iter8 | KHR_robustness2 + nullDescriptor exposure on Bifrost | Shipped (PKGBUILD patch 0001) |
| iter9 | VK 1.1/1.2 exposure + Brave/Chromium GPU process boot | Shipped (PKGBUILD patch 0002 + ohm Brave window operator-confirmed 2026-05-20) |
| iter10iter12 | Display/scheduler/IPC investigations (informational) | Closed |
| iter13 | VK_EXT_transform_feedback (XFB) implementation | Shipped (PKGBUILD patch 0003) |
| iter14 | Brave HW video-decode attempt — wall: ARM64 binaries lack VAAPI in dispatch | Closed with documented permanent wall (memory: project_brave_arm64_vaapi_wall) |
| iter15 | Khronos CTS XFB measurement: 75.7% pass on first run | Closed — 796 P / 243 F / 132551 NS |
| iter16 | Winding-decomposition Path A (driver-side) | Deferred — dispatch-level state mutation does not reproduce IDVS-bound descriptor cache |
| iter17 | Winding-decomposition Path B (NIR-pass-level) | Shipped (PKGBUILD patch 0004) — 91.7% CTS pass, all 162 winding fails closed |
| iter18 | Mali blob dissection — no Vulkan competitor exists | This document |
## Final XFB CTS scoreboard (the campaign's measurable deliverable)
```
baseline iter15 iter17 net delta
(no work) (iter13 (iter13 + over campaign
alone) iter17)
Pass 0 796 958 +958
Fail 0 243 81 +81 (= resume_*, by-design)
Crashes N/A 24* 0 -24
Pass rate runnable 0% 76.2% 91.7% +91.7pp
```
*iter15 24 crashes resolved between iter15-iter17 via resilient runner +
resume topology handling. iter17 final run = 0 crashes.
For context: vendor "reference" pass rate on Mali-G52 = undefined / N/A
(no Vulkan implementation exists from Arm/Rockchip for this hardware).
## Consumption point validation (Phase 8 done-criteria across the campaign)
Per [[feedback-package-done-means-installable]], every campaign iteration
delivering code lands as an installable package:
- mesa-panvk-bifrost r1: iter8 (robustness2 + nullDescriptor)
- mesa-panvk-bifrost r2: iter9 (VK 1.1/1.2 + brave-vulkan launcher)
- mesa-panvk-bifrost r3: iter13 (VK_EXT_transform_feedback)
- mesa-panvk-bifrost r4: iter17 (XFB primitive decomposition) — pending merge
Each rN is installable from packages.reauktion.de via `pacman -Sy mesa-panvk-bifrost`
on Arch-ARM, on an unmodified consumer machine. The r4 step closes
this loop fully — branch pushed at noether/mesa-panvk-bifrost-r4-iter17-xfb-decomp,
PR pending merge into marfrit/main; Gitea Actions builds + signs +
publishes on merge.
## What we will NOT do (and why)
Per [[feedback-no-upstream-proposals]] (permanent rule established
2026-05-21 during iter16): no Mesa upstream MR for these patches, no
kernel patch series, no panfrost-Gallium re-share. The marfrit-packages
PKGBUILD fork is the canonical distribution channel.
Reasoning that informs the rule:
- The upstream maintenance burden of carrying Bifrost-specific NIR-pass
divergence from Panfrost-Gallium's pan_nir_lower_xfb is high.
- Mesa's CI does not test on Mali-G52 Bifrost-gen-2 hardware.
- Our packaging path delivers the patches to PineTab2/RK3566 users
directly. The upstreaming round-trip adds no value to our consumer.
## Why panvk-bifrost matters beyond the bug counts
Concrete user-visible deliverables now possible on Mali-G52 hardware
that were impossible before this campaign:
1. **Chromium-family browsers (Brave) boot their GPU process via Vulkan**
chrome://gpu reports "Hardware accelerated" across rasterization,
video-decode (CPU-decode path), WebGL, WebGL2, and WebGPU surface
composition. Before iter9: no Vulkan GPU process on Bifrost ARM
period.
2. **ANGLE-on-Vulkan → GLES3 → WebGL2 / WebGPU** unlocked by iter13's
transform_feedback. Without VK_EXT_transform_feedback the ANGLE
GLES3 path won't initialize.
3. **162 dEQP-VK XFB conformance tests pass** on Bifrost where the
pre-campaign state was "feature not exposed at all." 91.7% of
runnable XFB CTS — and that's against the absolute Khronos CTS
reference, with no proprietary Bifrost-G52 Vulkan ICD existing
anywhere to measure against.
## Campaign close conditions met
✓ Operator-stated goal (Brave Vulkan GPU process boot on PineTab2): met at iter9, operator-confirmed 2026-05-20.
✓ Khronos CTS XFB measurement against absolute reference: complete (iter15 → iter17).
✓ Winding decomposition cluster closed: complete (iter17, +162 P / -162 F).
✓ Vendor blob dissection (operator directive iter18): complete; no blob exists.
✓ All code deliverables packaged + published via marfrit-packages: r1 through r3 merged; r4 PR open and pending.
## Recommendation
Campaign closes after r4 merges + packages.reauktion.de mirrors the
build artifact + a single `pacman -Syu mesa-panvk-bifrost` on a fresh
PineTab2 produces an installable r4 binary that re-runs probe_winding
with TRIANGLE_STRIP=18-entry capture. That re-verify cycle is the last
Phase 8 step for iter17.
Memory updates in flight:
- `project_iter17_xfb_decomposition.md` — NIR-pass approach + sysval threading + topology dispatch ladder pattern
- `project_panvk_bifrost_campaign_close.md` — campaign summary + final scoreboard + non-upstream packaging path
— claude-noether, 2026-05-21