From 05b9331d0d1c1d8075ea9901dbc02d29129495b1 Mon Sep 17 00:00:00 2001 From: Feifan He Date: Fri, 22 Nov 2024 15:45:54 +0800 Subject: [PATCH] vkd3d-shader/msl: Implement VKD3DSIH_ADD. --- libs/vkd3d-shader/msl.c | 20 ++++++++++++++++++++ tests/hlsl/cbuffer.shader_test | 2 +- tests/hlsl/const.shader_test | 2 +- tests/hlsl/expr-indexing.shader_test | 2 +- tests/hlsl/loop.shader_test | 4 ++-- tests/hlsl/struct-inheritance.shader_test | 2 +- 6 files changed, 26 insertions(+), 6 deletions(-) diff --git a/libs/vkd3d-shader/msl.c b/libs/vkd3d-shader/msl.c index df3edeaa..321faea5 100644 --- a/libs/vkd3d-shader/msl.c +++ b/libs/vkd3d-shader/msl.c @@ -288,6 +288,23 @@ static void msl_unhandled(struct msl_generator *gen, const struct vkd3d_shader_i "Internal compiler error: Unhandled instruction %#x.", ins->opcode); } +static void msl_binop(struct msl_generator *gen, const struct vkd3d_shader_instruction *ins, const char *op) +{ + struct msl_src src[2]; + struct msl_dst dst; + uint32_t mask; + + mask = msl_dst_init(&dst, gen, ins, &ins->dst[0]); + msl_src_init(&src[0], gen, &ins->src[0], mask); + msl_src_init(&src[1], gen, &ins->src[1], mask); + + msl_print_assignment(gen, &dst, "%s %s %s", src[0].str->buffer, op, src[1].str->buffer); + + msl_src_cleanup(&src[1], &gen->string_buffers); + msl_src_cleanup(&src[0], &gen->string_buffers); + msl_dst_cleanup(&dst, &gen->string_buffers); +} + static void msl_mov(struct msl_generator *gen, const struct vkd3d_shader_instruction *ins) { struct msl_src src; @@ -315,6 +332,9 @@ static void msl_handle_instruction(struct msl_generator *gen, const struct vkd3d switch (ins->opcode) { + case VKD3DSIH_ADD: + msl_binop(gen, ins, "+"); + break; case VKD3DSIH_DCL_INPUT: case VKD3DSIH_DCL_OUTPUT: case VKD3DSIH_DCL_OUTPUT_SIV: diff --git a/tests/hlsl/cbuffer.shader_test b/tests/hlsl/cbuffer.shader_test index 2b7c88a7..c73ea102 100644 --- a/tests/hlsl/cbuffer.shader_test +++ b/tests/hlsl/cbuffer.shader_test @@ -813,7 +813,7 @@ float4 main() : sv_target [test] uniform 0 float4 1.0 2.0 3.0 4.0 uniform 4 float4 0.1 0.2 0.3 0.4 -todo(msl) draw quad +draw quad probe (0, 0) rgba (1.1, 2.2, 3.3, 4.4) diff --git a/tests/hlsl/const.shader_test b/tests/hlsl/const.shader_test index 9a0cc410..a7a19e8c 100644 --- a/tests/hlsl/const.shader_test +++ b/tests/hlsl/const.shader_test @@ -10,7 +10,7 @@ float4 main() : sv_target [test] uniform 0 float4 1.0 2.0 3.0 4.0 uniform 4 float4 0.1 0.2 0.3 0.4 -todo(msl) draw quad +draw quad probe (0, 0) rgba (1.1, 2.2, 3.3, 4.4) [pixel shader fail(sm<6)] diff --git a/tests/hlsl/expr-indexing.shader_test b/tests/hlsl/expr-indexing.shader_test index d3cd90a3..b7ef9186 100644 --- a/tests/hlsl/expr-indexing.shader_test +++ b/tests/hlsl/expr-indexing.shader_test @@ -9,7 +9,7 @@ float4 main() : sv_target [test] uniform 0 float4 1.0 2.0 3.0 4.0 uniform 4 float4 5.0 6.0 7.0 8.0 -todo(msl) draw quad +draw quad probe (0, 0) rgba (8.0, 8.0, 8.0, 8.0) diff --git a/tests/hlsl/loop.shader_test b/tests/hlsl/loop.shader_test index aefa1c14..c47528ec 100644 --- a/tests/hlsl/loop.shader_test +++ b/tests/hlsl/loop.shader_test @@ -18,7 +18,7 @@ float4 main() : sv_target [test] uniform 0 float 5.0 -todo(msl) draw quad +draw quad probe (0, 0) rgba (50.0, 50.0, 50.0, 50.0) @@ -41,7 +41,7 @@ float4 main() : sv_target [test] uniform 0 float 4.0 -todo(msl) draw quad +draw quad probe (0, 0) rgba (20.0, 20.0, 20.0, 20.0) [pixel shader] diff --git a/tests/hlsl/struct-inheritance.shader_test b/tests/hlsl/struct-inheritance.shader_test index b4b24243..c5340aa1 100644 --- a/tests/hlsl/struct-inheritance.shader_test +++ b/tests/hlsl/struct-inheritance.shader_test @@ -28,7 +28,7 @@ uniform 0 float4 1 0 0 0 uniform 4 float4 0 2 0 0 uniform 8 float4 0 0 3 0 uniform 12 float4 0 0 0 4 -todo(msl) draw quad +draw quad probe (0, 0) rgba (1, 0, 3, 4) % Test writing to a field derived from a base class.