blob: 53c214943f2a5f58bcbbfe506001e43fe544f9c6 [file] [log] [blame]
Greg Daniele5ddff52017-07-05 16:49:36 -04001/*
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#ifndef GrMtlGpu_DEFINED
9#define GrMtlGpu_DEFINED
10
11#include "GrGpu.h"
12#include "GrRenderTarget.h"
13#include "GrSemaphore.h"
14#include "GrTexture.h"
15
Greg Danielcebcb842017-07-31 10:45:52 -040016#include "GrMtlCaps.h"
17
Greg Daniele5ddff52017-07-05 16:49:36 -040018#import <Metal/Metal.h>
19
20class GrSemaphore;
Greg Danielb76a72a2017-07-13 15:07:54 -040021struct GrMtlBackendContext;
Greg Daniele5ddff52017-07-05 16:49:36 -040022
23class GrMtlGpu : public GrGpu {
24public:
Greg Danielb76a72a2017-07-13 15:07:54 -040025 static GrGpu* Create(GrContext* context, const GrContextOptions& options,
26 id<MTLDevice> device, id<MTLCommandQueue> queue);
Greg Daniele5ddff52017-07-05 16:49:36 -040027
28 ~GrMtlGpu() override {}
Greg Danielcebcb842017-07-31 10:45:52 -040029
30 const GrMtlCaps& mtlCaps() const { return *fMtlCaps.get(); }
Greg Daniele5ddff52017-07-05 16:49:36 -040031
Robert Phillips7294b852017-08-01 13:51:44 +000032 bool onGetReadPixelsInfo(GrSurface* srcSurface, int readWidth, int readHeight, size_t rowBytes,
Greg Daniele5ddff52017-07-05 16:49:36 -040033 GrPixelConfig readConfig, DrawPreference*,
34 ReadPixelTempDrawInfo*) override { return false; }
35
Robert Phillips7294b852017-08-01 13:51:44 +000036 bool onGetWritePixelsInfo(GrSurface* dstSurface, int width, int height,
Greg Daniele5ddff52017-07-05 16:49:36 -040037 GrPixelConfig srcConfig, DrawPreference*,
38 WritePixelTempDrawInfo*) override { return false; }
39
Robert Phillips7294b852017-08-01 13:51:44 +000040 bool onCopySurface(GrSurface* dst,
41 GrSurface* src,
Greg Daniele5ddff52017-07-05 16:49:36 -040042 const SkIRect& srcRect,
43 const SkIPoint& dstPoint) override { return false; }
44
Robert Phillips7294b852017-08-01 13:51:44 +000045 void onQueryMultisampleSpecs(GrRenderTarget* rt, const GrStencilSettings&,
Greg Daniele5ddff52017-07-05 16:49:36 -040046 int* effectiveSampleCnt, SamplePattern*) override {}
47
48 GrGpuCommandBuffer* createCommandBuffer(const GrGpuCommandBuffer::LoadAndStoreInfo&,
49 const GrGpuCommandBuffer::LoadAndStoreInfo&) override {
50 return nullptr;
51 }
52
53 GrFence SK_WARN_UNUSED_RESULT insertFence() override { return 0; }
54 bool waitFence(GrFence, uint64_t) override { return true; }
55 void deleteFence(GrFence) const override {}
56
57 sk_sp<GrSemaphore> SK_WARN_UNUSED_RESULT makeSemaphore(bool isOwned) override {
58 return nullptr;
59 }
60 sk_sp<GrSemaphore> wrapBackendSemaphore(const GrBackendSemaphore& semaphore,
61 GrWrapOwnership ownership) override { return nullptr; }
62 void insertSemaphore(sk_sp<GrSemaphore> semaphore, bool flush) override {}
63 void waitSemaphore(sk_sp<GrSemaphore> semaphore) override {}
64 sk_sp<GrSemaphore> prepareTextureForCrossContextUsage(GrTexture*) override { return nullptr; }
65
66private:
Greg Danielb76a72a2017-07-13 15:07:54 -040067 GrMtlGpu(GrContext* context, const GrContextOptions& options,
Greg Danielcebcb842017-07-31 10:45:52 -040068 id<MTLDevice> device, id<MTLCommandQueue> queue, MTLFeatureSet featureSet);
Greg Daniele5ddff52017-07-05 16:49:36 -040069
70 void onResetContext(uint32_t resetBits) override {}
71
72 void xferBarrier(GrRenderTarget*, GrXferBarrierType) override {}
73
74 sk_sp<GrTexture> onCreateTexture(const GrSurfaceDesc& desc, SkBudgeted budgeted,
Robert Phillips590533f2017-07-11 14:22:35 -040075 const GrMipLevel texels[], int mipLevelCount) override {
Greg Daniele5ddff52017-07-05 16:49:36 -040076 return nullptr;
77 }
78
Robert Phillips7294b852017-08-01 13:51:44 +000079 sk_sp<GrTexture> onWrapBackendTexture(const GrBackendTexture&,
80 GrSurfaceOrigin,
81 GrWrapOwnership) override {
Greg Daniele5ddff52017-07-05 16:49:36 -040082 return nullptr;
83 }
84
Brian Salomond17f6582017-07-19 18:28:58 -040085 sk_sp<GrTexture> onWrapRenderableBackendTexture(const GrBackendTexture&,
Robert Phillips7294b852017-08-01 13:51:44 +000086 GrSurfaceOrigin,
Brian Salomond17f6582017-07-19 18:28:58 -040087 int sampleCnt,
88 GrWrapOwnership) override {
89 return nullptr;
90 }
91
Robert Phillips7294b852017-08-01 13:51:44 +000092 sk_sp<GrRenderTarget> onWrapBackendRenderTarget(const GrBackendRenderTarget&,
93 GrSurfaceOrigin) override {
Greg Daniele5ddff52017-07-05 16:49:36 -040094 return nullptr;
95 }
96
97 sk_sp<GrRenderTarget> onWrapBackendTextureAsRenderTarget(const GrBackendTexture&,
Robert Phillips7294b852017-08-01 13:51:44 +000098 GrSurfaceOrigin,
Greg Daniele5ddff52017-07-05 16:49:36 -040099 int sampleCnt) override {
100 return nullptr;
101 }
102
103 GrBuffer* onCreateBuffer(size_t, GrBufferType, GrAccessPattern, const void*) override {
104 return nullptr;
105 }
106
107 gr_instanced::InstancedRendering* onCreateInstancedRendering() override { return nullptr; }
108
Robert Phillips7294b852017-08-01 13:51:44 +0000109 bool onReadPixels(GrSurface* surface,
Greg Daniele5ddff52017-07-05 16:49:36 -0400110 int left, int top, int width, int height,
111 GrPixelConfig,
112 void* buffer,
113 size_t rowBytes) override {
114 return false;
115 }
116
Robert Phillips7294b852017-08-01 13:51:44 +0000117 bool onWritePixels(GrSurface* surface,
Greg Daniele5ddff52017-07-05 16:49:36 -0400118 int left, int top, int width, int height,
Robert Phillips590533f2017-07-11 14:22:35 -0400119 GrPixelConfig config,
120 const GrMipLevel texels[], int mipLevelCount) override {
Greg Daniele5ddff52017-07-05 16:49:36 -0400121 return false;
122 }
123
124 bool onTransferPixels(GrTexture* texture,
125 int left, int top, int width, int height,
126 GrPixelConfig config, GrBuffer* transferBuffer,
127 size_t offset, size_t rowBytes) override {
128 return false;
129 }
130
Robert Phillips7294b852017-08-01 13:51:44 +0000131 void onResolveRenderTarget(GrRenderTarget* target) override { return; }
Greg Daniele5ddff52017-07-05 16:49:36 -0400132
133 GrStencilAttachment* createStencilAttachmentForRenderTarget(const GrRenderTarget*,
134 int width,
135 int height) override {
136 return nullptr;
137 }
138
139 void clearStencil(GrRenderTarget* target) override {}
140
141 GrBackendObject createTestingOnlyBackendTexture(void* pixels, int w, int h,
142 GrPixelConfig config, bool isRT) override {
143 return 0;
144 }
145 bool isTestingOnlyBackendTexture(GrBackendObject ) const override { return false; }
146 void deleteTestingOnlyBackendTexture(GrBackendObject, bool abandonTexture) override {}
147
Greg Danielcebcb842017-07-31 10:45:52 -0400148 sk_sp<GrMtlCaps> fMtlCaps;
149
Greg Danielb76a72a2017-07-13 15:07:54 -0400150 id<MTLDevice> fDevice;
151 id<MTLCommandQueue> fQueue;
152
Greg Daniele5ddff52017-07-05 16:49:36 -0400153
154 typedef GrGpu INHERITED;
155};
156
157#endif
158