From b9ce945e61f24a014c95e2ccf381fe682ef23cf0 Mon Sep 17 00:00:00 2001 From: Henri Verbeet Date: Wed, 28 May 2025 15:06:38 +0200 Subject: [PATCH] vkd3d-shader/msl: Implement VSIR_OP_DSX_COARSE and VSIR_OP_DSY_COARSE. --- libs/vkd3d-shader/msl.c | 6 ++++++ tests/hlsl/ddxddy.shader_test | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/libs/vkd3d-shader/msl.c b/libs/vkd3d-shader/msl.c index a3b174f61..e292665db 100644 --- a/libs/vkd3d-shader/msl.c +++ b/libs/vkd3d-shader/msl.c @@ -1319,9 +1319,15 @@ static void msl_handle_instruction(struct msl_generator *gen, const struct vkd3d msl_dot(gen, ins, VKD3DSP_WRITEMASK_ALL); break; case VSIR_OP_DSX: + case VSIR_OP_DSX_COARSE: + /* dfdx() and dfdy() are specified to return "a high precision + * partial derivative", which would seem to correspond to + * DSX_FINE/DSY_FINE. As of MSL 3.2, coarse/fast variants don't + * appear to be available. */ msl_intrinsic(gen, ins, "dfdx"); break; case VSIR_OP_DSY: + case VSIR_OP_DSY_COARSE: msl_intrinsic(gen, ins, "dfdy"); break; case VSIR_OP_ELSE: diff --git a/tests/hlsl/ddxddy.shader_test b/tests/hlsl/ddxddy.shader_test index b860d200b..990b5304d 100644 --- a/tests/hlsl/ddxddy.shader_test +++ b/tests/hlsl/ddxddy.shader_test @@ -55,7 +55,7 @@ float4 main(float4 pos : sv_position) : sv_target } [test] -todo(glsl | msl) draw quad +todo(glsl) draw quad probe (10, 10) rgba (-16.0, -5.0, 3.0, 0.0) probe (11, 10) rgba (-21.0, -5.0, 3.0, 0.0) probe (10, 11) rgba (-13.0, -5.0, 3.0, 0.0)