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);