489d6e3862
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>
48 lines
2.1 KiB
Diff
48 lines
2.1 KiB
Diff
From: claude-noether (on behalf of mfritsche)
|
||
Date: 2026-05-20
|
||
Subject: panvk: expose Vulkan 1.1 + 1.2 on Bifrost (PAN_ARCH 6/7)
|
||
|
||
ANGLE (Chromium's GL stack) requires apiVersion >= 1.1 to initialize. Without
|
||
this, Brave / Chromium's GPU process fails at GL info collection:
|
||
|
||
vk_renderer.cpp:2659 (initialize): ANGLE Requires a minimum Vulkan device
|
||
version of 1.1
|
||
Display::initialize error 0: Internal Vulkan error (-9): The requested
|
||
version of Vulkan is not supported by the driver
|
||
|
||
Stack-up with iter8's robustness2 patch enables ANGLE → PanVk-Bifrost →
|
||
Skia (via --enable-features=Vulkan) on Bifrost SBCs.
|
||
|
||
PanVk-Bifrost already supports the bulk of 1.1-promoted features as extensions
|
||
(multiview, maintenance1-3, descriptor update template, 16-bit storage,
|
||
descriptor update template, sampler ycbcr, variable pointers, etc. — all
|
||
visible in iter0 vulkaninfo). The version bump primarily bundles them.
|
||
|
||
Risk: Vulkan 1.1 has features beyond what iter1–7 exercised (protected memory,
|
||
full subgroup ops). Specific app failures will be characterizable.
|
||
|
||
1.2 is also flipped — Brave's Vulkan path may want descriptor indexing,
|
||
buffer device address, etc. (all listed in iter0 vulkaninfo as supported
|
||
extensions, just gated as 1.0-with-extensions, not 1.2-core).
|
||
|
||
---
|
||
src/panfrost/vulkan/panvk_vX_physical_device.c | 4 ++--
|
||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||
|
||
diff --git a/src/panfrost/vulkan/panvk_vX_physical_device.c b/src/panfrost/vulkan/panvk_vX_physical_device.c
|
||
--- a/src/panfrost/vulkan/panvk_vX_physical_device.c
|
||
+++ b/src/panfrost/vulkan/panvk_vX_physical_device.c
|
||
@@ -38,8 +38,8 @@ get_device_extensions(const struct panvk_physical_device *device,
|
||
struct vk_device_extension_table *ext)
|
||
{
|
||
*ext = (struct vk_device_extension_table){
|
||
- .KHR_8bit_storage = true,
|
||
- .KHR_16bit_storage = true,
|
||
- bool has_vk1_1 = PAN_ARCH >= 10;
|
||
- bool has_vk1_2 = PAN_ARCH >= 10;
|
||
+ .KHR_8bit_storage = true,
|
||
+ .KHR_16bit_storage = true,
|
||
+ bool has_vk1_1 = true;
|
||
+ bool has_vk1_2 = true;
|
||
*ext = (struct vk_device_extension_table){
|