xref: /aosp_15_r20/external/skia/src/gpu/graphite/TextureInfoPriv.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1 /*
2  * Copyright 2024 Google LLC
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 #ifndef skgpu_graphite_TextureInfoPriv_DEFINED
8 #define skgpu_graphite_TextureInfoPriv_DEFINED
9 
10 #include "include/core/SkString.h"
11 #include "include/gpu/graphite/TextureInfo.h"
12 
13 #include <cstdint>
14 
15 namespace skgpu::graphite {
16 
17 class TextureInfoData {
18 public:
19     virtual ~TextureInfoData();
20 
21 #if defined(SK_DEBUG)
22     virtual skgpu::BackendApi type() const = 0;
23 #endif
24 protected:
25     TextureInfoData() = default;
26     TextureInfoData(const TextureInfoData&) = default;
27 
28     using AnyTextureInfoData = TextureInfo::AnyTextureInfoData;
29 
30 private:
31     friend class TextureInfo;
32 
33     virtual size_t bytesPerPixel() const = 0;
34     virtual SkTextureCompressionType compressionType() const = 0;
35     virtual bool isMemoryless() const = 0;
36     virtual SkString toString() const = 0;
37     virtual SkString toRPAttachmentString(uint32_t sampleCount) const = 0;
38 
39     virtual void copyTo(AnyTextureInfoData&) const = 0;
40     virtual bool equal(const TextureInfoData* that) const = 0;
41     virtual bool isCompatible(const TextureInfoData* that) const = 0;
42 };
43 
44 class TextureInfoPriv {
45 public:
46     template <typename SomeTextureInfoData>
Make(BackendApi backend,uint32_t sampleCount,skgpu::Mipmapped mipped,skgpu::Protected p,const SomeTextureInfoData & data)47     static TextureInfo Make(BackendApi backend,
48                             uint32_t sampleCount,
49                             skgpu::Mipmapped mipped,
50                             skgpu::Protected p,
51                             const SomeTextureInfoData& data) {
52         return TextureInfo(backend, sampleCount, mipped, p, data);
53     }
54 
GetData(const TextureInfo & info)55     static const TextureInfoData* GetData(const TextureInfo& info) {
56         return info.fTextureInfoData.get();
57     }
58 };
59 
60 }  // namespace skgpu::graphite
61 
62 #endif
63