/*
 * Copyright 2021 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#include "src/gpu/graphite/mtl/MtlTrampoline.h"

#include "src/gpu/graphite/GlobalCache.h"
#include "src/gpu/graphite/mtl/MtlQueueManager.h"
#include "src/gpu/graphite/mtl/MtlResourceProvider.h"
#include "src/gpu/graphite/mtl/MtlSharedContext.h"

namespace skgpu::graphite {

sk_sp<SharedContext> MtlTrampoline::MakeSharedContext(const MtlBackendContext& backendContext,
                                                      const ContextOptions& options) {
    return MtlSharedContext::Make(backendContext, options);
}

std::unique_ptr<QueueManager> MtlTrampoline::MakeQueueManager(
        const MtlBackendContext& backendContext, const SharedContext* sharedContext) {

    sk_cfp<id<MTLCommandQueue>> queue =
            sk_ret_cfp((id<MTLCommandQueue>)(backendContext.fQueue.get()));
    return std::make_unique<MtlQueueManager>(std::move(queue), sharedContext);
}

std::unique_ptr<ResourceProvider> MtlTrampoline::MakeResourceProvider(
        const SharedContext* sharedContext,
        sk_sp<GlobalCache> globalCache,
        SingleOwner* singleOwner) {
    return std::make_unique<MtlResourceProvider>(sharedContext,
                                                 std::move(globalCache),
                                                 singleOwner);
}

}  // namespace skgpu::graphite
