From a1edfc400806aeb63383715c7779640a5ac8b1a4 Mon Sep 17 00:00:00 2001 From: Henri Verbeet Date: Sat, 31 May 2025 20:05:18 +0200 Subject: [PATCH] vkd3d-shader/msl: Implement compute shaders. --- libs/vkd3d-shader/msl.c | 15 +++++++++++++-- tests/hlsl/uav-out-param.shader_test | 2 +- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/libs/vkd3d-shader/msl.c b/libs/vkd3d-shader/msl.c index 88d1160d4..fc8d482e0 100644 --- a/libs/vkd3d-shader/msl.c +++ b/libs/vkd3d-shader/msl.c @@ -1996,6 +1996,7 @@ static void msl_generate_entrypoint_epilogue(struct msl_generator *gen) static void msl_generate_entrypoint(struct msl_generator *gen) { enum vkd3d_shader_type type = gen->program->shader_version.type; + bool output = true; switch (type) { @@ -2007,13 +2008,21 @@ static void msl_generate_entrypoint(struct msl_generator *gen) vkd3d_string_buffer_printf(gen->buffer, "[[early_fragment_tests]]\n"); vkd3d_string_buffer_printf(gen->buffer, "fragment "); break; + case VKD3D_SHADER_TYPE_COMPUTE: + vkd3d_string_buffer_printf(gen->buffer, "kernel "); + output = false; + break; default: msl_compiler_error(gen, VKD3D_SHADER_ERROR_MSL_INTERNAL, "Internal compiler error: Unhandled shader type %#x.", type); return; } - vkd3d_string_buffer_printf(gen->buffer, "vkd3d_%s_out shader_entry(\n", gen->prefix); + if (output) + vkd3d_string_buffer_printf(gen->buffer, "vkd3d_%s_out ", gen->prefix); + else + vkd3d_string_buffer_printf(gen->buffer, "void "); + vkd3d_string_buffer_printf(gen->buffer, "shader_entry(\n"); if (gen->program->descriptors.descriptor_count) { @@ -2055,7 +2064,9 @@ static void msl_generate_entrypoint(struct msl_generator *gen) msl_generate_entrypoint_epilogue(gen); - vkd3d_string_buffer_printf(gen->buffer, " return output;\n}\n"); + if (output) + vkd3d_string_buffer_printf(gen->buffer, " return output;\n"); + vkd3d_string_buffer_printf(gen->buffer, "}\n"); } static int msl_generator_generate(struct msl_generator *gen, struct vkd3d_shader_code *out) diff --git a/tests/hlsl/uav-out-param.shader_test b/tests/hlsl/uav-out-param.shader_test index 8b543133b..9a50f5d6a 100644 --- a/tests/hlsl/uav-out-param.shader_test +++ b/tests/hlsl/uav-out-param.shader_test @@ -26,7 +26,7 @@ void main() } [test] -todo(msl) dispatch 1 1 1 +dispatch 1 1 1 probe uav 0 (0, 0) f32(0.4, 0.1, 0.2, 0.3) [uav 0]