Update rive-cpp to 2.0 version
[platform/core/uifw/rive-tizen.git] / submodule / skia / tools / gpu / mtl / MtlTestContext.mm
1 /*
2  * Copyright 2017 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7
8 #include "tools/gpu/mtl/MtlTestContext.h"
9
10 #include "include/gpu/GrContextOptions.h"
11 #include "include/gpu/GrDirectContext.h"
12
13 #include "src/gpu/ganesh/mtl/GrMtlUtil.h"
14
15 #ifdef SK_METAL
16
17 #import <Metal/Metal.h>
18
19 namespace {
20 class MtlTestContextImpl : public sk_gpu_test::MtlTestContext {
21 public:
22     static MtlTestContext* Create(MtlTestContext* sharedContext) {
23         GrMtlBackendContext backendContext = {};
24         if (sharedContext) {
25             MtlTestContextImpl* sharedContextImpl = (MtlTestContextImpl*) sharedContext;
26             backendContext = sharedContextImpl->getMtlBackendContext();
27         } else {
28             sk_cfp<id<MTLDevice>> device;
29 #ifdef SK_BUILD_FOR_MAC
30             sk_cfp<NSArray<id <MTLDevice>>*> availableDevices(MTLCopyAllDevices());
31             // Choose the non-integrated CPU if available
32             for (id<MTLDevice> dev in availableDevices.get()) {
33                 if (!dev.isLowPower) {
34                     device.retain(dev);
35                     break;
36                 }
37                 if (dev.isRemovable) {
38                     device.retain(dev);
39                     break;
40                 }
41             }
42             if (!device) {
43                 device.reset(MTLCreateSystemDefaultDevice());
44             }
45 #else
46             device.reset(MTLCreateSystemDefaultDevice());
47 #endif
48             backendContext.fDevice.retain((GrMTLHandle)device.get());
49             sk_cfp<id<MTLCommandQueue>> queue([*device newCommandQueue]);
50             backendContext.fQueue.retain((GrMTLHandle)queue.get());
51         }
52
53         return new MtlTestContextImpl(backendContext);
54     }
55
56     ~MtlTestContextImpl() override { this->teardown(); }
57
58     void testAbandon() override {}
59
60     void finish() override {}
61
62     sk_sp<GrDirectContext> makeContext(const GrContextOptions& options) override {
63         return GrDirectContext::MakeMetal(fMtl, options);
64     }
65
66 private:
67     MtlTestContextImpl(const GrMtlBackendContext& mtl)
68             : INHERITED(mtl) {
69         fFenceSupport = true;
70     }
71
72     void onPlatformMakeNotCurrent() const override {}
73     void onPlatformMakeCurrent() const override {}
74     std::function<void()> onPlatformGetAutoContextRestore() const override { return nullptr; }
75
76     using INHERITED = sk_gpu_test::MtlTestContext;
77 };
78
79 }  // anonymous namespace
80
81 namespace sk_gpu_test {
82
83 MtlTestContext* CreatePlatformMtlTestContext(MtlTestContext* sharedContext) {
84     return MtlTestContextImpl::Create(sharedContext);
85 }
86
87 }  // namespace sk_gpu_test
88
89
90 #endif