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

88 lines
4.0 KiB
Plaintext
Raw 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.
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.