1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2011 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 GrGLMtlAttachment_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker #define GrGLMtlAttachment_DEFINED 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkRefCnt.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkSize.h" 13*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/GpuTypes.h" 14*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/ganesh/GrBackendSurface.h" 15*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/ganesh/GrTypes.h" 16*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/ganesh/gl/GrGLTypes.h" 17*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/base/SkAssert.h" 18*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrAttachment.h" 19*c8dee2aaSAndroid Build Coastguard Worker 20*c8dee2aaSAndroid Build Coastguard Worker #include <string_view> 21*c8dee2aaSAndroid Build Coastguard Worker 22*c8dee2aaSAndroid Build Coastguard Worker class GrGLGpu; 23*c8dee2aaSAndroid Build Coastguard Worker class GrGpu; 24*c8dee2aaSAndroid Build Coastguard Worker class SkString; 25*c8dee2aaSAndroid Build Coastguard Worker class SkTraceMemoryDump; 26*c8dee2aaSAndroid Build Coastguard Worker 27*c8dee2aaSAndroid Build Coastguard Worker class GrGLAttachment : public GrAttachment { 28*c8dee2aaSAndroid Build Coastguard Worker public: 29*c8dee2aaSAndroid Build Coastguard Worker static sk_sp<GrGLAttachment> MakeStencil(GrGLGpu* gpu, 30*c8dee2aaSAndroid Build Coastguard Worker SkISize dimensions, 31*c8dee2aaSAndroid Build Coastguard Worker int sampleCnt, 32*c8dee2aaSAndroid Build Coastguard Worker GrGLFormat format); 33*c8dee2aaSAndroid Build Coastguard Worker 34*c8dee2aaSAndroid Build Coastguard Worker static sk_sp<GrGLAttachment> MakeMSAA(GrGLGpu* gpu, 35*c8dee2aaSAndroid Build Coastguard Worker SkISize dimensions, 36*c8dee2aaSAndroid Build Coastguard Worker int sampleCnt, 37*c8dee2aaSAndroid Build Coastguard Worker GrGLFormat format); 38*c8dee2aaSAndroid Build Coastguard Worker MakeWrappedRenderBuffer(GrGpu * gpu,GrGLuint renderbufferID,SkISize dimensions,UsageFlags supportedUsages,int sampleCnt,GrGLFormat format)39*c8dee2aaSAndroid Build Coastguard Worker static sk_sp<GrGLAttachment> MakeWrappedRenderBuffer(GrGpu* gpu, 40*c8dee2aaSAndroid Build Coastguard Worker GrGLuint renderbufferID, 41*c8dee2aaSAndroid Build Coastguard Worker SkISize dimensions, 42*c8dee2aaSAndroid Build Coastguard Worker UsageFlags supportedUsages, 43*c8dee2aaSAndroid Build Coastguard Worker int sampleCnt, 44*c8dee2aaSAndroid Build Coastguard Worker GrGLFormat format) { 45*c8dee2aaSAndroid Build Coastguard Worker return sk_sp<GrGLAttachment>(new GrGLAttachment( 46*c8dee2aaSAndroid Build Coastguard Worker gpu, renderbufferID, dimensions, supportedUsages, sampleCnt, format, 47*c8dee2aaSAndroid Build Coastguard Worker /*label=*/"MakeWrappedRenderBuffer")); 48*c8dee2aaSAndroid Build Coastguard Worker } 49*c8dee2aaSAndroid Build Coastguard Worker 50*c8dee2aaSAndroid Build Coastguard Worker GrBackendFormat backendFormat() const override; 51*c8dee2aaSAndroid Build Coastguard Worker renderbufferID()52*c8dee2aaSAndroid Build Coastguard Worker GrGLuint renderbufferID() const { return fRenderbufferID; } 53*c8dee2aaSAndroid Build Coastguard Worker format()54*c8dee2aaSAndroid Build Coastguard Worker GrGLFormat format() const { return fFormat; } 55*c8dee2aaSAndroid Build Coastguard Worker 56*c8dee2aaSAndroid Build Coastguard Worker protected: 57*c8dee2aaSAndroid Build Coastguard Worker // overrides of GrResource 58*c8dee2aaSAndroid Build Coastguard Worker void onRelease() override; 59*c8dee2aaSAndroid Build Coastguard Worker void onAbandon() override; 60*c8dee2aaSAndroid Build Coastguard Worker void setMemoryBacking(SkTraceMemoryDump* traceMemoryDump, 61*c8dee2aaSAndroid Build Coastguard Worker const SkString& dumpName) const override; 62*c8dee2aaSAndroid Build Coastguard Worker 63*c8dee2aaSAndroid Build Coastguard Worker private: GrGLAttachment(GrGpu * gpu,GrGLuint renderbufferID,SkISize dimensions,UsageFlags supportedUsages,int sampleCnt,GrGLFormat format,std::string_view label)64*c8dee2aaSAndroid Build Coastguard Worker GrGLAttachment(GrGpu* gpu, 65*c8dee2aaSAndroid Build Coastguard Worker GrGLuint renderbufferID, 66*c8dee2aaSAndroid Build Coastguard Worker SkISize dimensions, 67*c8dee2aaSAndroid Build Coastguard Worker UsageFlags supportedUsages, 68*c8dee2aaSAndroid Build Coastguard Worker int sampleCnt, 69*c8dee2aaSAndroid Build Coastguard Worker GrGLFormat format, 70*c8dee2aaSAndroid Build Coastguard Worker std::string_view label) 71*c8dee2aaSAndroid Build Coastguard Worker : GrAttachment(gpu, 72*c8dee2aaSAndroid Build Coastguard Worker dimensions, 73*c8dee2aaSAndroid Build Coastguard Worker supportedUsages, 74*c8dee2aaSAndroid Build Coastguard Worker sampleCnt, 75*c8dee2aaSAndroid Build Coastguard Worker skgpu::Mipmapped::kNo, 76*c8dee2aaSAndroid Build Coastguard Worker GrProtected::kNo, 77*c8dee2aaSAndroid Build Coastguard Worker label) 78*c8dee2aaSAndroid Build Coastguard Worker , fFormat(format) 79*c8dee2aaSAndroid Build Coastguard Worker , fRenderbufferID(renderbufferID) { 80*c8dee2aaSAndroid Build Coastguard Worker SkASSERT(supportedUsages == UsageFlags::kStencilAttachment || 81*c8dee2aaSAndroid Build Coastguard Worker supportedUsages == UsageFlags::kColorAttachment); 82*c8dee2aaSAndroid Build Coastguard Worker this->registerWithCache(skgpu::Budgeted::kYes); 83*c8dee2aaSAndroid Build Coastguard Worker } 84*c8dee2aaSAndroid Build Coastguard Worker 85*c8dee2aaSAndroid Build Coastguard Worker void onSetLabel() override; 86*c8dee2aaSAndroid Build Coastguard Worker 87*c8dee2aaSAndroid Build Coastguard Worker GrGLFormat fFormat; 88*c8dee2aaSAndroid Build Coastguard Worker 89*c8dee2aaSAndroid Build Coastguard Worker // may be zero for external SBs associated with external RTs 90*c8dee2aaSAndroid Build Coastguard Worker // (we don't require the client to give us the id, just tell 91*c8dee2aaSAndroid Build Coastguard Worker // us how many bits of stencil there are). 92*c8dee2aaSAndroid Build Coastguard Worker GrGLuint fRenderbufferID; 93*c8dee2aaSAndroid Build Coastguard Worker 94*c8dee2aaSAndroid Build Coastguard Worker using INHERITED = GrAttachment; 95*c8dee2aaSAndroid Build Coastguard Worker }; 96*c8dee2aaSAndroid Build Coastguard Worker 97*c8dee2aaSAndroid Build Coastguard Worker #endif 98