From 67ded3d07939865edb581f23cbb0b82056dcdefb Mon Sep 17 00:00:00 2001 From: Christian Gmeiner Date: Wed, 10 Jun 2026 09:36:03 +0200 Subject: [PATCH] panvk: Advertise VK_KHR_compute_shader_derivatives Compute derivatives can use the same lane based path as fragment shaders because a workgroup's invocations map to subgroup lanes in order. This gives correct derivative quads on Valhall. Advertise the extension for PAN_ARCH >= 9 with both derivative groups. Signed-off-by: Christian Gmeiner Reviewed-by: Jakob Sinclair Part-of: --- docs/features.txt | 2 +- docs/relnotes/new_features.txt | 1 + src/panfrost/vulkan/panvk_vX_physical_device.c | 8 ++++++++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/docs/features.txt b/docs/features.txt index a22962b1e5f..655f36690e3 100644 --- a/docs/features.txt +++ b/docs/features.txt @@ -540,7 +540,7 @@ Khronos extensions that are not part of any Vulkan version: VK_KHR_acceleration_structure DONE (anv/gfx12.5+, lvp, radv/gfx10.3+, tu/a740+, vn) VK_KHR_calibrated_timestamps DONE (anv, hk, kk, nvk, panvk/v10+, radv, tu/a750+, vn) - VK_KHR_compute_shader_derivatives DONE (anv, lvp, nvk, radv, tu, vn) + VK_KHR_compute_shader_derivatives DONE (anv, lvp, nvk, panvk/v9+, radv, tu, vn) VK_KHR_cooperative_matrix DONE (anv, lvp, nvk/Turing+, radv/gfx11+, vn) VK_KHR_copy_memory_indirect DONE (anv, lvp, nvk, radv/gfx8+) VK_KHR_deferred_host_operations DONE (anv, hasvk, lvp, radv, tu, vn) diff --git a/docs/relnotes/new_features.txt b/docs/relnotes/new_features.txt index f36103b2661..e6bf4e678db 100644 --- a/docs/relnotes/new_features.txt +++ b/docs/relnotes/new_features.txt @@ -27,3 +27,4 @@ VK_GOOGLE_display_timing for KHR_display on anv, panvk, pvr, radv, tu, v3dv VK_KHR_shader_abort on RADV VK_KHR_shader_fma on panvk VK_NV_shader_atomic_float16_vector on NVK +VK_KHR_compute_shader_derivatives on panvk diff --git a/src/panfrost/vulkan/panvk_vX_physical_device.c b/src/panfrost/vulkan/panvk_vX_physical_device.c index 63048c9bf2c..e57090fd979 100644 --- a/src/panfrost/vulkan/panvk_vX_physical_device.c +++ b/src/panfrost/vulkan/panvk_vX_physical_device.c @@ -51,6 +51,7 @@ panvk_per_arch(get_physical_device_extensions)( .KHR_buffer_device_address = true, .KHR_calibrated_timestamps = device->kmod.dev->props.gpu_can_query_timestamp, + .KHR_compute_shader_derivatives = PAN_ARCH >= 9, .KHR_copy_commands2 = true, .KHR_create_renderpass2 = true, .KHR_dedicated_allocation = true, @@ -464,6 +465,10 @@ panvk_per_arch(get_physical_device_features)( /* VK_KHR_depth_clamp_zero_one */ .depthClampZeroOne = true, + /* VK_KHR_compute_shader_derivatives */ + .computeDerivativeGroupQuads = PAN_ARCH >= 9, + .computeDerivativeGroupLinear = PAN_ARCH >= 9, + /* VK_KHR_maintenance7 */ .maintenance7 = true, @@ -1170,6 +1175,9 @@ panvk_per_arch(get_physical_device_properties)( .pipelineBinaryPrecompiledInternalCache = has_disk_cache, .pipelineBinaryCompressedData = false, + /* VK_KHR_compute_shader_derivatives */ + .meshAndTaskShaderDerivatives = false, + /* VK_KHR_robustness2 */ .robustStorageBufferAccessSizeAlignment = 4, .robustUniformBufferAccessSizeAlignment = 16,