/* * Copyright 2021 Google LLC * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "tools/graphite/mtl/GraphiteMtlTestContext.h" #include "experimental/graphite/include/Context.h" #include "experimental/graphite/include/mtl/MtlTypes.h" #ifdef SK_METAL #import namespace skiatest::graphite::mtl { std::unique_ptr TestContext::Make() { sk_cfp> device; #ifdef SK_BUILD_FOR_MAC sk_cfp>*> availableDevices(MTLCopyAllDevices()); // Choose the non-integrated CPU if available for (id dev in availableDevices.get()) { if (!dev.isLowPower) { // This retain is necessary because when the NSArray goes away it will delete the // device entry otherwise. device.retain(dev); break; } if (dev.isRemovable) { device.retain(dev); break; } } if (!device) { device.reset(MTLCreateSystemDefaultDevice()); } #else device.reset(MTLCreateSystemDefaultDevice()); #endif skgpu::mtl::BackendContext backendContext = {}; backendContext.fDevice.retain(device.get()); backendContext.fQueue.reset([*device newCommandQueue]); return std::unique_ptr(new TestContext(backendContext)); } std::unique_ptr TestContext::makeContext() { return skgpu::Context::MakeMetal(fMtl); } } // namespace skiatest::graphite::mtl #endif // SK_METAL