From 37faa2c56f82f0da78502e443de9d0e6b74897e8 Mon Sep 17 00:00:00 2001 From: squidbus <1249084-squidbus@users.noreply.gitlab.freedesktop.org> Date: Thu, 21 May 2026 20:22:58 -0700 Subject: [PATCH] kk: Fix some missed NIR debug asserts * `msl_ensure_vertex_point_size_output` is missing some NIR pass logic after being converted to use lowered I/O, and only needs to be called for point primitives. * `nir_separate_merged_clip_cull_io` requires the `compact_arrays` NIR option be enabled for compact clip/cull distance arrays. Reviewed-by: Aitor Camacho Part-of: --- src/kosmickrisp/compiler/msl_nir_lower_common.c | 4 ++-- src/kosmickrisp/compiler/nir_to_msl.h | 1 + src/kosmickrisp/vulkan/kk_shader.c | 3 ++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/kosmickrisp/compiler/msl_nir_lower_common.c b/src/kosmickrisp/compiler/msl_nir_lower_common.c index db7b005ea5a..6995302193e 100644 --- a/src/kosmickrisp/compiler/msl_nir_lower_common.c +++ b/src/kosmickrisp/compiler/msl_nir_lower_common.c @@ -261,9 +261,9 @@ msl_ensure_vertex_point_size_output(nir_shader *nir) .base = 0u, .range = 1u, .write_mask = 0x1, .component = 0u, .src_type = nir_type_float32, .io_semantics = io_semantics); nir->info.outputs_written |= BITFIELD64_BIT(VARYING_SLOT_PSIZ); + return nir_progress(true, entrypoint, nir_metadata_control_flow); } - - return true; + return false; } static bool diff --git a/src/kosmickrisp/compiler/nir_to_msl.h b/src/kosmickrisp/compiler/nir_to_msl.h index aeacc24d259..1bfdee8d0db 100644 --- a/src/kosmickrisp/compiler/nir_to_msl.h +++ b/src/kosmickrisp/compiler/nir_to_msl.h @@ -112,6 +112,7 @@ static const nir_shader_compiler_options kk_nir_options = { .lower_mul_2x32_64 = true, .lower_uadd_carry = true, .lower_usub_borrow = true, + .compact_arrays = true, /* Metal does not support double. */ .lower_doubles_options = (nir_lower_doubles_options)(~0), .lower_int64_options = nir_lower_ufind_msb64 | nir_lower_subgroup_shuffle64, diff --git a/src/kosmickrisp/vulkan/kk_shader.c b/src/kosmickrisp/vulkan/kk_shader.c index efefc65e3b1..d7dbf484eec 100644 --- a/src/kosmickrisp/vulkan/kk_shader.c +++ b/src/kosmickrisp/vulkan/kk_shader.c @@ -503,7 +503,8 @@ kk_lower_nir(struct kk_device *dev, nir_shader *nir, glsl_get_natural_size_align_bytes); NIR_PASS(_, nir, msl_ensure_vertex_position_output); - NIR_PASS(_, nir, msl_ensure_vertex_point_size_output); + if (state->ia->primitive_topology == VK_PRIMITIVE_TOPOLOGY_POINT_LIST) + NIR_PASS(_, nir, msl_ensure_vertex_point_size_output); } else if (nir->info.stage == MESA_SHADER_FRAGMENT) { NIR_PASS(_, nir, kk_nir_lower_fs_multiview, state->mv->view_mask);