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