/* * 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 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 fSamplerState; id fVertexAttributeBuffer; id fVertexFunction; id fFragmentFunction; MTLVertexDescriptor* fVertexDescriptor; GrMtlGpu* fGpu; }; #endif