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