mesa-panvk-bifrost: new package — Vulkan-compositor Brave for Bifrost SBCs
iter9 of the panvk-bifrost campaign — operator-confirmed Vulkan output
on PineTab2 (Mali-G52 r1 MC1) 2026-05-20.
Patches Mesa 26.0.6's PanVk Vulkan driver:
- VK_KHR/EXT_robustness2 + nullDescriptor exposed for PAN_ARCH 6/7
- has_vk1_1 / has_vk1_2 = true on Bifrost
Patches applied via sed in PKGBUILD prepare() (cleaner than maintaining
a Mesa fork for two two-line tweaks; upstream context drifts between
Mesa releases would make a literal .patch brittle).
Co-installs at /usr/lib/panvk-bifrost/ — stock mesa untouched. Stock
libvulkan_panfrost.so and its ICD JSON keep working for everyone not
opting into the patched driver.
Ships /usr/bin/brave-vulkan that wires up:
VK_ICD_FILENAMES=/usr/lib/panvk-bifrost/icd.json
PAN_I_WANT_A_BROKEN_VULKAN_DRIVER=1
MESA_VK_VERSION_OVERRIDE=1.2 # ANGLE needs apiVersion>=1.1; the
# has_vk1_x flags don't move it, so
# the env-var override carries that
brave --use-gl=disabled --enable-features=Vulkan --use-vulkan=native
--ozone-platform=x11 --no-sandbox --disable-gpu-sandbox
--ignore-gpu-blocklist "$@"
Side-steps the stock "GLES3 is unsupported / GPU process exits" failure
documented in panvk-bifrost/README's "Consumer-side benefit" section.
Known limitation: WebGL/WebGL2 in-page won't work — ANGLE needs GLES3
which needs VK_EXT_transform_feedback, which PanVk-Bifrost doesn't
currently support. Browser chrome + standard page rendering work fine.
Gitea Actions job mesa-panvk-bifrost-aarch64 added to build.yml,
patterned on libva-v4l2-request-fourier-aarch64. Mesa build is slow
(~30-60min on actrunner-aarch64). Standalone (no needs:),
continue-on-error so it doesn't block other jobs.
Campaign artifacts: ~/src/panvk-bifrost/{README.md, phase8_iteration9_close.md,
phase0_evidence/iter9_brave_vulkan_breakthrough.txt}.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
# mesa-panvk-bifrost
|
||||
|
||||
Patched Mesa `libvulkan_panfrost.so` exposing Bifrost-gen Mali GPUs
|
||||
(Mali-G31/G52/G72/G76, PAN_ARCH 6/7) to Chromium-family browsers'
|
||||
Vulkan compositor.
|
||||
|
||||
Result of the **panvk-bifrost** campaign ([`~/src/panvk-bifrost/`](../../../panvk-bifrost/)),
|
||||
iter9 close 2026-05-20 (technical milestone — operator-confirmed Brave
|
||||
window) followed by this package as the actual delivery.
|
||||
|
||||
## What it solves
|
||||
|
||||
Stock Chromium / Brave on Bifrost SBCs (PineTab2, etc.) currently dies
|
||||
at GL bindings init:
|
||||
|
||||
```
|
||||
ERROR: ui/gl/gl_context_egl.cc:120 GLES3 is unsupported and ES version fallback is disabled
|
||||
ERROR: ui/gl/init/gl_factory.cc:111 Requested GL implementation not found
|
||||
ERROR: components/viz/service/main/viz_main_impl.cc:189 Exiting GPU process due to errors during initialization
|
||||
```
|
||||
|
||||
This package makes Brave's **Vulkan compositor path** work on Bifrost,
|
||||
side-stepping the failing GL stack. Browser chrome and standard page
|
||||
rendering work.
|
||||
|
||||
## Known limitations (not addressed)
|
||||
|
||||
- **WebGL / WebGL2** in-page: blocked. ANGLE needs `VK_EXT_transform_feedback`
|
||||
to expose GLES3 contexts; PanVk-Bifrost doesn't currently support that.
|
||||
Sites using WebGL will degrade or refuse.
|
||||
- **VAAPI hardware video decode**: unrelated to this package — see the
|
||||
`libva-v4l2-request-fourier` package for that path.
|
||||
|
||||
## Install
|
||||
|
||||
```sh
|
||||
# Ensure [marfrit] is in /etc/pacman.conf, then:
|
||||
sudo pacman -Sy mesa-panvk-bifrost
|
||||
```
|
||||
|
||||
## Use
|
||||
|
||||
```sh
|
||||
brave-vulkan # launches Brave with Vulkan
|
||||
brave-vulkan https://www.example.com
|
||||
brave-vulkan --your-flags-here # extra args passed through
|
||||
```
|
||||
|
||||
The launcher sets:
|
||||
|
||||
- `VK_ICD_FILENAMES=/usr/lib/panvk-bifrost/icd.json` (the patched driver)
|
||||
- `PAN_I_WANT_A_BROKEN_VULKAN_DRIVER=1` (Mesa upstream gate)
|
||||
- `MESA_VK_VERSION_OVERRIDE=1.2` (apiVersion bump for ANGLE)
|
||||
- Brave flags: `--use-gl=disabled --enable-features=Vulkan --use-vulkan=native --ozone-platform=x11 --no-sandbox --disable-gpu-sandbox --ignore-gpu-blocklist`
|
||||
|
||||
## What's in the package
|
||||
|
||||
- `/usr/lib/panvk-bifrost/libvulkan_panfrost.so` — patched Mesa Vulkan driver (Mesa 26.0.6 + 2 sed-applied patches)
|
||||
- `/usr/lib/panvk-bifrost/icd.json` — Vulkan ICD JSON pointing at the patched .so (NOT auto-loaded; only via `VK_ICD_FILENAMES`)
|
||||
- `/usr/bin/brave-vulkan` — launcher script
|
||||
|
||||
System Mesa is untouched. The stock `/usr/lib/libvulkan_panfrost.so` and
|
||||
`/usr/share/vulkan/icd.d/panfrost_icd.json` continue to work for any
|
||||
other Vulkan app.
|
||||
|
||||
## Co-existence
|
||||
|
||||
Both stock Mesa and this package can be installed. Stock Vulkan apps
|
||||
(`vulkaninfo`, `vkcube`, etc.) use the stock driver by default. Only
|
||||
apps started via `brave-vulkan` (or with `VK_ICD_FILENAMES` manually
|
||||
set to our path) use the patched driver.
|
||||
|
||||
## Campaign close criterion
|
||||
|
||||
Per [`feedback_package_done_means_installable`](file:///home/mfritsche/.claude/projects/-home-mfritsche-src/memory/feedback_package_done_means_installable.md)
|
||||
three-point check:
|
||||
|
||||
1. PR merged to `marfrit-packages`
|
||||
2. CI green AND `packages.reauktion.de/arch/aarch64/mesa-panvk-bifrost-*.pkg.tar.zst` exists
|
||||
3. `pacman -Ss mesa-panvk-bifrost` on a fresh consumer host (e.g. ohm
|
||||
after `pacman -Syu` from clean state) returns the package + brave-vulkan launches
|
||||
|
||||
When all three pass, panvk-bifrost iter9 closes.
|
||||
Reference in New Issue
Block a user