From 279669c0a0c0fb19733828d1b6c71ceadfbc2b7a 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. Reviewed-by: Aitor Camacho Part-of: --- docs/features.txt | 2 +- src/kosmickrisp/compiler/nir_to_msl.c | 17 +++++++++++++++-- src/kosmickrisp/vulkan/kk_physical_device.c | 1 + 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/docs/features.txt b/docs/features.txt index 77ea3bb4eb9..df8c8a6d699 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 ffccd9a7493..4f603ad8d88 100644 --- a/src/kosmickrisp/compiler/nir_to_msl.c +++ b/src/kosmickrisp/compiler/nir_to_msl.c @@ -63,14 +63,27 @@ 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) { + bool is_frag_with_post_depth_coverage = + ctx->shader->info.stage == MESA_SHADER_FRAGMENT && + ctx->shader->info.fs.post_depth_coverage; + 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 (is_frag_with_post_depth_coverage && + i == SYSTEM_VALUE_SAMPLE_MASK_IN) + 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 7a19bf8ff2b..f4331ca7aa2 100644 --- a/src/kosmickrisp/vulkan/kk_physical_device.c +++ b/src/kosmickrisp/vulkan/kk_physical_device.c @@ -147,6 +147,7 @@ kk_get_device_extensions(const struct kk_instance *instance, .EXT_load_store_op_none = true, .EXT_multi_draw = true, .EXT_mutable_descriptor_type = true, + .EXT_post_depth_coverage = true, .EXT_shader_atomic_float = true, .EXT_shader_replicated_composites = true, .EXT_shader_subgroup_ballot = true,