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

6.5 KiB
Raw Blame History

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