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?
