From: claude-noether (on behalf of mfritsche) Date: 2026-05-19 Subject: panvk: expose VK_KHR/EXT_robustness2 + nullDescriptor on Bifrost (PAN_ARCH 6/7) Without this, Mesa's Zink driver refuses to use PanVk-Bifrost as its Vulkan backend, falling back silently to llvmpipe (software rasterizer) for all GL-via-Zink on Bifrost SBCs. That defeats the entire purpose of having a Vulkan driver on Bifrost — GL acceleration via Zink is the most natural near-term consumer. panvk_vX_nir_lower_descriptors.c:1309 and panvk_vX_shader.c:1355 already plumb dev->vk.enabled_features.nullDescriptor arch-agnostically — the gate at panvk_vX_physical_device.c was set conservatively when Bifrost was unmaintained, not because of hardware incapability. iter1–7 of the panvk-bifrost campaign proved fundamental driver functions on Mali-G52 r1 MC1 (PAN_ARCH=7). This patch is the iter8 follow-up. robustBufferAccess2 and robustImageAccess2 are NOT flipped — they're independent rb2 features Zink doesn't require, gated differently (robustBufferAccess2 = PAN_ARCH >= 11, robustImageAccess2 = false), and out of scope for iter8. --- src/panfrost/vulkan/panvk_vX_physical_device.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/panfrost/vulkan/panvk_vX_physical_device.c b/src/panfrost/vulkan/panvk_vX_physical_device.c --- a/src/panfrost/vulkan/panvk_vX_physical_device.c +++ b/src/panfrost/vulkan/panvk_vX_physical_device.c @@ -91,7 +91,7 @@ get_device_extensions(const struct panvk_physical_device *device, .KHR_pipeline_binary = true, .KHR_pipeline_executable_properties = true, .KHR_pipeline_library = true, - .KHR_robustness2 = PAN_ARCH >= 10, + .KHR_robustness2 = true, .KHR_sampler_mirror_clamp_to_edge = true, .KHR_sampler_ycbcr_conversion = true, .KHR_separate_depth_stencil_layouts = true, @@ -168,7 +168,7 @@ get_device_extensions(const struct panvk_physical_device *device, .EXT_queue_family_foreign = true, .EXT_robustness = pan_arch(device->kmod.dev->props.gpu_id) >= 9, .EXT_image_robustness = true, - .EXT_robustness2 = PAN_ARCH >= 10, + .EXT_robustness2 = true, .EXT_sampler_filter_minmax = PAN_ARCH >= 10, .EXT_scalar_block_layout = true, .EXT_separate_stencil_usage = true, @@ -493,7 +493,7 @@ get_device_features(const struct panvk_physical_device *device, /* VK_KHR_robustness2 */ .robustBufferAccess2 = PAN_ARCH >= 11, .robustImageAccess2 = false, - .nullDescriptor = PAN_ARCH >= 10, + .nullDescriptor = true, /* VK_KHR_shader_clock */ .shaderSubgroupClock = device->kmod.dev->props.gpu_can_query_timestamp,