From 829130daad155b9047fc9690400c7e7308d35d11 Mon Sep 17 00:00:00 2001 From: squidbus Date: Thu, 30 Apr 2026 20:19:46 -0700 Subject: [PATCH] kk: Enable VK_(EXT/KHR)_robustness2 and VK_EXT_pipeline_robustness Enable all functionality, and make consistent use of non-EXT enum definitions. Reviewed-by: Aitor Camacho Part-of: --- docs/features.txt | 6 +++--- .../vulkan/kk_nir_lower_descriptors.c | 6 +++--- src/kosmickrisp/vulkan/kk_physical_device.c | 19 ++++++++++++++----- src/kosmickrisp/vulkan/kk_shader.c | 8 ++++---- src/kosmickrisp/vulkan/kk_shader.h | 6 +++--- 5 files changed, 27 insertions(+), 18 deletions(-) diff --git a/docs/features.txt b/docs/features.txt index df8c8a6d699..d5590a6fea8 100644 --- a/docs/features.txt +++ b/docs/features.txt @@ -534,7 +534,7 @@ Vulkan 1.4 -- all DONE: anv, hk, lvp, nvk, panvk/v10+, radv/gfx8+, tu/a7xx+, vn VK_KHR_vertex_attribute_divisor DONE (anv, kk, lvp, nvk, panvk, pvr, radv, tu, v3dv, vn) VK_EXT_host_image_copy DONE (anv, lvp, nvk/Turing+, panvk, radv/gfx10+, tu, vn) VK_EXT_pipeline_protected_access DONE (anv/gfx12+, radv, vn) - VK_EXT_pipeline_robustness DONE (anv, lvp, nvk, panvk, radv, v3dv, tu, vn) + VK_EXT_pipeline_robustness DONE (anv, kk, lvp, nvk, panvk, radv, v3dv, tu, vn) Khronos extensions that are not part of any Vulkan version: @@ -576,7 +576,7 @@ Khronos extensions that are not part of any Vulkan version: VK_KHR_ray_tracing_maintenance1 DONE (anv/gfx12.5+, lvp, radv/gfx10.3+, tu/a740+, vn) VK_KHR_ray_tracing_pipeline DONE (anv/gfx12.5+, lvp, radv/gfx10.3+, vn) VK_KHR_ray_tracing_position_fetch DONE (anv, lvp, radv/gfx10.3+, vn) - VK_KHR_robustness2 DONE (anv, hasvk, hk, lvp, nvk, panvk/v10+, pvr, radv, tu, v3dv, vn) + VK_KHR_robustness2 DONE (anv, hasvk, hk, kk, lvp, nvk, panvk/v10+, pvr, radv, tu, v3dv, vn) VK_KHR_shader_bfloat16 DONE (anv/gfx12.5+, radv/gfx12+, vn) VK_KHR_shader_clock DONE (anv, hasvk, lvp, nvk, panvk, radv, tu, vn) VK_KHR_shader_constant_data DONE (radv) @@ -680,7 +680,7 @@ Khronos extensions that are not part of any Vulkan version: VK_EXT_queue_family_foreign DONE (anv, hasvk, hk, nvk, lvp, panvk, pvr, radv, tu, v3dv, vn) VK_EXT_rasterization_order_attachment_access DONE (lvp, tu, vn) VK_EXT_rgba10x6_formats DONE (panvk/v11+) - VK_EXT_robustness2 DONE (anv, hasvk, hk, lvp, nvk, panvk/v10+, pvr, radv, tu, v3dv, vn) + VK_EXT_robustness2 DONE (anv, hasvk, hk, kk, lvp, nvk, panvk/v10+, pvr, radv, tu, v3dv, vn) VK_EXT_sample_locations DONE (anv, hasvk, hk, nvk, radv, tu/a650+, vn, lavapipe) VK_EXT_shader_atomic_float DONE (anv, hasvk, lvp, panvk, radv, tu, vn) VK_EXT_shader_atomic_float2 DONE (anv, lvp, radv, vn) diff --git a/src/kosmickrisp/vulkan/kk_nir_lower_descriptors.c b/src/kosmickrisp/vulkan/kk_nir_lower_descriptors.c index ed19088b83e..91f088e5362 100644 --- a/src/kosmickrisp/vulkan/kk_nir_lower_descriptors.c +++ b/src/kosmickrisp/vulkan/kk_nir_lower_descriptors.c @@ -775,10 +775,10 @@ kk_nir_lower_descriptors(nir_shader *nir, struct lower_descriptors_ctx ctx = { .clamp_desc_array_bounds = rs->storage_buffers != - VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED_EXT || + VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED || rs->uniform_buffers != - VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED_EXT || - rs->images != VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DISABLED_EXT, + VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED || + rs->images != VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DISABLED, .ssbo_addr_format = kk_buffer_addr_format(rs->storage_buffers), .ubo_addr_format = kk_buffer_addr_format(rs->uniform_buffers), }; diff --git a/src/kosmickrisp/vulkan/kk_physical_device.c b/src/kosmickrisp/vulkan/kk_physical_device.c index f4331ca7aa2..adc0c9d449b 100644 --- a/src/kosmickrisp/vulkan/kk_physical_device.c +++ b/src/kosmickrisp/vulkan/kk_physical_device.c @@ -126,10 +126,12 @@ kk_get_device_extensions(const struct kk_instance *instance, .EXT_global_priority = true, .EXT_global_priority_query = true, .EXT_index_type_uint8 = true, + .EXT_pipeline_robustness = true, .EXT_vertex_attribute_divisor = true, /* Optional extensions */ .KHR_calibrated_timestamps = true, + .KHR_robustness2 = true, .KHR_shader_maximal_reconvergence = true, .KHR_shader_relaxed_extended_instruction = true, .KHR_shader_subgroup_uniform_control_flow = true, @@ -148,6 +150,7 @@ kk_get_device_extensions(const struct kk_instance *instance, .EXT_multi_draw = true, .EXT_mutable_descriptor_type = true, .EXT_post_depth_coverage = true, + .EXT_robustness2 = true, .EXT_shader_atomic_float = true, .EXT_shader_replicated_composites = true, .EXT_shader_subgroup_ballot = true, @@ -288,6 +291,7 @@ kk_get_device_features( /* Vulkan 1.4 */ .globalPriorityQuery = true, .indexTypeUint8 = true, + .pipelineRobustness = true, .pushDescriptor = true, .shaderSubgroupRotate = true, .shaderSubgroupRotateClustered = true, @@ -297,6 +301,11 @@ kk_get_device_features( /* VK_EXT_mutable_descriptor_type */ .mutableDescriptorType = true, + /* VK_KHR_robustness2 */ + .robustBufferAccess2 = true, + .robustImageAccess2 = true, + .nullDescriptor = true, + /* VK_KHR_shader_expect_assume */ .shaderExpectAssume = true, @@ -644,13 +653,13 @@ kk_get_device_properties(const struct kk_physical_device *pdev, /* VK_EXT_pipeline_robustness */ .defaultRobustnessStorageBuffers = - VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED_EXT, + VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED, .defaultRobustnessUniformBuffers = - VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED_EXT, + VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED, .defaultRobustnessVertexInputs = - VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED_EXT, + VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED, .defaultRobustnessImages = - VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_2_EXT, + VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_2, /* VK_EXT_physical_device_drm gets populated later */ @@ -658,7 +667,7 @@ kk_get_device_properties(const struct kk_physical_device *pdev, .provokingVertexModePerPipeline = true, .transformFeedbackPreservesTriangleFanProvokingVertex = true, - /* VK_EXT_robustness2 */ + /* VK_KHR_robustness2 */ .robustStorageBufferAccessSizeAlignment = KK_SSBO_BOUNDS_CHECK_ALIGNMENT, .robustUniformBufferAccessSizeAlignment = KK_MIN_UBO_ALIGNMENT, diff --git a/src/kosmickrisp/vulkan/kk_shader.c b/src/kosmickrisp/vulkan/kk_shader.c index ad24b40a0a0..98b824a5ccf 100644 --- a/src/kosmickrisp/vulkan/kk_shader.c +++ b/src/kosmickrisp/vulkan/kk_shader.c @@ -41,7 +41,7 @@ static const struct vk_pipeline_robustness_state rs_all_supported = { VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2, .storage_buffers = VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2, - .images = VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_2_EXT, + .images = VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_2, }; static struct spirv_to_nir_options @@ -755,9 +755,9 @@ kk_compile_shader(struct kk_device *dev, struct vk_shader_compile_info *info, } static const struct vk_pipeline_robustness_state rs_none = { - .uniform_buffers = VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED_EXT, - .storage_buffers = VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED_EXT, - .images = VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_2_EXT, + .uniform_buffers = VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED, + .storage_buffers = VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED, + .images = VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_2, }; VkResult diff --git a/src/kosmickrisp/vulkan/kk_shader.h b/src/kosmickrisp/vulkan/kk_shader.h index 713f16fb6f0..693526a9157 100644 --- a/src/kosmickrisp/vulkan/kk_shader.h +++ b/src/kosmickrisp/vulkan/kk_shader.h @@ -92,10 +92,10 @@ static inline nir_address_format kk_buffer_addr_format(VkPipelineRobustnessBufferBehaviorEXT robustness) { switch (robustness) { - case VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED_EXT: + case VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED: return nir_address_format_64bit_global_32bit_offset; - case VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_EXT: - case VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT: + case VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS: + case VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2: return nir_address_format_64bit_bounded_global; default: UNREACHABLE("Invalid robust buffer access behavior");