• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #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 
16 #include "GrMtlCaps.h"
17 
18 #import <Metal/Metal.h>
19 
20 class GrSemaphore;
21 struct GrMtlBackendContext;
22 
23 class GrMtlGpu : public GrGpu {
24 public:
25     static sk_sp<GrGpu> Make(GrContext* context, const GrContextOptions& options,
26                              id<MTLDevice> device, id<MTLCommandQueue> queue);
27 
~GrMtlGpu()28     ~GrMtlGpu() override {}
29 
mtlCaps()30     const GrMtlCaps& mtlCaps() const { return *fMtlCaps.get(); }
31 
device()32     id<MTLDevice> device() const { return fDevice; }
33 
onGetReadPixelsInfo(GrSurface * srcSurface,GrSurfaceOrigin origin,int readWidth,int readHeight,size_t rowBytes,GrPixelConfig readConfig,DrawPreference *,ReadPixelTempDrawInfo *)34     bool onGetReadPixelsInfo(GrSurface* srcSurface, GrSurfaceOrigin origin,
35                              int readWidth, int readHeight, size_t rowBytes,
36                              GrPixelConfig readConfig, DrawPreference*,
37                              ReadPixelTempDrawInfo*) override { return false; }
38 
onGetWritePixelsInfo(GrSurface * dstSurface,GrSurfaceOrigin dstOrigin,int width,int height,GrPixelConfig srcConfig,DrawPreference *,WritePixelTempDrawInfo *)39     bool onGetWritePixelsInfo(GrSurface* dstSurface, GrSurfaceOrigin dstOrigin,
40                               int width, int height,
41                               GrPixelConfig srcConfig, DrawPreference*,
42                               WritePixelTempDrawInfo*) override { return false; }
43 
onCopySurface(GrSurface * dst,GrSurfaceOrigin dstOrigin,GrSurface * src,GrSurfaceOrigin srcOrigin,const SkIRect & srcRect,const SkIPoint & dstPoint,bool canDiscardOutsideDstRect)44     bool onCopySurface(GrSurface* dst, GrSurfaceOrigin dstOrigin,
45                        GrSurface* src, GrSurfaceOrigin srcOrigin,
46                        const SkIRect& srcRect,
47                        const SkIPoint& dstPoint,
48                        bool canDiscardOutsideDstRect) override { return false; }
49 
onQueryMultisampleSpecs(GrRenderTarget *,GrSurfaceOrigin,const GrStencilSettings &,int * effectiveSampleCnt,SamplePattern *)50     void onQueryMultisampleSpecs(GrRenderTarget*, GrSurfaceOrigin, const GrStencilSettings&,
51                                  int* effectiveSampleCnt, SamplePattern*) override {}
52 
createCommandBuffer(GrRenderTarget *,GrSurfaceOrigin,const GrGpuRTCommandBuffer::LoadAndStoreInfo &,const GrGpuRTCommandBuffer::StencilLoadAndStoreInfo &)53     GrGpuRTCommandBuffer* createCommandBuffer(
54                                     GrRenderTarget*, GrSurfaceOrigin,
55                                     const GrGpuRTCommandBuffer::LoadAndStoreInfo&,
56                                     const GrGpuRTCommandBuffer::StencilLoadAndStoreInfo&) override {
57         return nullptr;
58     }
59 
createCommandBuffer(GrTexture *,GrSurfaceOrigin)60     GrGpuTextureCommandBuffer* createCommandBuffer(GrTexture*, GrSurfaceOrigin) override {
61         return nullptr;
62     }
63 
insertFence()64     GrFence SK_WARN_UNUSED_RESULT insertFence() override { return 0; }
waitFence(GrFence,uint64_t)65     bool waitFence(GrFence, uint64_t) override { return true; }
deleteFence(GrFence)66     void deleteFence(GrFence) const override {}
67 
makeSemaphore(bool isOwned)68     sk_sp<GrSemaphore> SK_WARN_UNUSED_RESULT makeSemaphore(bool isOwned) override {
69         return nullptr;
70     }
wrapBackendSemaphore(const GrBackendSemaphore & semaphore,GrResourceProvider::SemaphoreWrapType wrapType,GrWrapOwnership ownership)71     sk_sp<GrSemaphore> wrapBackendSemaphore(const GrBackendSemaphore& semaphore,
72                                             GrResourceProvider::SemaphoreWrapType wrapType,
73                                             GrWrapOwnership ownership) override { return nullptr; }
insertSemaphore(sk_sp<GrSemaphore> semaphore,bool flush)74     void insertSemaphore(sk_sp<GrSemaphore> semaphore, bool flush) override {}
waitSemaphore(sk_sp<GrSemaphore> semaphore)75     void waitSemaphore(sk_sp<GrSemaphore> semaphore) override {}
prepareTextureForCrossContextUsage(GrTexture *)76     sk_sp<GrSemaphore> prepareTextureForCrossContextUsage(GrTexture*) override { return nullptr; }
77 
78 private:
79     GrMtlGpu(GrContext* context, const GrContextOptions& options,
80              id<MTLDevice> device, id<MTLCommandQueue> queue, MTLFeatureSet featureSet);
81 
onResetContext(uint32_t resetBits)82     void onResetContext(uint32_t resetBits) override {}
83 
xferBarrier(GrRenderTarget *,GrXferBarrierType)84     void xferBarrier(GrRenderTarget*, GrXferBarrierType) override {}
85 
86     sk_sp<GrTexture> onCreateTexture(const GrSurfaceDesc& desc, SkBudgeted budgeted,
87                                      const GrMipLevel texels[], int mipLevelCount) override;
88 
onWrapBackendTexture(const GrBackendTexture &,GrWrapOwnership)89     sk_sp<GrTexture> onWrapBackendTexture(const GrBackendTexture&, GrWrapOwnership) override {
90         return nullptr;
91     }
92 
onWrapRenderableBackendTexture(const GrBackendTexture &,int sampleCnt,GrWrapOwnership)93     sk_sp<GrTexture> onWrapRenderableBackendTexture(const GrBackendTexture&,
94                                                     int sampleCnt,
95                                                     GrWrapOwnership) override {
96         return nullptr;
97     }
98 
onWrapBackendRenderTarget(const GrBackendRenderTarget &)99     sk_sp<GrRenderTarget> onWrapBackendRenderTarget(const GrBackendRenderTarget&) override {
100         return nullptr;
101     }
102 
onWrapBackendTextureAsRenderTarget(const GrBackendTexture &,int sampleCnt)103     sk_sp<GrRenderTarget> onWrapBackendTextureAsRenderTarget(const GrBackendTexture&,
104                                                              int sampleCnt) override {
105         return nullptr;
106     }
107 
onCreateBuffer(size_t,GrBufferType,GrAccessPattern,const void *)108     GrBuffer* onCreateBuffer(size_t, GrBufferType, GrAccessPattern, const void*) override {
109         return nullptr;
110     }
111 
onReadPixels(GrSurface * surface,GrSurfaceOrigin,int left,int top,int width,int height,GrPixelConfig,void * buffer,size_t rowBytes)112     bool onReadPixels(GrSurface* surface, GrSurfaceOrigin,
113                       int left, int top, int width, int height,
114                       GrPixelConfig,
115                       void* buffer,
116                       size_t rowBytes) override {
117         return false;
118     }
119 
onWritePixels(GrSurface * surface,GrSurfaceOrigin,int left,int top,int width,int height,GrPixelConfig config,const GrMipLevel texels[],int mipLevelCount)120     bool onWritePixels(GrSurface* surface, GrSurfaceOrigin,
121                        int left, int top, int width, int height,
122                        GrPixelConfig config,
123                        const GrMipLevel texels[], int mipLevelCount) override {
124         return false;
125     }
126 
onTransferPixels(GrTexture * texture,int left,int top,int width,int height,GrPixelConfig config,GrBuffer * transferBuffer,size_t offset,size_t rowBytes)127     bool onTransferPixels(GrTexture* texture,
128                           int left, int top, int width, int height,
129                           GrPixelConfig config, GrBuffer* transferBuffer,
130                           size_t offset, size_t rowBytes) override {
131         return false;
132     }
133 
onResolveRenderTarget(GrRenderTarget * target,GrSurfaceOrigin)134     void onResolveRenderTarget(GrRenderTarget* target, GrSurfaceOrigin) override { return; }
135 
onFinishFlush(bool insertedSemaphores)136     void onFinishFlush(bool insertedSemaphores) override {}
137 
createStencilAttachmentForRenderTarget(const GrRenderTarget *,int width,int height)138     GrStencilAttachment* createStencilAttachmentForRenderTarget(const GrRenderTarget*,
139                                                                 int width,
140                                                                 int height) override {
141         return nullptr;
142     }
143 
clearStencil(GrRenderTarget * target,int clearValue)144     void clearStencil(GrRenderTarget* target, int clearValue) override  {}
145 
createTestingOnlyBackendTexture(void * pixels,int w,int h,GrPixelConfig config,bool isRT,GrMipMapped)146     GrBackendTexture createTestingOnlyBackendTexture(void* pixels, int w, int h,
147                                                      GrPixelConfig config, bool isRT,
148                                                      GrMipMapped) override {
149         return GrBackendTexture();
150     }
isTestingOnlyBackendTexture(const GrBackendTexture &)151     bool isTestingOnlyBackendTexture(const GrBackendTexture&) const override { return false; }
152     void deleteTestingOnlyBackendTexture(GrBackendTexture*, bool abandon = false) override {}
153 
testingOnly_flushGpuAndSync()154     void testingOnly_flushGpuAndSync() override {}
155 
156     sk_sp<GrMtlCaps> fMtlCaps;
157 
158     id<MTLDevice> fDevice;
159     id<MTLCommandQueue> fQueue;
160 
161 
162     typedef GrGpu INHERITED;
163 };
164 
165 #endif
166 
167