Files
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

78 lines
3.0 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
iter3 fullscreen triangle probe — captured 2026-05-19 on ohm
(PineTab2 v2.0, RK3566, Mali-G52 r1 MC1, Mesa 26.0.6, kernel 7.0.0-danctnix1-6)
Source: panvk-bifrost/iter3/{probe_triangle.c, probe_triangle.vert, probe_triangle.frag, Makefile}
Deployed to: /tmp/panvk-iter3/
Build: clean
===== RUN #1 (no validation layer) =====
$ PAN_I_WANT_A_BROKEN_VULKAN_DRIVER=1 ./probe_triangle
[step] vkCreateInstance (+VK_KHR_get_physical_device_properties2)
[step] vkEnumeratePhysicalDevices
WARNING: panvk is not a conformant Vulkan implementation, testing use only.
[info] gpu='Mali-G52 r1 MC1' apiVersion=1.0.335
[step] vkCreateDevice (+dynamic_rendering chain)
[step] vkCreateImage (64x64 R8G8B8A8_UNORM, COLOR_ATTACHMENT|TRANSFER_SRC)
[info] image memReq size=20480 alignment=4096
[step] vkCreateImageView
[step] vkCreatePipelineLayout + shaders
[step] vkCreateGraphicsPipelines
[step] record (dynamic rendering + draw + copy)
[step] submit + wait (10s)
[step] invalidate + verify
[info] mismatches=0/4096 sentinel=0 cleared_black=0
[PASS] PanVk-Bifrost triangle: all 4096 pixels match.
===== RC=0 =====
===== RUN #2 (VK_LAYER_KHRONOS_validation) =====
[same step trace; no validation warnings/errors]
[info] mismatches=0/4096 sentinel=0 cleared_black=0
[PASS]
===== RC=0 =====
===== STABILITY: 5 consecutive reruns =====
[info] mismatches=0/4096 sentinel=0 cleared_black=0 [PASS]
[info] mismatches=0/4096 sentinel=0 cleared_black=0 [PASS]
[info] mismatches=0/4096 sentinel=0 cleared_black=0 [PASS]
[info] mismatches=0/4096 sentinel=0 cleared_black=0 [PASS]
[info] mismatches=0/4096 sentinel=0 cleared_black=0 [PASS]
7/7 runs PASS, all 4096 pixels per run match the expected gl_FragCoord encoding.
===== KEY OBSERVATIONS =====
1. Device-extension chain enables cleanly with all 5 KHRs:
VK_KHR_multiview
VK_KHR_maintenance2
VK_KHR_create_renderpass2
VK_KHR_depth_stencil_resolve
VK_KHR_dynamic_rendering
plus instance VK_KHR_get_physical_device_properties2 and
VkPhysicalDeviceDynamicRenderingFeaturesKHR.dynamicRendering = VK_TRUE.
2. Image memReq for 64×64 RGBA8 COLOR_ATTACHMENT|TRANSFER_SRC:
size = 20480 (5 pages)
alignment = 4096
Raw pixel data: 64*64*4 = 16384 bytes (4 pages).
The extra page is Mali tile state / AFBC metadata / aux tiling structures
that PanVk allocates alongside the color attachment.
3. Pixel-position encoding round-trips exactly:
(0,0) -> 0xff800000 ✓
(63,0) -> 0xff80003f ✓
(0,63) -> 0xff803f00 ✓
(63,63) -> 0xff803f3f ✓
(32,32) -> 0xff802020 ✓
(all 4096) -> exact match
gl_FragCoord.xy in pixel-center coords (+0.5) → uvec2 floor gives exact
pixel index. Vulkan's top-left origin honored. No off-by-half, no Y-flip.
4. Bifrost tile binning works:
16×16 tile size × 64×64 image = 16 tiles (4×4 grid)
Each tile flushed cleanly; no missing tile, no swapped tiles, no
tile-coverage gap at boundaries.
5. No GPU faults, no MMU faults, no kernel-side panfrost messages
across all 7 runs.