Files
panvk-bifrost/mesa-panvk-bifrost/phase0_evidence/iter5_vbo_ubo_run.txt
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

74 lines
2.8 KiB
Plaintext

iter5 vertex+UBO 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/iter5/{probe_vbo_ubo.c, .vert, .frag, Makefile}
Deployed to: /tmp/panvk-iter5/
===== RUN #1 (baseline) =====
[step] vkCreateInstance
WARNING: panvk is not a conformant Vulkan implementation, testing use only.
[info] gpu='Mali-G52 r1 MC1'
[step] vkCreateDevice
[step] vkCreateBuffer vertex buffer
[step] vkCreateBuffer UBO
[step] vkCreateDescriptorSetLayout (UBO @ vertex)
[step] vkCreatePipelineLayout + shaders
[step] vkCreateGraphicsPipelines
[step] record cmd buffer
[step] submit + wait
[step] verify
[info] center (32,28) = 0xff5d564c (R=4c G=56 B=5d)
[info] TL=0x00000000 TR=0x00000000
[info] covered (non-clear) pixels = 338 / 4096
[PASS]
===== RUN #2 (VK_LAYER_KHRONOS_validation) =====
[no validation warnings]
covered = 338 [PASS]
===== STABILITY: 5 reruns =====
covered = 338 [PASS] x5
7/7 PASS after coverage-range fix.
===== INITIAL FAILURE NOTE =====
First run reported "coverage out of range: 338 (want 800..1600)" — that was a
verification-side arithmetic error on my (claude-noether's) part, not a driver
issue. Triangle area = 0.5 * 0.8 * 0.8 = 0.32 sq units in NDC; viewport area
is 4 sq units, so 8% coverage = ~328 pixels. The driver produced exactly 338,
which matches the expected coverage within edge-rule tolerance.
Substantive PASS criteria (interpolated center color, clear corners) were
satisfied on the first run; only the loose coverage-range check needed
calibration. Fixed in-tree at `iter5/probe_vbo_ubo.c`.
===== KEY OBSERVATIONS =====
1. Vertex input binding works:
binding 0: stride 32, INPUT_RATE_VERTEX
attribute 0: R32G32_SFLOAT, offset 0 (pos)
attribute 1: R32G32B32_SFLOAT, offset 16 (color)
GPU correctly fetched both attributes from the bound vertex buffer.
2. UBO binding at vertex stage works:
mat4 transform with scale 0.8 in x/y was correctly applied.
Triangle vertices at NDC (-0.5,-0.5)/(0.5,-0.5)/(0,0.5) scaled to
(-0.4,-0.4)/(0.4,-0.4)/(0,0.4) — visible from the 338-pixel coverage
(matches 0.8-scaled area, NOT unscaled 0.5-scaled area which would be
~500 pixels).
3. Varying interpolation works:
center pixel at (32, 28) has R=0x4c G=0x56 B=0x5d. All three vertex
colors (red/green/blue) contributed via barycentric interpolation —
none of the channels are zero, none are saturated, all are in a
reasonable middle-of-range value.
4. Bifrost vertex-side descriptor model handles UBO + vertex-stage shader
correctly (the headline hypothesis for this iter — that vertex-stage
descriptor binding would fail on Bifrost — did not materialize).
5. Deterministic across runs: identical 338 covered pixels each time.
No GPU faults, no validation warnings, all 7 runs identical.