1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2018 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 GrMtlAttachment_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker #define GrMtlAttachment_DEFINED 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/ganesh/mtl/GrMtlTypes.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrAttachment.h" 13*c8dee2aaSAndroid Build Coastguard Worker 14*c8dee2aaSAndroid Build Coastguard Worker #import <Metal/Metal.h> 15*c8dee2aaSAndroid Build Coastguard Worker 16*c8dee2aaSAndroid Build Coastguard Worker class GrBackendFormat; 17*c8dee2aaSAndroid Build Coastguard Worker class GrMtlGpu; 18*c8dee2aaSAndroid Build Coastguard Worker 19*c8dee2aaSAndroid Build Coastguard Worker class GrMtlAttachment : public GrAttachment { 20*c8dee2aaSAndroid Build Coastguard Worker public: 21*c8dee2aaSAndroid Build Coastguard Worker static sk_sp<GrMtlAttachment> MakeStencil(GrMtlGpu* gpu, 22*c8dee2aaSAndroid Build Coastguard Worker SkISize dimensions, 23*c8dee2aaSAndroid Build Coastguard Worker int sampleCnt, 24*c8dee2aaSAndroid Build Coastguard Worker MTLPixelFormat format); 25*c8dee2aaSAndroid Build Coastguard Worker 26*c8dee2aaSAndroid Build Coastguard Worker static sk_sp<GrMtlAttachment> MakeMSAA(GrMtlGpu* gpu, 27*c8dee2aaSAndroid Build Coastguard Worker SkISize dimensions, 28*c8dee2aaSAndroid Build Coastguard Worker int sampleCnt, 29*c8dee2aaSAndroid Build Coastguard Worker MTLPixelFormat format); 30*c8dee2aaSAndroid Build Coastguard Worker 31*c8dee2aaSAndroid Build Coastguard Worker static sk_sp<GrMtlAttachment> MakeTexture(GrMtlGpu* gpu, 32*c8dee2aaSAndroid Build Coastguard Worker SkISize dimensions, 33*c8dee2aaSAndroid Build Coastguard Worker MTLPixelFormat format, 34*c8dee2aaSAndroid Build Coastguard Worker uint32_t mipLevels, 35*c8dee2aaSAndroid Build Coastguard Worker GrRenderable renderable, 36*c8dee2aaSAndroid Build Coastguard Worker int numSamples, 37*c8dee2aaSAndroid Build Coastguard Worker skgpu::Budgeted budgeted); 38*c8dee2aaSAndroid Build Coastguard Worker 39*c8dee2aaSAndroid Build Coastguard Worker static sk_sp<GrMtlAttachment> MakeWrapped(GrMtlGpu* gpu, 40*c8dee2aaSAndroid Build Coastguard Worker SkISize dimensions, 41*c8dee2aaSAndroid Build Coastguard Worker id<MTLTexture>, 42*c8dee2aaSAndroid Build Coastguard Worker UsageFlags attachmentUsages, 43*c8dee2aaSAndroid Build Coastguard Worker GrWrapCacheable, 44*c8dee2aaSAndroid Build Coastguard Worker std::string_view label); 45*c8dee2aaSAndroid Build Coastguard Worker 46*c8dee2aaSAndroid Build Coastguard Worker ~GrMtlAttachment() override; 47*c8dee2aaSAndroid Build Coastguard Worker 48*c8dee2aaSAndroid Build Coastguard Worker GrBackendFormat backendFormat() const override; 49*c8dee2aaSAndroid Build Coastguard Worker mtlFormat()50*c8dee2aaSAndroid Build Coastguard Worker MTLPixelFormat mtlFormat() const { return fTexture.pixelFormat; } 51*c8dee2aaSAndroid Build Coastguard Worker mtlTexture()52*c8dee2aaSAndroid Build Coastguard Worker id<MTLTexture> mtlTexture() const { return fTexture; } 53*c8dee2aaSAndroid Build Coastguard Worker sampleCount()54*c8dee2aaSAndroid Build Coastguard Worker unsigned int sampleCount() const { return SkToU32(fTexture.sampleCount); } 55*c8dee2aaSAndroid Build Coastguard Worker framebufferOnly()56*c8dee2aaSAndroid Build Coastguard Worker bool framebufferOnly() const { return fTexture.framebufferOnly; } 57*c8dee2aaSAndroid Build Coastguard Worker 58*c8dee2aaSAndroid Build Coastguard Worker protected: 59*c8dee2aaSAndroid Build Coastguard Worker void onRelease() override; 60*c8dee2aaSAndroid Build Coastguard Worker void onAbandon() override; 61*c8dee2aaSAndroid Build Coastguard Worker 62*c8dee2aaSAndroid Build Coastguard Worker private: 63*c8dee2aaSAndroid Build Coastguard Worker static sk_sp<GrMtlAttachment> Make(GrMtlGpu* gpu, 64*c8dee2aaSAndroid Build Coastguard Worker SkISize dimensions, 65*c8dee2aaSAndroid Build Coastguard Worker UsageFlags attachmentUsages, 66*c8dee2aaSAndroid Build Coastguard Worker int sampleCnt, 67*c8dee2aaSAndroid Build Coastguard Worker MTLPixelFormat format, 68*c8dee2aaSAndroid Build Coastguard Worker uint32_t mipLevels, 69*c8dee2aaSAndroid Build Coastguard Worker int mtlTextureUsage, 70*c8dee2aaSAndroid Build Coastguard Worker int mtlStorageMode, 71*c8dee2aaSAndroid Build Coastguard Worker skgpu::Budgeted); 72*c8dee2aaSAndroid Build Coastguard Worker 73*c8dee2aaSAndroid Build Coastguard Worker GrMtlAttachment(GrMtlGpu* gpu, 74*c8dee2aaSAndroid Build Coastguard Worker SkISize dimensions, 75*c8dee2aaSAndroid Build Coastguard Worker UsageFlags supportedUsages, 76*c8dee2aaSAndroid Build Coastguard Worker id<MTLTexture> texture, 77*c8dee2aaSAndroid Build Coastguard Worker skgpu::Budgeted, 78*c8dee2aaSAndroid Build Coastguard Worker std::string_view label); 79*c8dee2aaSAndroid Build Coastguard Worker 80*c8dee2aaSAndroid Build Coastguard Worker GrMtlAttachment(GrMtlGpu* gpu, 81*c8dee2aaSAndroid Build Coastguard Worker SkISize dimensions, 82*c8dee2aaSAndroid Build Coastguard Worker UsageFlags supportedUsages, 83*c8dee2aaSAndroid Build Coastguard Worker id<MTLTexture> texture, 84*c8dee2aaSAndroid Build Coastguard Worker GrWrapCacheable, 85*c8dee2aaSAndroid Build Coastguard Worker std::string_view label); 86*c8dee2aaSAndroid Build Coastguard Worker 87*c8dee2aaSAndroid Build Coastguard Worker GrMtlGpu* getMtlGpu() const; 88*c8dee2aaSAndroid Build Coastguard Worker 89*c8dee2aaSAndroid Build Coastguard Worker void onSetLabel() override; 90*c8dee2aaSAndroid Build Coastguard Worker 91*c8dee2aaSAndroid Build Coastguard Worker id<MTLTexture> fTexture; 92*c8dee2aaSAndroid Build Coastguard Worker }; 93*c8dee2aaSAndroid Build Coastguard Worker 94*c8dee2aaSAndroid Build Coastguard Worker #endif 95