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

60 lines
3.2 KiB
Markdown
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.
# Phase 0 — substrate for iter5
Opened **2026-05-19** after [iter4 close GREEN](phase8_iteration4_close.md).
## Locked research question — iter5
> **Render a non-fullscreen triangle into a 64×64 R8G8B8A8_UNORM attachment via a vertex buffer + UBO. Vertex buffer: 3 vertices, each (pos vec2 + color vec3) = 20 bytes (with 8-byte align padding → 32-byte stride). UBO: single mat4 transform (scaling 0.8 in x/y, identity otherwise). Triangle in scaled-NDC: v0(-0.5,-0.5) red, v1(0.5,-0.5) green, v2(0,0.5) blue. Fragment shader outputs interpolated color (mixed RGB at centroid).**
>
> **Verify:**
> 1. **Centroid pixel** (32, 28) has all of R, G, B > 0x10 (interpolated, non-black).
> 2. **Top-left pixel** (0, 0) is exactly 0x00000000 (clear, outside triangle).
> 3. **Top-right pixel** (63, 0) is exactly 0x00000000 (clear, outside triangle).
> 4. **Covered pixel count** (non-clear pixels) ∈ [800, 1600] (triangle area ≈ 1310 pixels).
>
> If GREEN: iter6 stress-tests with a multi-draw scene or a Zink-on-PanVk smoke. If RED: characterize vertex input / UBO descriptor / NIR varying interpolation.
## Why this shape
iter4 closed the descriptor model for fragment-stage texture binding. iter5 adds **vertex-stage descriptor binding** + **vertex input** (the vertex-side counterpart). What's new:
- Vertex buffer (`VK_BUFFER_USAGE_VERTEX_BUFFER_BIT`) + `vkCmdBindVertexBuffers`
- `VkPipelineVertexInputStateCreateInfo` with non-empty bindings + attributes (pos location 0, color location 1)
- UBO (`VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER`) bound to vertex stage
- Vertex shader reads attribute layouts + UBO via descriptor
- Interpolated varying (color) from vertex → fragment
## Hypothesis space
1. **Vertex input bindings on Bifrost.** Bifrost's attribute descriptor model has been a divergence point per `panvk_vX_cmd_draw.c`'s `PANVK_BIFROST_DESC` references. First time we exercise non-zero `VkPipelineVertexInputStateCreateInfo`.
2. **UBO descriptor binding for vertex stage.** Different from iter4's fragment-stage COMBINED_IMAGE_SAMPLER.
3. **Vertex-stage descriptor lowering in NIR** (Bifrost-specific code paths).
4. **Varying interpolation** (color) from vertex output → fragment input.
5. **UBO data fetch** — does the GPU actually read the matrix from the bound buffer correctly?
6. **Non-fullscreen rasterization** — partial coverage, edge pixels, anti-aliased-or-not boundaries on Bifrost's tile binner.
## In-scope (LOCKED 2026-05-19 for iter5)
- 1 vertex buffer (3 verts), interleaved pos+color, 32-byte stride.
- 1 UBO (64 bytes, mat4).
- 1 descriptor set with 1 UBO binding bound to vertex stage.
- Triangle in NDC, scaled by 0.8 via UBO matrix.
- 4-point pixel-level verification + range-bound coverage count.
## Out-of-scope (LOCKED 2026-05-19 for iter5)
- Index buffer / `vkCmdDrawIndexed`.
- Multiple draws.
- Push constants.
- Texture sampling (iter4 already covered).
- Depth / stencil.
- Blending (clear=opaque-black, triangle has α=1).
- MSAA.
- Compressed formats.
- Mipmaps.
- Real workloads (vkcube/vkmark/Zink) — that's iter6+.
## Reference
- Prior closes: [iter1](phase8_iteration1_close.md), [iter2](phase8_iteration2_close.md), [iter3](phase8_iteration3_close.md), [iter4](phase8_iteration4_close.md).