1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2017 Google Inc. 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker #ifndef GrMtlTexture_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker #define GrMtlTexture_DEFINED 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker #import <Metal/Metal.h> 12*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/ganesh/SkImageGanesh.h" 13*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrTexture.h" 14*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/mtl/GrMtlAttachment.h" 15*c8dee2aaSAndroid Build Coastguard Worker 16*c8dee2aaSAndroid Build Coastguard Worker class GrMtlGpu; 17*c8dee2aaSAndroid Build Coastguard Worker 18*c8dee2aaSAndroid Build Coastguard Worker class GrMtlTexture : public GrTexture { 19*c8dee2aaSAndroid Build Coastguard Worker public: 20*c8dee2aaSAndroid Build Coastguard Worker static sk_sp<GrMtlTexture> MakeNewTexture(GrMtlGpu*, 21*c8dee2aaSAndroid Build Coastguard Worker skgpu::Budgeted budgeted, 22*c8dee2aaSAndroid Build Coastguard Worker SkISize dimensions, 23*c8dee2aaSAndroid Build Coastguard Worker MTLPixelFormat format, 24*c8dee2aaSAndroid Build Coastguard Worker uint32_t mipLevels, 25*c8dee2aaSAndroid Build Coastguard Worker GrMipmapStatus, 26*c8dee2aaSAndroid Build Coastguard Worker std::string_view label); 27*c8dee2aaSAndroid Build Coastguard Worker 28*c8dee2aaSAndroid Build Coastguard Worker static sk_sp<GrMtlTexture> MakeWrappedTexture(GrMtlGpu*, 29*c8dee2aaSAndroid Build Coastguard Worker SkISize, 30*c8dee2aaSAndroid Build Coastguard Worker id<MTLTexture>, 31*c8dee2aaSAndroid Build Coastguard Worker GrWrapCacheable, 32*c8dee2aaSAndroid Build Coastguard Worker GrIOType); 33*c8dee2aaSAndroid Build Coastguard Worker 34*c8dee2aaSAndroid Build Coastguard Worker ~GrMtlTexture() override; 35*c8dee2aaSAndroid Build Coastguard Worker attachment()36*c8dee2aaSAndroid Build Coastguard Worker GrMtlAttachment* attachment() const { return fTexture.get(); } mtlTexture()37*c8dee2aaSAndroid Build Coastguard Worker id<MTLTexture> mtlTexture() const { return fTexture->mtlTexture(); } 38*c8dee2aaSAndroid Build Coastguard Worker 39*c8dee2aaSAndroid Build Coastguard Worker GrBackendTexture getBackendTexture() const override; 40*c8dee2aaSAndroid Build Coastguard Worker 41*c8dee2aaSAndroid Build Coastguard Worker GrBackendFormat backendFormat() const override; 42*c8dee2aaSAndroid Build Coastguard Worker textureParamsModified()43*c8dee2aaSAndroid Build Coastguard Worker void textureParamsModified() override {} 44*c8dee2aaSAndroid Build Coastguard Worker 45*c8dee2aaSAndroid Build Coastguard Worker bool reallocForMipmap(GrMtlGpu* gpu, uint32_t mipLevels); 46*c8dee2aaSAndroid Build Coastguard Worker 47*c8dee2aaSAndroid Build Coastguard Worker protected: 48*c8dee2aaSAndroid Build Coastguard Worker GrMtlTexture(GrMtlGpu*, 49*c8dee2aaSAndroid Build Coastguard Worker SkISize, 50*c8dee2aaSAndroid Build Coastguard Worker sk_sp<GrMtlAttachment>, 51*c8dee2aaSAndroid Build Coastguard Worker GrMipmapStatus, 52*c8dee2aaSAndroid Build Coastguard Worker std::string_view label); 53*c8dee2aaSAndroid Build Coastguard Worker 54*c8dee2aaSAndroid Build Coastguard Worker GrMtlGpu* getMtlGpu() const; 55*c8dee2aaSAndroid Build Coastguard Worker onAbandon()56*c8dee2aaSAndroid Build Coastguard Worker void onAbandon() override { 57*c8dee2aaSAndroid Build Coastguard Worker fTexture = nil; 58*c8dee2aaSAndroid Build Coastguard Worker INHERITED::onAbandon(); 59*c8dee2aaSAndroid Build Coastguard Worker } onRelease()60*c8dee2aaSAndroid Build Coastguard Worker void onRelease() override { 61*c8dee2aaSAndroid Build Coastguard Worker fTexture = nil; 62*c8dee2aaSAndroid Build Coastguard Worker INHERITED::onRelease(); 63*c8dee2aaSAndroid Build Coastguard Worker } 64*c8dee2aaSAndroid Build Coastguard Worker onStealBackendTexture(GrBackendTexture *,SkImages::BackendTextureReleaseProc *)65*c8dee2aaSAndroid Build Coastguard Worker bool onStealBackendTexture(GrBackendTexture*, SkImages::BackendTextureReleaseProc*) override { 66*c8dee2aaSAndroid Build Coastguard Worker return false; 67*c8dee2aaSAndroid Build Coastguard Worker } 68*c8dee2aaSAndroid Build Coastguard Worker 69*c8dee2aaSAndroid Build Coastguard Worker void onSetLabel() override; 70*c8dee2aaSAndroid Build Coastguard Worker 71*c8dee2aaSAndroid Build Coastguard Worker private: 72*c8dee2aaSAndroid Build Coastguard Worker enum Wrapped { kWrapped }; 73*c8dee2aaSAndroid Build Coastguard Worker 74*c8dee2aaSAndroid Build Coastguard Worker GrMtlTexture(GrMtlGpu*, 75*c8dee2aaSAndroid Build Coastguard Worker skgpu::Budgeted, 76*c8dee2aaSAndroid Build Coastguard Worker SkISize, 77*c8dee2aaSAndroid Build Coastguard Worker sk_sp<GrMtlAttachment>, 78*c8dee2aaSAndroid Build Coastguard Worker GrMipmapStatus, 79*c8dee2aaSAndroid Build Coastguard Worker std::string_view label); 80*c8dee2aaSAndroid Build Coastguard Worker 81*c8dee2aaSAndroid Build Coastguard Worker GrMtlTexture(GrMtlGpu*, 82*c8dee2aaSAndroid Build Coastguard Worker Wrapped, 83*c8dee2aaSAndroid Build Coastguard Worker SkISize, 84*c8dee2aaSAndroid Build Coastguard Worker sk_sp<GrMtlAttachment>, 85*c8dee2aaSAndroid Build Coastguard Worker GrMipmapStatus, 86*c8dee2aaSAndroid Build Coastguard Worker GrWrapCacheable, 87*c8dee2aaSAndroid Build Coastguard Worker GrIOType, 88*c8dee2aaSAndroid Build Coastguard Worker std::string_view label); 89*c8dee2aaSAndroid Build Coastguard Worker 90*c8dee2aaSAndroid Build Coastguard Worker sk_sp<GrMtlAttachment> fTexture; 91*c8dee2aaSAndroid Build Coastguard Worker 92*c8dee2aaSAndroid Build Coastguard Worker using INHERITED = GrTexture; 93*c8dee2aaSAndroid Build Coastguard Worker }; 94*c8dee2aaSAndroid Build Coastguard Worker 95*c8dee2aaSAndroid Build Coastguard Worker #endif 96