xref: /aosp_15_r20/external/skia/src/gpu/ganesh/mtl/GrMtlDirectContext.mm (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1/*
2 * Copyright 2024 Google LLC
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#include "include/gpu/ganesh/mtl/GrMtlDirectContext.h"
8
9#include "include/gpu/ganesh/GrDirectContext.h"
10#include "include/gpu/ganesh/mtl/GrMtlBackendContext.h"
11#include "src/gpu/ganesh/GrContextThreadSafeProxyPriv.h"
12#include "src/gpu/ganesh/GrDirectContextPriv.h"
13#include "src/gpu/ganesh/mtl/GrMtlTrampoline.h"
14
15namespace GrDirectContexts {
16sk_sp<GrDirectContext> MakeMetal(const GrMtlBackendContext& backendContext) {
17    GrContextOptions defaultOptions;
18    return MakeMetal(backendContext, defaultOptions);
19}
20
21sk_sp<GrDirectContext> MakeMetal(const GrMtlBackendContext& backendContext,
22                                 const GrContextOptions& options) {
23    sk_sp<GrDirectContext> direct = GrDirectContextPriv::Make(
24            GrBackendApi::kMetal,
25            options,
26            GrContextThreadSafeProxyPriv::Make(GrBackendApi::kMetal, options));
27
28    GrDirectContextPriv::SetGpu(direct,
29                                GrMtlTrampoline::MakeGpu(backendContext, options, direct.get()));
30    if (!GrDirectContextPriv::Init(direct)) {
31        return nullptr;
32    }
33
34    return direct;
35}
36}  // namespace GrDirectContexts
37