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