blob: b63efdb0d9d2d673f7c6f16008d6d7eb73942a0c [file] [log] [blame]
/*
* Copyright 2021 Google LLC
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef skgpu_MtlGpu_DEFINED
#define skgpu_MtlGpu_DEFINED
#include "experimental/graphite/src/Gpu.h"
#include "include/ports/SkCFObject.h"
#include "experimental/graphite/include/mtl/MtlBackendContext.h"
#include "experimental/graphite/src/mtl/MtlCaps.h"
#import <Metal/Metal.h>
namespace skgpu::mtl {
class Gpu final : public skgpu::Gpu {
public:
static sk_sp<skgpu::Gpu> Make(const BackendContext&);
~Gpu() override;
id<MTLDevice> device() const { return fDevice.get(); }
id<MTLCommandQueue> queue() const { return fQueue.get(); }
const Caps& mtlCaps() const { return static_cast<const Caps&>(*this->caps()); }
private:
Gpu(sk_cfp<id<MTLDevice>>, sk_cfp<id<MTLCommandQueue>>, sk_sp<const Caps>);
bool onSubmit(sk_sp<skgpu::CommandBuffer>) override;
#if GRAPHITE_TEST_UTILS
void testingOnly_startCapture() override;
void testingOnly_endCapture() override;
#endif
sk_cfp<id<MTLDevice>> fDevice;
sk_cfp<id<MTLCommandQueue>> fQueue;
};
} // namespace skgpu::mtl
#endif // skgpu_MtlGpu_DEFINED