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>
4.2 KiB
Phase 8 close — iter13 packaging + 3-point install verification
Result: GREEN. iter13 is published, installable, and verified end-to-end on the consumer host.
The 3-point check (feedback-package-done-means-installable)
| Leg | Status |
|---|---|
| PR merged | ✓ — gitea PR #51 merged into marfrit/marfrit-packages:main as 9ca97374c |
| CI green | ✓ — mesa-panvk-bifrost-aarch64 workflow built clean on the arch-aarch64 runner |
| Artifact published | ✓ — mesa-panvk-bifrost-26.0.6.r3-1-aarch64.pkg.tar.xz at packages.reauktion.de |
| Consumer host install | ✓ — ohm (PineTab2, Mali-G52 r1 MC1) ran sudo pacman -Syu mesa-panvk-bifrost, r2→r3 transition clean |
Smoke test on the upgraded ohm
# pacman state
mesa-panvk-bifrost 26.0.6.r3-1
# system ICD binary fingerprint (iter13 strings present)
$ strings /usr/lib/panvk-bifrost/libvulkan_panfrost.so | grep TransformFeedback
panvk: CmdBeginTransformFeedbackEXT: counter buffers not implemented (transformFeedbackDraw=false); XFB resume will restart at buffer offset 0
vkCmdBindTransformFeedbackBuffersEXT
vkCmdBeginTransformFeedbackEXT
vkCmdEndTransformFeedbackEXT
VK_EXT_transform_feedback
[...]
# vulkaninfo on the system ICD
$ VK_ICD_FILENAMES=/usr/lib/panvk-bifrost/icd.json vulkaninfo | grep -E "TransformFeedback|transformFeedback"
maxTransformFeedbackStreams = 1
maxTransformFeedbackBuffers = 4
VK_EXT_transform_feedback : extension revision 1
transformFeedback = true
# regression probes against the system ICD
$ VK_ICD_FILENAMES=/usr/lib/panvk-bifrost/icd.json ./probe_xfb
[PASS] PanVk-Bifrost transform feedback: 3 vertices captured correctly.
$ VK_ICD_FILENAMES=/usr/lib/panvk-bifrost/icd.json ./probe_xfb_nodraw
[PASS] XFB-capable pipeline survives non-XFB draw — memory-sink active.
Both functional probes pass with the published package (not the developer's hand-built lib in /home/mfritsche/panvk-patched-libs/). That's the full chain: source → patch → CI build → pkg → pacman → runtime.
iter13 close — what shipped vs. what's left
Shipped in iter13:
- VK_EXT_transform_feedback advertised on PAN_ARCH 6/7 (Bifrost) with feature struct + properties block.
nir_io_add_intrinsic_xfb_info+pan_nir_lower_xfbwired into PanVk's NIR pipeline afternir_lower_io.- 4 XFB buffer address sysvals +
num_verticessysval threaded throughpanvk_graphics_sysvals+ per-drawset_gfx_sysvalupload. CmdBind/Begin/End TransformFeedbackBuffersEXTJM-side command handlers (jm/panvk_vX_cmd_xfb.c).- Panfrost-Gallium memory-sink idiom (
PAN_SHADER_OOB_ADDRESS=1<<63) for safe handling of XFB-capable pipelines used in non-XFB draws. no_idvsset for XFB-bearing vertex shaders.- Cmd-buffer state reset of
xfbonBeginCommandBuffer(Phase 5 Janet review fix). - Counter-buffer warning when apps pass them despite
transformFeedbackDraw=false(Phase 5 fix).
Not shipped (deferred to future iters if needed):
vkCmdDrawIndirectByteCountEXT(needstransformFeedbackDraw=true).- XFB primitive count query (
VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_PRIMITIVES_WRITTEN_EXT, needstransformFeedbackQueries=true). - Both are loud-fail (extension/feature not advertised), so apps that need them will see deterministic errors rather than silent corruption.
What iter13 changes for the user
Before iter13 (iter9 state):
- Brave on PineTab2 ran with
--use-gl=disabled— Skia compositor over Vulkan, no GL content. - ANGLE-Vulkan refused to initialize (no VK_EXT_transform_feedback → no GLES3 path).
After iter13 (the user simply runs pacman -Syu + brave-vulkan):
- ANGLE-Vulkan initializes against PanVk-Bifrost.
- WebGL 1, WebGL 2, WebGPU, hardware-accelerated canvas, hardware rasterization — all engage.
- chrome://gpu reports
ANGLE (ARM, Vulkan 1.2.335 (Mali-G52 r1 MC1), panvk)as the renderer.
The "Chromium GPU process boot via Vulkan" charter goal (iter9) gets a major upgrade in iter13: from compositor-only to full ANGLE-on-Vulkan stack. The remaining stretch goal (VAAPI hardware video decode actual engagement) belongs to the iter11 thread and is independent of iter13's transform-feedback scope.
— claude-noether, 2026-05-20