From 2d90f51d57724e846e2ab4b8674262cfbfa7920e Mon Sep 17 00:00:00 2001 From: Henri Verbeet Date: Mon, 26 May 2025 22:14:07 +0200 Subject: [PATCH] tests/shader_runner_metal: Implement resource copies. --- tests/hlsl/texture-load.shader_test | 2 +- tests/shader_runner_metal.m | 23 ++++++++++++++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/tests/hlsl/texture-load.shader_test b/tests/hlsl/texture-load.shader_test index fe4ab9588..e2b85eb05 100644 --- a/tests/hlsl/texture-load.shader_test +++ b/tests/hlsl/texture-load.shader_test @@ -169,7 +169,7 @@ float4 main(uint id : sv_sampleindex) : sv_target clear rtv 0 0.0 0.0 0.0 0.0 draw quad probe (32, 32) rgba(3.75, 0.25, 0.5, 1.0) -todo(msl) copy rtv 0 srv 0 +copy rtv 0 srv 0 [rtv 0] format r32g32b32a32-float diff --git a/tests/shader_runner_metal.m b/tests/shader_runner_metal.m index dbcd3541d..fb5d01490 100644 --- a/tests/shader_runner_metal.m +++ b/tests/shader_runner_metal.m @@ -781,7 +781,28 @@ done: static bool metal_runner_copy(struct shader_runner *r, struct resource *src, struct resource *dst) { - return false; + struct metal_resource *s = metal_resource(src); + struct metal_resource *d = metal_resource(dst); + struct metal_runner *runner = metal_runner(r); + id command_buffer; + id blit; + + if (src->desc.dimension == RESOURCE_DIMENSION_BUFFER) + return false; + + @autoreleasepool + { + command_buffer = [runner->queue commandBuffer]; + + blit = [command_buffer blitCommandEncoder]; + [blit copyFromTexture:s->texture toTexture:d->texture]; + [blit endEncoding]; + + [command_buffer commit]; + [command_buffer waitUntilCompleted]; + } + + return true; } static struct resource_readback *metal_runner_get_resource_readback(struct shader_runner *r,