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_ (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?