1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright 2018 Google Inc. 3cb93a386Sopenharmony_ci * 4cb93a386Sopenharmony_ci * Use of this source code is governed by a BSD-style license that can be 5cb93a386Sopenharmony_ci * found in the LICENSE file. 6cb93a386Sopenharmony_ci */ 7cb93a386Sopenharmony_ci 8cb93a386Sopenharmony_ci#ifndef GrMtlAttachment_DEFINED 9cb93a386Sopenharmony_ci#define GrMtlAttachment_DEFINED 10cb93a386Sopenharmony_ci 11cb93a386Sopenharmony_ci#include "include/gpu/mtl/GrMtlTypes.h" 12cb93a386Sopenharmony_ci#include "src/gpu/GrAttachment.h" 13cb93a386Sopenharmony_ci 14cb93a386Sopenharmony_ci#import <Metal/Metal.h> 15cb93a386Sopenharmony_ci 16cb93a386Sopenharmony_ciclass GrMtlGpu; 17cb93a386Sopenharmony_ci 18cb93a386Sopenharmony_ciclass GrMtlAttachment : public GrAttachment { 19cb93a386Sopenharmony_cipublic: 20cb93a386Sopenharmony_ci static sk_sp<GrMtlAttachment> MakeStencil(GrMtlGpu* gpu, 21cb93a386Sopenharmony_ci SkISize dimensions, 22cb93a386Sopenharmony_ci int sampleCnt, 23cb93a386Sopenharmony_ci MTLPixelFormat format); 24cb93a386Sopenharmony_ci 25cb93a386Sopenharmony_ci static sk_sp<GrMtlAttachment> MakeMSAA(GrMtlGpu* gpu, 26cb93a386Sopenharmony_ci SkISize dimensions, 27cb93a386Sopenharmony_ci int sampleCnt, 28cb93a386Sopenharmony_ci MTLPixelFormat format); 29cb93a386Sopenharmony_ci 30cb93a386Sopenharmony_ci static sk_sp<GrMtlAttachment> MakeTexture(GrMtlGpu* gpu, 31cb93a386Sopenharmony_ci SkISize dimensions, 32cb93a386Sopenharmony_ci MTLPixelFormat format, 33cb93a386Sopenharmony_ci uint32_t mipLevels, 34cb93a386Sopenharmony_ci GrRenderable renderable, 35cb93a386Sopenharmony_ci int numSamples, 36cb93a386Sopenharmony_ci SkBudgeted budgeted); 37cb93a386Sopenharmony_ci 38cb93a386Sopenharmony_ci static sk_sp<GrMtlAttachment> MakeWrapped(GrMtlGpu* gpu, 39cb93a386Sopenharmony_ci SkISize dimensions, 40cb93a386Sopenharmony_ci id<MTLTexture>, 41cb93a386Sopenharmony_ci UsageFlags attachmentUsages, 42cb93a386Sopenharmony_ci GrWrapCacheable); 43cb93a386Sopenharmony_ci 44cb93a386Sopenharmony_ci ~GrMtlAttachment() override; 45cb93a386Sopenharmony_ci 46cb93a386Sopenharmony_ci GrBackendFormat backendFormat() const override { 47cb93a386Sopenharmony_ci return GrBackendFormat::MakeMtl(fTexture.pixelFormat); 48cb93a386Sopenharmony_ci } 49cb93a386Sopenharmony_ci 50cb93a386Sopenharmony_ci MTLPixelFormat mtlFormat() const { return fTexture.pixelFormat; } 51cb93a386Sopenharmony_ci 52cb93a386Sopenharmony_ci id<MTLTexture> mtlTexture() const { return fTexture; } 53cb93a386Sopenharmony_ci 54cb93a386Sopenharmony_ci unsigned int sampleCount() const { return fTexture.sampleCount; } 55cb93a386Sopenharmony_ci 56cb93a386Sopenharmony_ci bool framebufferOnly() const { return fTexture.framebufferOnly; } 57cb93a386Sopenharmony_ci 58cb93a386Sopenharmony_ciprotected: 59cb93a386Sopenharmony_ci void onRelease() override; 60cb93a386Sopenharmony_ci void onAbandon() override; 61cb93a386Sopenharmony_ci 62cb93a386Sopenharmony_ciprivate: 63cb93a386Sopenharmony_ci static sk_sp<GrMtlAttachment> Make(GrMtlGpu* gpu, 64cb93a386Sopenharmony_ci SkISize dimensions, 65cb93a386Sopenharmony_ci UsageFlags attachmentUsages, 66cb93a386Sopenharmony_ci int sampleCnt, 67cb93a386Sopenharmony_ci MTLPixelFormat format, 68cb93a386Sopenharmony_ci uint32_t mipLevels, 69cb93a386Sopenharmony_ci int mtlTextureUsage, 70cb93a386Sopenharmony_ci int mtlStorageMode, 71cb93a386Sopenharmony_ci SkBudgeted); 72cb93a386Sopenharmony_ci 73cb93a386Sopenharmony_ci GrMtlAttachment(GrMtlGpu* gpu, 74cb93a386Sopenharmony_ci SkISize dimensions, 75cb93a386Sopenharmony_ci UsageFlags supportedUsages, 76cb93a386Sopenharmony_ci id<MTLTexture> texture, 77cb93a386Sopenharmony_ci SkBudgeted); 78cb93a386Sopenharmony_ci 79cb93a386Sopenharmony_ci GrMtlAttachment(GrMtlGpu* gpu, 80cb93a386Sopenharmony_ci SkISize dimensions, 81cb93a386Sopenharmony_ci UsageFlags supportedUsages, 82cb93a386Sopenharmony_ci id<MTLTexture> texture, 83cb93a386Sopenharmony_ci GrWrapCacheable); 84cb93a386Sopenharmony_ci 85cb93a386Sopenharmony_ci GrMtlGpu* getMtlGpu() const; 86cb93a386Sopenharmony_ci 87cb93a386Sopenharmony_ci id<MTLTexture> fTexture; 88cb93a386Sopenharmony_ci}; 89cb93a386Sopenharmony_ci 90cb93a386Sopenharmony_ci#endif 91