/* * Copyright 2018 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef GrMtlCopyManager_DEFINED #define GrMtlCopyManager_DEFINED #include "GrTypes.h" #import <metal/metal.h> class GrMtlCopyPipelineState; class GrMtlGpu; class GrSurface; struct SkIPoint; struct SkIRect; class GrMtlCopyManager { public: GrMtlCopyManager(GrMtlGpu* gpu) : fGpu(gpu) {} bool copySurfaceAsDraw(GrSurface* dst, GrSurfaceOrigin dstOrigin, GrSurface* src, GrSurfaceOrigin srcOrigin, const SkIRect& srcRect, const SkIPoint& dstPoint, bool canDiscardOutsideDstRect); static bool IsCompatible(const GrMtlCopyPipelineState*, MTLPixelFormat dstPixelFormat); private: enum BufferIndex { kUniform_BufferIndex, kAttribute_BufferIndex, }; void createCopyProgramBuffer(); void createCopyProgramShaders(); void createCopyProgramVertexDescriptor(); void createCopyProgram(); id<MTLSamplerState> fSamplerState; id<MTLBuffer> fVertexAttributeBuffer; id<MTLFunction> fVertexFunction; id<MTLFunction> fFragmentFunction; MTLVertexDescriptor* fVertexDescriptor; GrMtlGpu* fGpu; }; #endif