diff --git a/src/kosmickrisp/compiler/nir_to_msl.c b/src/kosmickrisp/compiler/nir_to_msl.c index 51b96bb2c62..3b65b4002f0 100644 --- a/src/kosmickrisp/compiler/nir_to_msl.c +++ b/src/kosmickrisp/compiler/nir_to_msl.c @@ -60,6 +60,7 @@ static const char *sysval_table[SYSTEM_VALUE_MAX] = { [SYSTEM_VALUE_SAMPLE_MASK_IN] = "uint gl_SampleMask [[sample_mask]]", [SYSTEM_VALUE_AMPLIFICATION_ID_KK] = "uint mtl_AmplificationID [[amplification_id]]", + [SYSTEM_VALUE_FIRST_VERTEX] = "uint gl_FirstVertex [[base_vertex]]", /* These are functions and not shader input variables */ [SYSTEM_VALUE_HELPER_INVOCATION] = "", }; @@ -950,6 +951,9 @@ intrinsic_to_msl(struct nir_to_msl_ctx *ctx, nir_intrinsic_instr *instr) case nir_intrinsic_load_point_coord: P(ctx, "gl_PointCoord;\n"); break; + case nir_intrinsic_load_first_vertex: + P(ctx, "gl_FirstVertex;\n"); + break; case nir_intrinsic_load_vertex_id: P(ctx, "gl_VertexID;\n"); break; diff --git a/src/kosmickrisp/vulkan/kk_cmd_buffer.h b/src/kosmickrisp/vulkan/kk_cmd_buffer.h index 83d91f4e0b2..d5722a53cbb 100644 --- a/src/kosmickrisp/vulkan/kk_cmd_buffer.h +++ b/src/kosmickrisp/vulkan/kk_cmd_buffer.h @@ -35,6 +35,7 @@ struct kk_root_descriptor_table { uint64_t attrib_base[KK_MAX_ATTRIBS]; uint32_t attrib_clamps[KK_MAX_ATTRIBS]; float blend_constant[4]; + uint32_t draw_id; } draw; struct { uint32_t base_group[3]; diff --git a/src/kosmickrisp/vulkan/kk_nir_lower_descriptors.c b/src/kosmickrisp/vulkan/kk_nir_lower_descriptors.c index da076d41815..086a3efecda 100644 --- a/src/kosmickrisp/vulkan/kk_nir_lower_descriptors.c +++ b/src/kosmickrisp/vulkan/kk_nir_lower_descriptors.c @@ -409,6 +409,9 @@ try_lower_intrin(nir_builder *b, nir_intrinsic_instr *intrin, case nir_intrinsic_load_push_constant: return lower_load_push_constant(b, intrin, ctx); + case nir_intrinsic_load_draw_id: + return lower_sysval_to_root_table(b, intrin, draw.draw_id); + case nir_intrinsic_image_deref_load: case nir_intrinsic_image_deref_sparse_load: case nir_intrinsic_image_deref_store: diff --git a/src/kosmickrisp/vulkan/kk_physical_device.c b/src/kosmickrisp/vulkan/kk_physical_device.c index 0c98f9b5dc8..c659dd04e6e 100644 --- a/src/kosmickrisp/vulkan/kk_physical_device.c +++ b/src/kosmickrisp/vulkan/kk_physical_device.c @@ -57,7 +57,7 @@ kk_get_device_extensions(const struct kk_instance *instance, .KHR_multiview = true, .KHR_relaxed_block_layout = true, .KHR_sampler_ycbcr_conversion = true, - .KHR_shader_draw_parameters = false, + .KHR_shader_draw_parameters = true, .KHR_storage_buffer_storage_class = true, .KHR_variable_pointers = true, @@ -174,6 +174,7 @@ kk_get_device_features( /* Vulkan 1.1 */ .multiview = true, + .shaderDrawParameters = true, .storageBuffer16BitAccess = true, .storageInputOutput16 = false, .storagePushConstant16 = true,