xref: /aosp_15_r20/external/skia/src/gpu/ganesh/mtl/GrMtlTextureRenderTarget.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1 /*
2  * Copyright 2018 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 GrMtlTextureRenderTarget_DEFINED
9 #define GrMtlTextureRenderTarget_DEFINED
10 
11 #include "src/gpu/ganesh/mtl/GrMtlRenderTarget.h"
12 #include "src/gpu/ganesh/mtl/GrMtlTexture.h"
13 
14 class GrMtlTextureRenderTarget: public GrMtlTexture, public GrMtlRenderTarget {
15 public:
16     static sk_sp<GrMtlTextureRenderTarget> MakeNewTextureRenderTarget(GrMtlGpu*,
17                                                                       skgpu::Budgeted,
18                                                                       SkISize,
19                                                                       int sampleCnt,
20                                                                       MTLPixelFormat,
21                                                                       uint32_t mipLevels,
22                                                                       GrMipmapStatus,
23                                                                       std::string_view label);
24 
25     static sk_sp<GrMtlTextureRenderTarget> MakeWrappedTextureRenderTarget(GrMtlGpu*,
26                                                                           SkISize,
27                                                                           int sampleCnt,
28                                                                           id<MTLTexture>,
29                                                                           GrWrapCacheable);
backendFormat()30     GrBackendFormat backendFormat() const override {
31         return GrMtlTexture::backendFormat();
32     }
33 
34 protected:
onAbandon()35     void onAbandon() override {
36         GrMtlRenderTarget::onAbandon();
37         GrMtlTexture::onAbandon();
38     }
39 
onRelease()40     void onRelease() override {
41         GrMtlRenderTarget::onRelease();
42         GrMtlTexture::onRelease();
43     }
44 
45 private:
46     GrMtlTextureRenderTarget(GrMtlGpu* gpu,
47                              skgpu::Budgeted budgeted,
48                              SkISize,
49                              sk_sp<GrMtlAttachment> texture,
50                              sk_sp<GrMtlAttachment> colorAttachment,
51                              sk_sp<GrMtlAttachment> resolveAttachment,
52                              GrMipmapStatus,
53                              std::string_view label);
54 
55     GrMtlTextureRenderTarget(GrMtlGpu* gpu,
56                              SkISize,
57                              sk_sp<GrMtlAttachment> texture,
58                              sk_sp<GrMtlAttachment> colorAttachment,
59                              sk_sp<GrMtlAttachment> resolveAttachment,
60                              GrMipmapStatus,
61                              GrWrapCacheable cacheable,
62                              std::string_view label);
63 
64     size_t onGpuMemorySize() const override;
65 
66     void onSetLabel() override;
67 };
68 
69 #endif
70