From 2ca51bf6251a969d10fe9de2337304b3b203c484 Mon Sep 17 00:00:00 2001 From: squidbus Date: Wed, 29 Apr 2026 18:52:40 -0700 Subject: [PATCH] kk: Support VK_EXT_post_depth_coverage Requires slightly different declaration of sample mask input. --- docs/features.txt | 2 +- src/kosmickrisp/compiler/nir_to_msl.c | 14 ++++++++++++-- src/kosmickrisp/vulkan/kk_physical_device.c | 1 + 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/docs/features.txt b/docs/features.txt index 29197179949..7bb622e8c74 100644 --- a/docs/features.txt +++ b/docs/features.txt @@ -671,7 +671,7 @@ Khronos extensions that are not part of any Vulkan version: VK_EXT_pci_bus_info DONE (anv, hasvk, nvk, radv, vn) VK_EXT_physical_device_drm DONE (anv, hasvk, hk, nvk, panvk, pvr, radv, tu, v3dv, vn) VK_EXT_pipeline_library_group_handles DONE (anv, lvp, radv, vn) - VK_EXT_post_depth_coverage DONE (anv/gfx11+, lvp, nvk, radv/gfx10+, tu, vn) + VK_EXT_post_depth_coverage DONE (anv/gfx11+, kk, lvp, nvk, radv/gfx10+, tu, vn) VK_EXT_present_timing DONE (anv, hk, nvk, radv, tu, panvk) VK_EXT_primitive_restart_index DONE (lvp, radv) VK_EXT_primitive_topology_list_restart DONE (anv, hasvk, lvp, nvk, panvk, radv, tu, v3dv, vn, nvk) diff --git a/src/kosmickrisp/compiler/nir_to_msl.c b/src/kosmickrisp/compiler/nir_to_msl.c index cb54a271e52..f397327a321 100644 --- a/src/kosmickrisp/compiler/nir_to_msl.c +++ b/src/kosmickrisp/compiler/nir_to_msl.c @@ -62,14 +62,24 @@ static const char *sysval_table[SYSTEM_VALUE_MAX] = { "uint mtl_AmplificationID [[amplification_id]]", [SYSTEM_VALUE_FIRST_VERTEX] = "uint gl_FirstVertex [[base_vertex]]", }; +static const char *sysval_sample_mask_in_post_depth_coverage = + "uint gl_SampleMask [[sample_mask, post_depth_coverage]]"; static void emit_sysvals(struct nir_to_msl_ctx *ctx, nir_shader *shader) { unsigned i; BITSET_FOREACH_SET(i, shader->info.system_values_read, SYSTEM_VALUE_MAX) { - assert(sysval_table[i]); - P_IND(ctx, "%s,\n", sysval_table[i]); + const char *sysval; + if (i == SYSTEM_VALUE_SAMPLE_MASK_IN && + ctx->shader->info.stage == MESA_SHADER_FRAGMENT && + ctx->shader->info.fs.post_depth_coverage) + sysval = sysval_sample_mask_in_post_depth_coverage; + else + sysval = sysval_table[i]; + + assert(sysval); + P_IND(ctx, "%s,\n", sysval); } } diff --git a/src/kosmickrisp/vulkan/kk_physical_device.c b/src/kosmickrisp/vulkan/kk_physical_device.c index 86cf601ce04..8d9ca832e07 100644 --- a/src/kosmickrisp/vulkan/kk_physical_device.c +++ b/src/kosmickrisp/vulkan/kk_physical_device.c @@ -143,6 +143,7 @@ kk_get_device_extensions(const struct kk_instance *instance, .EXT_image_2d_view_of_3d = true, .EXT_load_store_op_none = true, .EXT_mutable_descriptor_type = true, + .EXT_post_depth_coverage = true, .EXT_shader_atomic_float = true, .EXT_shader_replicated_composites = true,