Files
panvk-bifrost/mesa-panvk-bifrost/phase8_iter13_close.md
T
marfrit a4e7d8ab90 initial seed: retrofit campaign lineage from local working trees
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>
2026-05-23 05:25:37 +02:00

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_xfb wired into PanVk's NIR pipeline after nir_lower_io.
  • 4 XFB buffer address sysvals + num_vertices sysval threaded through panvk_graphics_sysvals + per-draw set_gfx_sysval upload.
  • CmdBind/Begin/End TransformFeedbackBuffersEXT JM-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_idvs set for XFB-bearing vertex shaders.
  • Cmd-buffer state reset of xfb on BeginCommandBuffer (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 (needs transformFeedbackDraw=true).
  • XFB primitive count query (VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_PRIMITIVES_WRITTEN_EXT, needs transformFeedbackQueries=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