# 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