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>
78 lines
3.6 KiB
Markdown
78 lines
3.6 KiB
Markdown
# 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
|