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>
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
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.
|
||||
Reference in New Issue
Block a user