1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright 2017 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 GrMtlTexture_DEFINED 9cb93a386Sopenharmony_ci#define GrMtlTexture_DEFINED 10cb93a386Sopenharmony_ci 11cb93a386Sopenharmony_ci#include "src/gpu/GrTexture.h" 12cb93a386Sopenharmony_ci#include "src/gpu/mtl/GrMtlAttachment.h" 13cb93a386Sopenharmony_ci#import <Metal/Metal.h> 14cb93a386Sopenharmony_ci 15cb93a386Sopenharmony_ciclass GrMtlGpu; 16cb93a386Sopenharmony_ci 17cb93a386Sopenharmony_ciclass GrMtlTexture : public GrTexture { 18cb93a386Sopenharmony_cipublic: 19cb93a386Sopenharmony_ci static sk_sp<GrMtlTexture> MakeNewTexture(GrMtlGpu*, 20cb93a386Sopenharmony_ci SkBudgeted budgeted, 21cb93a386Sopenharmony_ci SkISize dimensions, 22cb93a386Sopenharmony_ci MTLPixelFormat format, 23cb93a386Sopenharmony_ci uint32_t mipLevels, 24cb93a386Sopenharmony_ci GrMipmapStatus); 25cb93a386Sopenharmony_ci 26cb93a386Sopenharmony_ci static sk_sp<GrMtlTexture> MakeWrappedTexture(GrMtlGpu*, 27cb93a386Sopenharmony_ci SkISize, 28cb93a386Sopenharmony_ci id<MTLTexture>, 29cb93a386Sopenharmony_ci GrWrapCacheable, 30cb93a386Sopenharmony_ci GrIOType); 31cb93a386Sopenharmony_ci 32cb93a386Sopenharmony_ci ~GrMtlTexture() override; 33cb93a386Sopenharmony_ci 34cb93a386Sopenharmony_ci GrMtlAttachment* attachment() const { return fTexture.get(); } 35cb93a386Sopenharmony_ci id<MTLTexture> mtlTexture() const { return fTexture->mtlTexture(); } 36cb93a386Sopenharmony_ci 37cb93a386Sopenharmony_ci GrBackendTexture getBackendTexture() const override; 38cb93a386Sopenharmony_ci 39cb93a386Sopenharmony_ci GrBackendFormat backendFormat() const override; 40cb93a386Sopenharmony_ci 41cb93a386Sopenharmony_ci void textureParamsModified() override {} 42cb93a386Sopenharmony_ci 43cb93a386Sopenharmony_ci bool reallocForMipmap(GrMtlGpu* gpu, uint32_t mipLevels); 44cb93a386Sopenharmony_ci 45cb93a386Sopenharmony_ciprotected: 46cb93a386Sopenharmony_ci GrMtlTexture(GrMtlGpu*, SkISize, sk_sp<GrMtlAttachment>, GrMipmapStatus); 47cb93a386Sopenharmony_ci 48cb93a386Sopenharmony_ci GrMtlGpu* getMtlGpu() const; 49cb93a386Sopenharmony_ci 50cb93a386Sopenharmony_ci void onAbandon() override { 51cb93a386Sopenharmony_ci fTexture = nil; 52cb93a386Sopenharmony_ci INHERITED::onAbandon(); 53cb93a386Sopenharmony_ci } 54cb93a386Sopenharmony_ci void onRelease() override { 55cb93a386Sopenharmony_ci fTexture = nil; 56cb93a386Sopenharmony_ci INHERITED::onRelease(); 57cb93a386Sopenharmony_ci } 58cb93a386Sopenharmony_ci 59cb93a386Sopenharmony_ci bool onStealBackendTexture(GrBackendTexture*, SkImage::BackendTextureReleaseProc*) override { 60cb93a386Sopenharmony_ci return false; 61cb93a386Sopenharmony_ci } 62cb93a386Sopenharmony_ci 63cb93a386Sopenharmony_ciprivate: 64cb93a386Sopenharmony_ci enum Wrapped { kWrapped }; 65cb93a386Sopenharmony_ci 66cb93a386Sopenharmony_ci GrMtlTexture(GrMtlGpu*, SkBudgeted, SkISize, sk_sp<GrMtlAttachment>, GrMipmapStatus); 67cb93a386Sopenharmony_ci 68cb93a386Sopenharmony_ci GrMtlTexture(GrMtlGpu*, 69cb93a386Sopenharmony_ci Wrapped, 70cb93a386Sopenharmony_ci SkISize, 71cb93a386Sopenharmony_ci sk_sp<GrMtlAttachment>, 72cb93a386Sopenharmony_ci GrMipmapStatus, 73cb93a386Sopenharmony_ci GrWrapCacheable, 74cb93a386Sopenharmony_ci GrIOType); 75cb93a386Sopenharmony_ci 76cb93a386Sopenharmony_ci sk_sp<GrMtlAttachment> fTexture; 77cb93a386Sopenharmony_ci 78cb93a386Sopenharmony_ci using INHERITED = GrTexture; 79cb93a386Sopenharmony_ci}; 80cb93a386Sopenharmony_ci 81cb93a386Sopenharmony_ci#endif 82