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:
2026-05-23 05:25:37 +02:00
parent 430d0da278
commit a4e7d8ab90
124 changed files with 22551 additions and 1 deletions
@@ -0,0 +1,87 @@
iter8 Zink-on-PanVk-Bifrost RED finding — captured 2026-05-19 on ohm
(PineTab2 v2.0, RK3566, Mali-G52 r1 MC1, Mesa 26.0.6, kernel 7.0.0-danctnix1-6)
===== eglinfo with Zink + PanVk attempted =====
$ sudo -u mfritsche XDG_RUNTIME_DIR=/run/user/1001 WAYLAND_DISPLAY=wayland-0 \
MESA_LOADER_DRIVER_OVERRIDE=zink PAN_I_WANT_A_BROKEN_VULKAN_DRIVER=1 eglinfo
WARNING: panvk is not a conformant Vulkan implementation, testing use only.
MESA: error: Zink requires the nullDescriptor feature of KHR/EXT robustness2.
WARNING: panvk is not a conformant Vulkan implementation, testing use only.
MESA: error: Zink requires the nullDescriptor feature of KHR/EXT robustness2.
...
OpenGL core profile vendor: Mesa
OpenGL core profile renderer: llvmpipe (LLVM 22.1.3, 128 bits) ← FALLBACK
OpenGL core profile version: 4.5 (Core Profile) Mesa 26.0.6-arch1.1
RC=0 (but Zink did NOT load — fell back to llvmpipe SW rasterizer)
===== PanVk-Bifrost vulkaninfo confirms robustness2 NOT in extension list =====
$ PAN_I_WANT_A_BROKEN_VULKAN_DRIVER=1 vulkaninfo | grep -iE "robust|nullDescriptor"
VkPhysicalDevicePipelineRobustnessPropertiesEXT: present
defaultRobustnessStorageBuffers = ROBUST_BUFFER_ACCESS
defaultRobustnessUniformBuffers = ROBUST_BUFFER_ACCESS
defaultRobustnessVertexInputs = ROBUST_BUFFER_ACCESS
defaultRobustnessImages = ROBUST_IMAGE_ACCESS
Device extensions present:
VK_EXT_image_robustness (different extension)
VK_EXT_pipeline_robustness (different extension)
VkPhysicalDeviceImageRobustnessFeaturesEXT.robustImageAccess = true
VkPhysicalDevicePipelineRobustnessFeaturesEXT.pipelineRobustness = true
NOT present:
VK_EXT_robustness2 ← what Zink wants
VK_KHR_robustness2 ← what Zink wants
VkPhysicalDeviceRobustness2FeaturesEXT.nullDescriptor
===== Mesa source: the gate =====
File: ~/src/mesa-ref/mesa/src/panfrost/vulkan/panvk_vX_physical_device.c
line 94: .KHR_robustness2 = PAN_ARCH >= 10,
line 194: .EXT_robustness2 = PAN_ARCH >= 10,
line 590: .nullDescriptor = PAN_ARCH >= 10,
Bifrost is PAN_ARCH 6 (G31/G52/G72) or 7 (G52 r1/G76). Both fall OUTSIDE
the `>= 10` gate. Mali-G52 r1 on ohm reports as PAN_ARCH=7 (per iter1 driver
log: arch=7 in the panvk_physical_device.c switch statement).
Valhall (PAN_ARCH=9), Bifrost, and the experimental v14 fifthgen are all
denied robustness2 with the same hardcoded gate.
===== Zink's hard requirement =====
File: ~/src/mesa-ref/mesa/src/gallium/drivers/zink/zink_screen.c:3488-3489
if (!screen->info.rb2_feats.nullDescriptor) {
mesa_loge("Zink requires the nullDescriptor feature of KHR/EXT robustness2.");
...
}
No ZINK_DEBUG flag in zink_screen.c:97-127 disables this check. The feature
is a hard prerequisite for Zink.
===== NIR side: the feature already plumbs through =====
File: ~/src/mesa-ref/mesa/src/panfrost/vulkan/panvk_vX_nir_lower_descriptors.c:1309
.null_descriptor_support = dev->vk.enabled_features.nullDescriptor,
File: ~/src/mesa-ref/mesa/src/panfrost/vulkan/panvk_vX_shader.c:1355
.robust_descriptors = dev->vk.enabled_features.nullDescriptor,
The NIR lowering code already reads `enabled_features.nullDescriptor` —
i.e., the plumbing exists per-arch. The gate at line 590 is what blocks
the feature from being *enableable* on Bifrost; the underlying lowering
machinery is already there and would activate if the feature were exposed.
That doesn't guarantee Bifrost's hardware can correctly handle a null
descriptor read (the gate may exist *because* Bifrost can't), but iter4
proved descriptor handling works for valid cases — and "null descriptor"
mostly means "shader accesses an unbound binding cleanly without GPU fault."
===== Bigger picture =====
This is the campaign's first real finding. PanVk-Bifrost is functionally
solid for everything iter17 tested, but Zink (and presumably many other
Vulkan apps that opt into modern descriptor features) requires extensions
that PanVk-Bifrost gates out.
For the TuxRacer-via-Zink path, this MUST be fixed before iter9 makes sense.