a4e7d8ab90
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>
68 lines
2.8 KiB
Plaintext
68 lines
2.8 KiB
Plaintext
iter4 textured-quad 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/iter4/{probe_texture.c, .vert, .frag, Makefile}
|
|
Deployed to: /tmp/panvk-iter4/
|
|
Build: clean
|
|
|
|
===== RUN #1 (no validation) =====
|
|
[step] vkCreateInstance
|
|
[step] vkEnumeratePhysicalDevices
|
|
WARNING: panvk is not a conformant Vulkan implementation, testing use only.
|
|
[info] gpu='Mali-G52 r1 MC1'
|
|
[step] vkCreateDevice (+dynamic_rendering chain)
|
|
[step] vkCreateImage source texture (4x4 RGBA8 SAMPLED|TRANSFER_DST)
|
|
[info] source texture memReq size=4096 align=4096
|
|
[step] vkCreateSampler (NEAREST, CLAMP_TO_EDGE)
|
|
[step] vkCreateImage color attachment (64x64 RGBA8 COLOR_ATTACHMENT|TRANSFER_SRC)
|
|
[step] vkCreateDescriptorSetLayout (1 COMBINED_IMAGE_SAMPLER)
|
|
[step] vkCreatePipelineLayout + shaders
|
|
[step] vkCreateGraphicsPipelines
|
|
[step] record cmd buffer (tex upload + draw + readback)
|
|
[step] submit + wait (10s)
|
|
[step] invalidate + verify
|
|
[info] mismatches=0/4096 sentinel=0 black=0
|
|
[PASS] PanVk-Bifrost textured quad: all 4096 pixels match.
|
|
RC=0
|
|
|
|
===== RUN #2 (VK_LAYER_KHRONOS_validation) =====
|
|
[no validation warnings/errors]
|
|
[PASS]
|
|
|
|
===== STABILITY: 5 reruns =====
|
|
mismatches=0/4096 sentinel=0 black=0 [PASS]
|
|
mismatches=0/4096 sentinel=0 black=0 [PASS]
|
|
mismatches=0/4096 sentinel=0 black=0 [PASS]
|
|
mismatches=0/4096 sentinel=0 black=0 [PASS]
|
|
mismatches=0/4096 sentinel=0 black=0 [PASS]
|
|
|
|
7/7 runs PASS, all 4096 pixels per run match expected modulo-4 tile-repeated pattern.
|
|
|
|
===== KEY OBSERVATIONS =====
|
|
|
|
1. Source texture (4x4 RGBA8 SAMPLED|TRANSFER_DST):
|
|
memReq size = 4096 (one page)
|
|
alignment = 4096
|
|
Just a single Mali page — but 16 logical bytes of pixel data live inside.
|
|
|
|
2. The Bifrost descriptor model (PANVK_BIFROST_DESC_TABLE_COUNT etc.) handles
|
|
COMBINED_IMAGE_SAMPLER bindings cleanly for the fragment shader stage:
|
|
- VkDescriptorSetLayout creation
|
|
- VkDescriptorPool + AllocateDescriptorSets
|
|
- vkUpdateDescriptorSets with image + sampler
|
|
- vkCmdBindDescriptorSets at graphics bind point
|
|
- shader-side texelFetch resolves to correct GPU memory access
|
|
|
|
3. Texture upload path (vkCmdCopyBufferToImage):
|
|
- Layout transition UNDEFINED -> TRANSFER_DST_OPTIMAL
|
|
- Linear staging buffer -> optimal-tiled image (Bifrost tile encode)
|
|
- Layout transition TRANSFER_DST_OPTIMAL -> SHADER_READ_ONLY_OPTIMAL
|
|
All round-trip exactly: texels written via staging buffer are read back
|
|
exactly via texelFetch + render + image-to-buffer-copy.
|
|
|
|
4. No GPU faults, no MMU faults, no validation-layer warnings.
|
|
|
|
The headline iter4 hypothesis (Bifrost descriptor model fails on first
|
|
sampled-image use) did NOT materialize. PanVk-Bifrost's descriptor handling
|
|
works for the minimal sampled-texture case.
|