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>
109 lines
4.8 KiB
Plaintext
109 lines
4.8 KiB
Plaintext
iter9 Brave-on-PanVk-Bifrost breakthrough — captured 2026-05-20 on ohm
|
|
(PineTab2 v2.0, RK3566, Mali-G52 r1 MC1, Mesa 26.0.6 + iter8 patch + iter9 patch + env override)
|
|
|
|
===== CAMPAIGN PIVOT CONTEXT =====
|
|
Goal pivoted from "TuxRacer via Zink-on-PanVk" to "Brave/Chromium GPU
|
|
process boots via Vulkan on PanVk-Bifrost". Pivot driven by extremetuxracer
|
|
not being in Arch repos + Chromium-Vulkan being the structurally bigger
|
|
ecosystem win (per README's "Consumer-side benefit" section).
|
|
|
|
===== THE WINNING COMBO =====
|
|
|
|
Patched binary (iter8 + iter9 patches stacked):
|
|
/home/mfritsche/panvk-patched-libs/libvulkan_panfrost.so (16.8 MB)
|
|
/home/mfritsche/panvk-patched-libs/panfrost_icd_patched.json
|
|
|
|
iter8 patch: KHR/EXT_robustness2 + nullDescriptor = true for PAN_ARCH 6/7
|
|
iter9 patch: has_vk1_1 + has_vk1_2 = true for PAN_ARCH 6/7
|
|
|
|
Runtime env:
|
|
XDG_RUNTIME_DIR=/run/user/1001
|
|
WAYLAND_DISPLAY=wayland-0
|
|
DISPLAY=:1
|
|
XAUTHORITY=/run/user/1001/xauth_<random> (find from `pgrep -fa Xwayland`)
|
|
VK_ICD_FILENAMES=/home/mfritsche/panvk-patched-libs/panfrost_icd_patched.json
|
|
PAN_I_WANT_A_BROKEN_VULKAN_DRIVER=1
|
|
MESA_VK_VERSION_OVERRIDE=1.2 (bypasses get_api_version's
|
|
PAN_ARCH>=10 gate at runtime;
|
|
cleaner than another patch)
|
|
|
|
Brave flags (the winners):
|
|
--use-gl=disabled (CRUCIAL — skips GLES3 info collection;
|
|
without this Chromium dies at ANGLE-
|
|
Vulkan-on-Bifrost not exposing GLES3
|
|
because PanVk-Bifrost lacks VK_EXT_
|
|
transform_feedback)
|
|
--enable-features=Vulkan (compositor uses Vulkan)
|
|
--use-vulkan=native (use native Vulkan, no SwiftShader)
|
|
--ozone-platform=x11 (Wayland ozone is incompatible with
|
|
Vulkan per Chromium error msg; use
|
|
X11 ozone via XWayland)
|
|
--no-sandbox --disable-gpu-sandbox (so GPU process can access /dev/dri
|
|
and VK_ICD_FILENAMES)
|
|
--ignore-gpu-blocklist (force-enable Vulkan on Mali — Brave's
|
|
internal blocklist may flag PanVk)
|
|
|
|
===== EVIDENCE OF SUCCESS =====
|
|
|
|
1. PanVk warning fires ONCE per GPU process startup (previously: 10x = 5
|
|
crash-retries). GPU process is staying alive.
|
|
|
|
2. No "Exiting GPU process due to errors during initialization" message.
|
|
|
|
3. No "GLES3 is unsupported" / "eglCreateContext ES 3.0 failed" / "ANGLE
|
|
Requires a minimum Vulkan device version of 1.1" errors.
|
|
|
|
4. Brave ran for the full 25-second timeout. Process exited cleanly on
|
|
timeout (histograms emitted during shutdown).
|
|
|
|
5. Load page: https://www.example.com
|
|
(Network fetch confirmed in logs.)
|
|
|
|
6. dmesg --since "1 minute ago": NO panfrost/mali/gpu faults.
|
|
|
|
7. Single benign warning:
|
|
sandbox/policy/linux/sandbox_linux.cc:405: InitializeSandbox() called
|
|
with multiple threads in process gpu-process.
|
|
(Standard Linux GPU sandbox warning; non-fatal.)
|
|
|
|
===== ITER-BY-ITER FAILURE CHAIN (now resolved) =====
|
|
|
|
Run 1: stock libvulkan_panfrost.so + no env override
|
|
→ Zink fell back to llvmpipe (iter8 RED finding).
|
|
|
|
Run 2: iter8-patched lib (robustness2 + nullDescriptor exposed)
|
|
→ Zink loaded ✓, glxgears 250 FPS ✓ (iter8 GREEN partial).
|
|
→ But Brave's GPU process still failed at "GLES3 unsupported".
|
|
|
|
Run 3: iter8-patched lib + --use-gl=disabled + --enable-features=Vulkan
|
|
→ "'--ozone-platform=wayland' is not compatible with Vulkan"
|
|
|
|
Run 4: + --ozone-platform=x11
|
|
→ "GLES3 is unsupported and ES version fallback is disabled" (ANGLE)
|
|
|
|
Run 5: + --use-gl=angle --use-angle=vulkan
|
|
→ "ANGLE Requires a minimum Vulkan device version of 1.1"
|
|
→ PanVk-Bifrost reports apiVersion=1.0.335
|
|
|
|
Run 6: + iter9 patch (has_vk1_1/has_vk1_2 = true) — apiVersion still 1.0
|
|
→ has_vk1_1 only controls extensions, NOT api version
|
|
|
|
Run 7: + MESA_VK_VERSION_OVERRIDE=1.2 — apiVersion=1.2.335 ✓
|
|
→ ANGLE Vulkan init succeeded ✓
|
|
→ But ANGLE still couldn't create GLES 3.0 context (EGL_BAD_ATTRIBUTE)
|
|
likely because PanVk-Bifrost lacks VK_EXT_transform_feedback
|
|
|
|
Run 8: + --use-gl=disabled (bypass ANGLE GL entirely)
|
|
→ 🎯 GPU process boots, Brave runs, page loads, no faults.
|
|
|
|
===== WHAT'S STILL UNKNOWN =====
|
|
|
|
- Visual confirmation: did the Brave window actually render correctly on
|
|
the PineTab2 screen? (Pending operator confirmation.)
|
|
- chrome://gpu state — what does Brave think of GPU capabilities now?
|
|
- Sustained workload: did pages with rich graphics work, or just simple
|
|
text pages?
|
|
- WebGL / WebGL2: blocked by ANGLE-GLES3 gap (no transform_feedback).
|
|
Probably broken; can be tested separately.
|
|
- Did Skia Graphite engage, or just classic Vulkan compositor?
|