From 0a28abd8f641aafb6c46fb45ad6469711984316e Mon Sep 17 00:00:00 2001 From: Henri Verbeet Date: Thu, 22 May 2025 22:34:43 +0200 Subject: [PATCH] tests/shader_runner_metal: Try harder to find a suitable device. --- tests/shader_runner_metal.m | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/tests/shader_runner_metal.m b/tests/shader_runner_metal.m index 3eec87b4b..7d759b3f7 100644 --- a/tests/shader_runner_metal.m +++ b/tests/shader_runner_metal.m @@ -888,25 +888,31 @@ static bool metal_runner_init(struct metal_runner *runner) memset(runner, 0, sizeof(*runner)); devices = MTLCopyAllDevices(); - if (![devices count]) + for (device in devices) { - skip("Failed to find a usable Metal device.\n"); - [devices release]; - return false; + if (!check_argument_buffer_support(device)) + { + trace("Ignoring device \"%s\" because it doesn't have usable argument buffer support.\n", + [[device name] UTF8String]); + continue; + } + + if (!runner->device + || (!device.lowPower && runner->device.lowPower) + || (!device.removable && runner->device.removable)) + runner->device = device; } - device = [devices objectAtIndex:0]; - runner->device = [device retain]; + device = [runner->device retain]; [devices release]; - trace("GPU: %s\n", [[device name] UTF8String]); - - if (!check_argument_buffer_support(device)) + if (!device) { - skip("Device does not have usable argument buffer support.\n"); - [device release]; + skip("Failed to find a suitable Metal device.\n"); return false; } + trace("GPU: %s\n", [[device name] UTF8String]); + if (!(runner->queue = [device newCommandQueue])) { skip("Failed to create command queue.\n");