# Phase 6 close — iter13 integration test (ANGLE-Vulkan on PanVk) **Result: GREEN.** iter13's core deliverable verified end-to-end via Brave's chrome://gpu + WebGL contexts. ## The conclusive signal WebGL2 (which requires GLES3 underneath, which requires VK_EXT_transform_feedback) creates cleanly: ``` { "ok": true, "version": "WebGL 2.0 (OpenGL ES 3.0 Chromium)", "shading": "WebGL GLSL ES 3.00 (OpenGL ES GLSL ES 3.0 Chromium)", "unmasked": { "vendor": "Google Inc. (ARM)", "renderer": "ANGLE (ARM, Vulkan 1.2.335 (Mali-G52 r1 MC1 (0x74021000)), panvk)" } } ``` The renderer string is an explicit ANGLE-internal identifier: **ANGLE, on Vulkan 1.2.335, talking to a Mali-G52 r1 MC1 driven by panvk**. This is the chain that iter12-γ hit a wall on ("VK_EXT_transform_feedback missing"). iter13 implements that extension, so the wall falls. ## chrome://gpu — Graphics Feature Status | Feature | Status | |---|---| | Canvas | Hardware accelerated | | Compositing | Hardware accelerated | | Multiple Raster Threads | Enabled | | OpenGL | Enabled | | Rasterization | Hardware accelerated | | Video Decode | Hardware accelerated (chrome://gpu — see caveat) | | Video Encode | Software only | | Vulkan | Enabled | | WebGL | Hardware accelerated | | WebGPU | Hardware accelerated | All hardware-paths green. Even WebGPU works. ## Caveat on Video Decode chrome://gpu reports "Hardware accelerated" but as documented in iter11, this report can be misleading. Empirical check (lsof /dev/video1) shows nothing holding the v4l2 device during initial playback, and GPU process CPU is in the 9% range — consistent with light compositor work, not 75% software decode. This is *inconclusive* about VAAPI engagement; the iter11 thread (Brave + libva-v4l2-request-fourier) remains the place to land that verification. Out of iter13 scope. ## Test methodology 1. Built mesa-26.0.6 with iter13 patches on ohm (Phase 4) — already linked clean. 2. Phase 5 review-driven fixes applied + rebuilt — confirmed via probe_xfb_nodraw that XFB-capable pipelines used in non-XFB draws survive without DEVICE_LOST (memory-sink idiom from Panfrost-Gallium). 3. Launched Brave 148.1.90.122 on ohm with the iter13 launcher script: ``` brave --use-gl=angle --use-angle=vulkan --enable-features=Vulkan --use-vulkan=native --ozone-platform=x11 --no-sandbox --disable-gpu-sandbox --ignore-gpu-blocklist --remote-debugging-port=9222 ``` With `VK_ICD_FILENAMES=/home/mfritsche/panvk-patched-libs/panfrost_icd_patched.json` and `PAN_I_WANT_A_BROKEN_VULKAN_DRIVER=1` and `MESA_VK_VERSION_OVERRIDE=1.2`. 4. Connected to the Chrome DevTools Protocol via WebSocket (pure-stdlib Python implementation — `/tmp/cdp_query.py`). 5. Created WebGL and WebGL2 contexts on an about:blank tab, queried renderer info via WEBGL_debug_renderer_info. 6. Scraped chrome://gpu page text deep through shadow DOM, mapped feature labels to status values. All assertions hold against the live Brave session. ## What iter9 vs iter13 enable | Capability | iter9 (without XFB) | iter13 (with XFB) | |---|---|---| | Chromium GPU process boot | ✓ (Skia compositor only) | ✓ (Skia + ANGLE) | | Vulkan compositor | ✓ | ✓ | | WebGL1 / GLES2 via ANGLE | ✗ (--use-gl=disabled) | ✓ | | WebGL2 / GLES3 via ANGLE | ✗ (--use-gl=disabled) | ✓ | | WebGPU | ✗ | ✓ | | HTML5 canvas HW accel | ✗ | ✓ | | Hardware rasterization | ✗ | ✓ | iter13 takes Brave on PineTab2 from "Vulkan compositor only" (iter9) to "fully GPU-accelerated browser stack". ## Phase 8 next Update mesa-panvk-bifrost PKGBUILD with the iter13 patches, bump pkgrel, push, CI green, install on a fresh consumer host. — claude-noether, 2026-05-20