From ef66fdf47cf3f8102b58a601589fefe82d8486f2 Mon Sep 17 00:00:00 2001 From: Arcady Goldmints-Orlov Date: Fri, 24 Oct 2025 12:31:45 -0400 Subject: [PATCH] kk: enable VK_KHR_workgroup_memory_explicit_layout Reviewed-by: Aitor Camacho Part-of: --- docs/features.txt | 2 +- src/kosmickrisp/compiler/nir_to_msl.c | 2 ++ src/kosmickrisp/vulkan/kk_physical_device.c | 7 +++++++ src/kosmickrisp/vulkan/kk_shader.c | 7 +++---- 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/docs/features.txt b/docs/features.txt index 223d2e24d3d..512dc5c6ef5 100644 --- a/docs/features.txt +++ b/docs/features.txt @@ -584,7 +584,7 @@ Khronos extensions that are not part of any Vulkan version: VK_KHR_swapchain_mutable_format DONE (anv, hasvk, hk, kk, lvp, nvk, pvr, radv, tu, v3dv, vn) VK_KHR_unified_image_layouts DONE (lvp, nvk, panvk, radv/gfx11+, tu) VK_KHR_wayland_surface DONE (anv, dzn, hk, lvp, nvk, panvk, pvr, radv, tu, v3dv, vn) - VK_KHR_workgroup_memory_explicit_layout DONE (anv, hk, lvp, nvk, hasvk, radv, tu, v3dv, vn) + VK_KHR_workgroup_memory_explicit_layout DONE (anv, hk, kk, lvp, nvk, hasvk, radv, tu, v3dv, vn) VK_KHR_win32_keyed_mutex not started VK_KHR_win32_surface DONE (dzn, lvp) VK_KHR_xcb_surface DONE (anv, dzn, hasvk, hk, lvp, nvk, panvk, radv, tu, v3dv, vn) diff --git a/src/kosmickrisp/compiler/nir_to_msl.c b/src/kosmickrisp/compiler/nir_to_msl.c index 3b65b4002f0..cc8d352352f 100644 --- a/src/kosmickrisp/compiler/nir_to_msl.c +++ b/src/kosmickrisp/compiler/nir_to_msl.c @@ -853,6 +853,8 @@ memory_modes_to_msl(struct nir_to_msl_ctx *ctx, nir_variable_mode modes) } requires_or = true; } + if (!requires_or) + P(ctx, "mem_flags::mem_none"); } static uint32_t diff --git a/src/kosmickrisp/vulkan/kk_physical_device.c b/src/kosmickrisp/vulkan/kk_physical_device.c index bb0de2fda82..163e5a5b583 100644 --- a/src/kosmickrisp/vulkan/kk_physical_device.c +++ b/src/kosmickrisp/vulkan/kk_physical_device.c @@ -126,6 +126,7 @@ kk_get_device_extensions(const struct kk_instance *instance, .KHR_swapchain = true, .KHR_swapchain_mutable_format = true, #endif + .KHR_workgroup_memory_explicit_layout = true, .EXT_external_memory_metal = true, .EXT_mutable_descriptor_type = true, @@ -271,6 +272,12 @@ kk_get_device_features( /* VK_KHR_shader_relaxed_extended_instruction */ .shaderRelaxedExtendedInstruction = true, + /* VK_KHR_workgroup_memory_explicit_layout */ + .workgroupMemoryExplicitLayout = true, + .workgroupMemoryExplicitLayoutScalarBlockLayout = true, + .workgroupMemoryExplicitLayout8BitAccess = true, + .workgroupMemoryExplicitLayout16BitAccess = true, + /* VK_EXT_shader_replicated_composites */ .shaderReplicatedComposites = true, diff --git a/src/kosmickrisp/vulkan/kk_shader.c b/src/kosmickrisp/vulkan/kk_shader.c index eae36b8d83a..71d3c24e54e 100644 --- a/src/kosmickrisp/vulkan/kk_shader.c +++ b/src/kosmickrisp/vulkan/kk_shader.c @@ -483,10 +483,9 @@ kk_lower_nir(struct kk_device *dev, nir_shader *nir, nir_lower_io_lower_64bit_to_32 | nir_lower_io_use_interpolated_input_intrinsics); - if (!nir->info.shared_memory_explicit_layout) { - NIR_PASS(_, nir, nir_lower_vars_to_explicit_types, nir_var_mem_shared, - shared_var_info); - } + NIR_PASS(_, nir, nir_lower_vars_to_explicit_types, nir_var_mem_shared, + shared_var_info); + NIR_PASS(_, nir, nir_lower_explicit_io, nir_var_mem_shared, nir_address_format_32bit_offset);