From 7e1fa8f3df85bd0bd8d3573f5ad259171962b005 Mon Sep 17 00:00:00 2001 From: Giovanni Mascellani Date: Mon, 29 Sep 2025 11:55:49 +0200 Subject: [PATCH] tests/shader_runner_metal: Enable supported UAV formats. --- tests/hlsl/barriers.shader_test | 2 +- tests/hlsl/coverage.shader_test | 20 ++++++++--------- tests/hlsl/discard.shader_test | 4 ++-- tests/hlsl/numthreads.shader_test | 2 +- tests/hlsl/sm6-uav-rwtexture.shader_test | 2 +- tests/hlsl/uav-load.shader_test | 2 +- tests/hlsl/wave-reconvergence.shader_test | 4 ++-- tests/shader_runner_metal.m | 26 +++++++++++++++++++++++ 8 files changed, 44 insertions(+), 18 deletions(-) diff --git a/tests/hlsl/barriers.shader_test b/tests/hlsl/barriers.shader_test index 7b357468b..59f58e93f 100644 --- a/tests/hlsl/barriers.shader_test +++ b/tests/hlsl/barriers.shader_test @@ -144,5 +144,5 @@ void main(uint local_idx : SV_GroupIndex, uint group_id : SV_GroupID) } [test] -todo(glsl) dispatch 1 1 1 +todo(glsl | msl) dispatch 1 1 1 probe uav 3 (0, 0, 1024, 1) u32(1024) diff --git a/tests/hlsl/coverage.shader_test b/tests/hlsl/coverage.shader_test index 0cf602854..73ba8d201 100644 --- a/tests/hlsl/coverage.shader_test +++ b/tests/hlsl/coverage.shader_test @@ -46,16 +46,16 @@ float4 main(float4 position : SV_Position, uint coverage : SV_Coverage) : SV_Tar [test] sample mask 0x01 clear rtv 0 0.0 0.0 0.0 0.0 -todo(sm<6) draw quad -probe (0, 0) rgba (0.0, 0.25, 0.0, 0.25) +todo(sm<6 | msl) draw quad +probe (0, 0) f32(0.0, 0.25, 0.0, 0.25) probe uav 1 (0, 0, 4, 4) u32(0x01) sample mask 0x03 -todo(sm<6) draw quad -probe (0, 0) rgba (0.0, 0.5, 0.0, 0.5) +todo(sm<6 | msl) draw quad +probe (0, 0) f32(0.0, 0.5, 0.0, 0.5) probe uav 1 (0, 0, 4, 4) u32(0x03) sample mask 0x07 -todo(sm<6) draw quad -probe (0, 0) rgba (0.0, 0.75, 0.0, 0.75) +todo(sm<6 | msl) draw quad +probe (0, 0) f32(0.0, 0.75, 0.0, 0.75) probe uav 1 (0, 0, 4, 4) u32(0x07) [uav 1] @@ -69,10 +69,10 @@ size (2d, 4, 4) [test] clear rtv 0 0.0 0.0 0.0 0.0 sample mask 0x09 -todo(sm<6) draw quad -probe (0, 0) rgba (0.0, 0.5, 0.0, 0.5) +todo(sm<6 | msl) draw quad +probe (0, 0) f32(0.0, 0.5, 0.0, 0.5) probe uav 1 (0, 0, 4, 4) u32(0x09) sample mask 0x0f -todo(sm<6) draw quad -probe (0, 0) rgba (0.0, 1.0, 0.0, 1.0) +todo(sm<6 | msl) draw quad +probe (0, 0) f32(0.0, 1.0, 0.0, 1.0) probe uav 1 (0, 0, 4, 4) u32(0x0f) diff --git a/tests/hlsl/discard.shader_test b/tests/hlsl/discard.shader_test index d71c6ec27..999415bda 100644 --- a/tests/hlsl/discard.shader_test +++ b/tests/hlsl/discard.shader_test @@ -68,12 +68,12 @@ float4 main(float4 pos : sv_position) : sv_target [test] uniform 0 float4 1 2 3 4 -todo(glsl) draw quad +todo(glsl | msl) draw quad probe (0, 0) f32(1, 2, 3, 4) probe uav 1 (0, 0) f32(1.0) probe uav 1 (1, 0) f32(1.0) uniform 0 float4 9 8 7 6 -todo(glsl) draw quad +todo(glsl | msl) draw quad probe (0, 0) f32(1, 2, 3, 4) probe uav 1 (0, 0) f32(2.0) probe uav 1 (1, 0) f32(1.0) diff --git a/tests/hlsl/numthreads.shader_test b/tests/hlsl/numthreads.shader_test index 5e906b953..942a7a5e5 100644 --- a/tests/hlsl/numthreads.shader_test +++ b/tests/hlsl/numthreads.shader_test @@ -219,7 +219,7 @@ void main(uint2 id : sv_dispatchthreadid) } [test] -dispatch 1 1 1 +todo(msl) dispatch 1 1 1 probe uav 0 (0, 0) f32(2.0) if(sm<6) probe uav 0 (0, 1) f32(1.0) if(sm<6) probe uav 0 (1, 0) f32(2.0) diff --git a/tests/hlsl/sm6-uav-rwtexture.shader_test b/tests/hlsl/sm6-uav-rwtexture.shader_test index a9b4136e4..1e170cec2 100644 --- a/tests/hlsl/sm6-uav-rwtexture.shader_test +++ b/tests/hlsl/sm6-uav-rwtexture.shader_test @@ -26,7 +26,7 @@ float4 main() : sv_target } [test] -draw quad +todo(msl) draw quad probe uav 1 (0, 0) f32(1.0, 2.0, 3.0, 4.0) [pixel shader fail] diff --git a/tests/hlsl/uav-load.shader_test b/tests/hlsl/uav-load.shader_test index 0b534e16a..73f69b4a0 100644 --- a/tests/hlsl/uav-load.shader_test +++ b/tests/hlsl/uav-load.shader_test @@ -24,7 +24,7 @@ void main() } [test] -dispatch 1 1 1 +todo(msl) dispatch 1 1 1 probe uav 0 (0, 0) f32(0.6) probe uav 0 (1, 0) f32(0.6) probe uav 0 (2, 0) f32(0.6) diff --git a/tests/hlsl/wave-reconvergence.shader_test b/tests/hlsl/wave-reconvergence.shader_test index 35685897e..29f45abe4 100644 --- a/tests/hlsl/wave-reconvergence.shader_test +++ b/tests/hlsl/wave-reconvergence.shader_test @@ -62,7 +62,7 @@ void main(uint id : SV_GroupIndex) } [test] -dispatch 1 1 1 +todo(msl) dispatch 1 1 1 probe uav 2 (0) u32(0xf01) bug(mvk) probe uav 2 (1) u32(0x503) probe uav 2 (2) u32(0x511) @@ -130,7 +130,7 @@ void main(uint id : SV_GroupIndex) } [test] -dispatch 1 1 1 +todo(msl) dispatch 1 1 1 probe uav 2 (0) u32(0x701) bug(mvk) probe uav 2 (1) u32(0x503) probe uav 2 (2) u32(0x511) diff --git a/tests/shader_runner_metal.m b/tests/shader_runner_metal.m index 97360d151..ee67e7840 100644 --- a/tests/shader_runner_metal.m +++ b/tests/shader_runner_metal.m @@ -1192,6 +1192,32 @@ static bool metal_runner_init(struct metal_runner *runner) runner->caps.tags[0] = "msl"; runner->caps.tag_count = 1; + if (runner->device.readWriteTextureSupport >= MTLReadWriteTextureTier1) + { + runner->caps.format_caps[DXGI_FORMAT_R32_UINT] |= FORMAT_CAP_UAV_LOAD; + runner->caps.format_caps[DXGI_FORMAT_R32_SINT] |= FORMAT_CAP_UAV_LOAD; + runner->caps.format_caps[DXGI_FORMAT_R32_FLOAT] |= FORMAT_CAP_UAV_LOAD; + } + + if (runner->device.readWriteTextureSupport >= MTLReadWriteTextureTier2) + { + runner->caps.format_caps[DXGI_FORMAT_R32G32B32A32_UINT] |= FORMAT_CAP_UAV_LOAD; + runner->caps.format_caps[DXGI_FORMAT_R32G32B32A32_SINT] |= FORMAT_CAP_UAV_LOAD; + runner->caps.format_caps[DXGI_FORMAT_R32G32B32A32_FLOAT] |= FORMAT_CAP_UAV_LOAD; + runner->caps.format_caps[DXGI_FORMAT_R16G16B16A16_UINT] |= FORMAT_CAP_UAV_LOAD; + runner->caps.format_caps[DXGI_FORMAT_R16G16B16A16_SINT] |= FORMAT_CAP_UAV_LOAD; + runner->caps.format_caps[DXGI_FORMAT_R16G16B16A16_FLOAT] |= FORMAT_CAP_UAV_LOAD; + runner->caps.format_caps[DXGI_FORMAT_R8G8B8A8_UNORM] |= FORMAT_CAP_UAV_LOAD; + runner->caps.format_caps[DXGI_FORMAT_R8G8B8A8_UINT] |= FORMAT_CAP_UAV_LOAD; + runner->caps.format_caps[DXGI_FORMAT_R8G8B8A8_SINT] |= FORMAT_CAP_UAV_LOAD; + runner->caps.format_caps[DXGI_FORMAT_R16_UINT] |= FORMAT_CAP_UAV_LOAD; + runner->caps.format_caps[DXGI_FORMAT_R16_SINT] |= FORMAT_CAP_UAV_LOAD; + runner->caps.format_caps[DXGI_FORMAT_R16_FLOAT] |= FORMAT_CAP_UAV_LOAD; + runner->caps.format_caps[DXGI_FORMAT_R8_UNORM] |= FORMAT_CAP_UAV_LOAD; + runner->caps.format_caps[DXGI_FORMAT_R8_UINT] |= FORMAT_CAP_UAV_LOAD; + runner->caps.format_caps[DXGI_FORMAT_R8_SINT] |= FORMAT_CAP_UAV_LOAD; + } + return true; }