8#ifndef GrMtlGpu_DEFINED
9#define GrMtlGpu_DEFINED
28#import <Metal/Metal.h>
49 id<MTLDevice>
device()
const {
return fDevice; }
68#if defined(GR_TEST_UTILS)
77 void resetShaderCacheForTesting()
const override {
78 fResourceProvider.resetShaderCacheForTesting();
94 [[nodiscard]] std::unique_ptr<GrSemaphore>
makeSemaphore(
bool isOwned)
override;
107 MTLRenderPassStencilAttachmentDescriptor*);
123 void destroyResources();
134 std::string_view label)
override;
138 std::array<float, 4>
color)
override;
148 size_t size)
override;
153 int renderTargetSampleCnt,
157 uint32_t levelClearMask,
158 std::string_view label)
override;
165 size_t dataSize)
override;
190 size_t rowBytes)
override;
196 size_t size)
override;
204 bool prepForTexSampling)
override;
212 size_t rowBytes)
override;
247 bool submitCommandBuffer(
SyncQueue sync);
249 void checkForFinishedCommandBuffers();
259 bool clearTexture(
GrMtlTexture*,
size_t bbp, uint32_t levelMask);
264 id<MTLBuffer> transferBuffer,
270 SkISize dimensions,
int numStencilSamples)
override;
282 bool createMtlTextureForBackendSurface(MTLPixelFormat,
290#if defined(GR_TEST_UTILS)
291 void testingOnly_startCapture()
override;
292 void testingOnly_stopCapture()
override;
295#ifdef SK_ENABLE_DUMP_GPU
301 id<MTLDevice> fDevice;
302 id<MTLCommandQueue> fQueue;
307 SkDeque fOutstandingCommandBuffers;
315 using INHERITED =
GrGpu;
void * GrGpuFinishedContext
void(* GrGpuFinishedProc)(GrGpuFinishedContext finishedContext)
void didWriteToSurface(GrSurface *surface, GrSurfaceOrigin origin, const SkIRect *bounds, uint32_t mipLevels=1) const
bool onCopySurface(GrSurface *dst, const SkIRect &dstRect, GrSurface *src, const SkIRect &srcRect, GrSamplerState::Filter) override
sk_sp< GrTexture > onCreateTexture(SkISize, const GrBackendFormat &, GrRenderable, int renderTargetSampleCnt, skgpu::Budgeted, GrProtected, int mipLevelCount, uint32_t levelClearMask, std::string_view label) override
sk_sp< GrThreadSafePipelineBuilder > refPipelineBuilder() override
std::unique_ptr< GrSemaphore > wrapBackendSemaphore(const GrBackendSemaphore &, GrSemaphoreWrapType, GrWrapOwnership) override
GrRingBuffer * uniformsRingBuffer() override
sk_sp< GrRenderTarget > onWrapBackendRenderTarget(const GrBackendRenderTarget &) override
sk_sp< GrTexture > onWrapBackendTexture(const GrBackendTexture &, GrWrapOwnership, GrWrapCacheable, GrIOType) override
GrBackendTexture onCreateCompressedBackendTexture(SkISize dimensions, const GrBackendFormat &, skgpu::Mipmapped, GrProtected) override
bool precompileShader(const SkData &key, const SkData &data) override
sk_sp< GrAttachment > makeMSAAAttachment(SkISize dimensions, const GrBackendFormat &format, int numSamples, GrProtected isProtected, GrMemoryless isMemoryless) override
GrBackendTexture onCreateBackendTexture(SkISize dimensions, const GrBackendFormat &, GrRenderable, skgpu::Mipmapped, GrProtected, std::string_view label) override
void onResolveRenderTarget(GrRenderTarget *target, const SkIRect &resolveRect) override
void takeOwnershipOfBuffer(sk_sp< GrGpuBuffer >) override
bool onTransferPixelsFrom(GrSurface *, SkIRect, GrColorType surfaceColorType, GrColorType bufferColorType, sk_sp< GrGpuBuffer >, size_t offset) override
bool onWritePixels(GrSurface *, SkIRect, GrColorType surfaceColorType, GrColorType bufferColorType, const GrMipLevel[], int mipLevelCount, bool prepForTexSampling) override
GrMtlRenderCommandEncoder * loadMSAAFromResolve(GrAttachment *dst, GrMtlAttachment *src, const SkIRect &srcRect, MTLRenderPassStencilAttachmentDescriptor *)
void insertSemaphore(GrSemaphore *semaphore) override
bool onTransferFromBufferToBuffer(sk_sp< GrGpuBuffer > src, size_t srcOffset, sk_sp< GrGpuBuffer > dst, size_t dstOffset, size_t size) override
static std::unique_ptr< GrGpu > Make(const GrMtlBackendContext &, const GrContextOptions &, GrDirectContext *)
void copySurfaceAsBlit(GrSurface *dst, GrSurface *src, GrMtlAttachment *dstAttachment, GrMtlAttachment *srcAttachment, const SkIRect &srcRect, const SkIPoint &dstPoint)
GrMtlCommandBuffer * commandBuffer()
void disconnect(DisconnectType) override
const GrMtlCaps & mtlCaps() const
void checkFinishProcs() override
sk_sp< GrTexture > onCreateCompressedTexture(SkISize dimensions, const GrBackendFormat &, skgpu::Budgeted, skgpu::Mipmapped, GrProtected, const void *data, size_t dataSize) override
void copySurfaceAsResolve(GrSurface *dst, GrSurface *src)
void deleteBackendTexture(const GrBackendTexture &) override
std::unique_ptr< GrSemaphore > prepareTextureForCrossContextUsage(GrTexture *) override
void addFinishedProc(GrGpuFinishedProc finishedProc, GrGpuFinishedContext finishedContext) override
void xferBarrier(GrRenderTarget *, GrXferBarrierType) override
GrBackendFormat getPreferredStencilFormat(const GrBackendFormat &) override
sk_sp< GrTexture > onWrapCompressedBackendTexture(const GrBackendTexture &, GrWrapOwnership, GrWrapCacheable) override
sk_sp< GrTexture > onWrapRenderableBackendTexture(const GrBackendTexture &, int sampleCnt, GrWrapOwnership, GrWrapCacheable) override
bool onSubmitToGpu(GrSyncCpu sync) override
GrOpsRenderPass * onGetOpsRenderPass(GrRenderTarget *, bool useMSAASurface, GrAttachment *, GrSurfaceOrigin, const SkIRect &, const GrOpsRenderPass::LoadAndStoreInfo &, const GrOpsRenderPass::StencilLoadAndStoreInfo &, const skia_private::TArray< GrSurfaceProxy *, true > &sampledProxies, GrXferBarrierFlags renderPassXferBarriers) override
void waitSemaphore(GrSemaphore *semaphore) override
id< MTLDevice > device() const
GrStagingBufferManager * stagingBufferManager() override
void finishOutstandingGpuWork() override
bool onTransferPixelsTo(GrTexture *, SkIRect, GrColorType textureColorType, GrColorType bufferColorType, sk_sp< GrGpuBuffer >, size_t offset, size_t rowBytes) override
bool onRegenerateMipMapLevels(GrTexture *) override
bool onUpdateCompressedBackendTexture(const GrBackendTexture &, sk_sp< skgpu::RefCntedCallback > finishedCallback, const void *data, size_t size) override
GrMtlResourceProvider & resourceProvider()
GrThreadSafePipelineBuilder * pipelineBuilder() override
void submit(GrOpsRenderPass *renderPass) override
sk_sp< GrAttachment > makeStencilAttachment(const GrBackendFormat &, SkISize dimensions, int numStencilSamples) override
bool onClearBackendTexture(const GrBackendTexture &, sk_sp< skgpu::RefCntedCallback > finishedCallback, std::array< float, 4 > color) override
bool onReadPixels(GrSurface *surface, SkIRect, GrColorType surfaceColorType, GrColorType bufferColorType, void *, size_t rowBytes) override
void submitIndirectCommandBuffer(GrSurface *surface, GrSurfaceOrigin origin, const SkIRect *bounds)
std::unique_ptr< GrSemaphore > makeSemaphore(bool isOwned) override
sk_sp< GrGpuBuffer > onCreateBuffer(size_t, GrGpuBufferType, GrAccessPattern) override
uint32_t uint32_t * format