From 840952cc35c5daed718cbe67658371b2305f1daf Mon Sep 17 00:00:00 2001 From: squidbus <1249084-squidbus@users.noreply.gitlab.freedesktop.org> Date: Sun, 17 May 2026 18:04:18 -0700 Subject: [PATCH] kk: Enable maintenance extensions through VK_KHR_maintenance10 Full CTS tests pass. Reviewed-by: Aitor Camacho Part-of: --- docs/features.txt | 12 ++-- src/kosmickrisp/vulkan/kk_physical_device.c | 79 +++++++++++++++++++-- 2 files changed, 78 insertions(+), 13 deletions(-) diff --git a/docs/features.txt b/docs/features.txt index 032d37b53c3..de68f4ca7e6 100644 --- a/docs/features.txt +++ b/docs/features.txt @@ -524,8 +524,8 @@ Vulkan 1.4 -- all DONE: anv, hk, lvp, nvk, panvk/v10+, radv/gfx8+, tu/a7xx+, vn VK_KHR_index_type_uint8 DONE (anv, kk, lvp, nvk, panvk, pvr, radv, tu, v3dv, vn) VK_KHR_line_rasterization DONE (anv, kk, lvp, nvk, panvk, pvr, radv, tu, v3dv, vn) VK_KHR_load_store_op_none DONE (anv, kk, lvp, nvk, panvk, radv, tu, v3dv, vn) - VK_KHR_maintenance5 DONE (anv, hasvk, lvp, nvk, panvk/v10+, pvr, radv, tu, v3dv, vn) - VK_KHR_maintenance6 DONE (anv, hasvk, lvp, nvk, panvk/v10+, radv, tu, vn) + VK_KHR_maintenance5 DONE (anv, hasvk, kk, lvp, nvk, panvk/v10+, pvr, radv, tu, v3dv, vn) + VK_KHR_maintenance6 DONE (anv, hasvk, kk, lvp, nvk, panvk/v10+, radv, tu, vn) VK_KHR_map_memory2 DONE (anv, kk, lvp, nvk, panvk, pvr, radv, tu, vn) VK_KHR_push_descriptor DONE (anv, hasvk, kk, lvp, nvk, panvk, radv, tu, vn) VK_KHR_shader_expect_assume DONE (anv, dzn, hasvk, kk, lvp, nvk, panvk, pvr, radv, tu, v3dv, vn) @@ -560,10 +560,10 @@ Khronos extensions that are not part of any Vulkan version: VK_KHR_get_surface_capabilities2 DONE (anv, dzn, hk, lvp, nvk, panvk, pvr, radv, tu, v3dv, vn) VK_KHR_incremental_present DONE (anv, hasvk, hk, lvp, nvk, pvr, radv, tu, v3dv, vn) VK_KHR_internally_synchronized_queues DONE (anv, radv) - VK_KHR_maintenance7 DONE (anv, hk, lvp, nvk, panvk/v10+, radv, tu, vn) - VK_KHR_maintenance8 DONE (anv, hk, lvp, nvk, panvk/v10+, radv, tu) - VK_KHR_maintenance9 DONE (anv, hk, lvp, nvk, panvk, radv) - VK_KHR_maintenance10 DONE (anv, nvk, radv) + VK_KHR_maintenance7 DONE (anv, hk, kk, lvp, nvk, panvk/v10+, radv, tu, vn) + VK_KHR_maintenance8 DONE (anv, hk, kk, lvp, nvk, panvk/v10+, radv, tu) + VK_KHR_maintenance9 DONE (anv, hk, kk, lvp, nvk, panvk, radv) + VK_KHR_maintenance10 DONE (anv, kk, nvk, radv) VK_KHR_maintenance11 DONE (anv, radv) VK_KHR_performance_query DONE (anv, radv/gfx10.3, radv/gfx11, tu, v3dv) VK_KHR_pipeline_binary DONE (anv, hk, nvk, panvk, radv) diff --git a/src/kosmickrisp/vulkan/kk_physical_device.c b/src/kosmickrisp/vulkan/kk_physical_device.c index 42fbfaa0a04..d67b5034308 100644 --- a/src/kosmickrisp/vulkan/kk_physical_device.c +++ b/src/kosmickrisp/vulkan/kk_physical_device.c @@ -21,6 +21,7 @@ #include "git_sha1.h" #include "vulkan/wsi/wsi_common.h" +#include "vk_common_entrypoints.h" #include "vk_device.h" #include "vk_drm_syncobj.h" #include "vk_shader_module.h" @@ -119,6 +120,8 @@ kk_get_device_extensions(const struct kk_instance *instance, .KHR_line_rasterization = true, .KHR_index_type_uint8 = true, .KHR_load_store_op_none = true, + .KHR_maintenance5 = true, + .KHR_maintenance6 = true, .KHR_map_memory2 = true, .KHR_push_descriptor = true, .KHR_shader_expect_assume = true, @@ -133,6 +136,10 @@ kk_get_device_extensions(const struct kk_instance *instance, /* Optional extensions */ .KHR_calibrated_timestamps = true, + .KHR_maintenance7 = true, + .KHR_maintenance8 = true, + .KHR_maintenance9 = true, + .KHR_maintenance10 = true, .KHR_robustness2 = true, .KHR_shader_maximal_reconvergence = true, .KHR_shader_relaxed_extended_instruction = true, @@ -296,6 +303,8 @@ kk_get_device_features( .bresenhamLines = true, .globalPriorityQuery = true, .indexTypeUint8 = true, + .maintenance5 = true, + .maintenance6 = true, .pipelineRobustness = true, .pushDescriptor = true, .shaderSubgroupRotate = true, @@ -306,6 +315,18 @@ kk_get_device_features( /* VK_EXT_mutable_descriptor_type */ .mutableDescriptorType = true, + /* VK_KHR_maintenance7 */ + .maintenance7 = true, + + /* VK_KHR_maintenance8 */ + .maintenance8 = true, + + /* VK_KHR_maintenance9 */ + .maintenance9 = true, + + /* VK_KHR_maintenance10 */ + .maintenance10 = true, + /* VK_KHR_robustness2 */ .robustBufferAccess2 = true, .robustImageAccess2 = true, @@ -621,9 +642,9 @@ kk_get_device_properties(const struct kk_physical_device *pdev, .lineSubPixelPrecisionBits = 8, /* VK_KHR_maintenance5 */ - .earlyFragmentMultisampleCoverageAfterSampleCounting = false, - .earlyFragmentSampleMaskTestBeforeSampleCounting = true, - .depthStencilSwizzleOneSupport = false, + .earlyFragmentMultisampleCoverageAfterSampleCounting = true, + .earlyFragmentSampleMaskTestBeforeSampleCounting = false, + .depthStencilSwizzleOneSupport = true, .polygonModePointSize = false, .nonStrictSinglePixelWideLinesUseParallelogram = false, .nonStrictWideLinesUseParallelogram = false, @@ -635,7 +656,7 @@ kk_get_device_properties(const struct kk_physical_device *pdev, /* VK_KHR_maintenance7 */ .robustFragmentShadingRateAttachmentAccess = false, - .separateDepthStencilAttachmentAccess = false, + .separateDepthStencilAttachmentAccess = true, .maxDescriptorSetTotalUniformBuffersDynamic = KK_MAX_DYNAMIC_BUFFERS / 2, .maxDescriptorSetTotalStorageBuffersDynamic = KK_MAX_DYNAMIC_BUFFERS / 2, .maxDescriptorSetTotalBuffersDynamic = KK_MAX_DYNAMIC_BUFFERS, @@ -646,6 +667,16 @@ kk_get_device_properties(const struct kk_physical_device *pdev, .maxDescriptorSetUpdateAfterBindTotalBuffersDynamic = KK_MAX_DYNAMIC_BUFFERS, + /* VK_KHR_maintenance9 */ + .image2DViewOf3DSparse = false, + .defaultVertexAttributeValue = + VK_DEFAULT_VERTEX_ATTRIBUTE_VALUE_ZERO_ZERO_ZERO_ONE_KHR, + + /* VK_KHR_maintenance10 */ + .rgba4OpaqueBlackSwizzled = false, + .resolveSrgbFormatAppliesTransferFunction = true, + .resolveSrgbFormatSupportsTransferFunctionControl = true, + /* VK_EXT_legacy_vertex_attributes */ .nativeUnalignedPerformance = true, @@ -1017,6 +1048,32 @@ kk_physical_device_destroy(struct vk_physical_device *vk_pdev) vk_free(&pdev->vk.instance->alloc, pdev); } +VKAPI_ATTR void VKAPI_CALL +kk_GetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice, + VkPhysicalDeviceProperties2 *pProperties) +{ + vk_common_GetPhysicalDeviceProperties2(physicalDevice, pProperties); + + /* Properly populate layered API properties */ + VkPhysicalDeviceLayeredApiPropertiesListKHR *layered_props_list = + vk_find_struct(pProperties->pNext, + PHYSICAL_DEVICE_LAYERED_API_PROPERTIES_LIST_KHR); + if (!layered_props_list) + return; + + layered_props_list->layeredApiCount = 1; + if (!layered_props_list->pLayeredApis) + return; + + VkPhysicalDeviceLayeredApiPropertiesKHR *layered_props = + &layered_props_list->pLayeredApis[0]; + layered_props->vendorID = pProperties->properties.vendorID; + layered_props->deviceID = pProperties->properties.deviceID; + layered_props->layeredAPI = VK_PHYSICAL_DEVICE_LAYERED_API_METAL_KHR; + strncpy(layered_props->deviceName, pProperties->properties.deviceName, + VK_MAX_PHYSICAL_DEVICE_NAME_SIZE); +} + VKAPI_ATTR void VKAPI_CALL kk_GetPhysicalDeviceMemoryProperties2( VkPhysicalDevice physicalDevice, @@ -1094,9 +1151,17 @@ kk_GetPhysicalDeviceQueueFamilyProperties2( { switch (ext->sType) { case VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES: { - VkQueueFamilyGlobalPriorityProperties *p = (void *)ext; - p->priorityCount = 1; - p->priorities[0] = VK_QUEUE_GLOBAL_PRIORITY_MEDIUM; + VkQueueFamilyGlobalPriorityProperties *pSub = (void *)ext; + pSub->priorityCount = 1; + pSub->priorities[0] = VK_QUEUE_GLOBAL_PRIORITY_MEDIUM; + break; + } + + case VK_STRUCTURE_TYPE_QUEUE_FAMILY_OPTIMAL_IMAGE_TRANSFER_GRANULARITY_PROPERTIES_KHR: { + VkQueueFamilyOptimalImageTransferGranularityPropertiesKHR *pSub = + (void *)ext; + pSub->optimalImageTransferGranularity = + p->queueFamilyProperties.minImageTransferGranularity; break; }