1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2021 Google LLC 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 skgpu_graphite_TextureInfo_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker #define skgpu_graphite_TextureInfo_DEFINED 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkString.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkTextureCompressionType.h" 13*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/graphite/GraphiteTypes.h" 14*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/base/SkAPI.h" 15*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/base/SkAnySubclass.h" 16*c8dee2aaSAndroid Build Coastguard Worker 17*c8dee2aaSAndroid Build Coastguard Worker struct SkISize; 18*c8dee2aaSAndroid Build Coastguard Worker 19*c8dee2aaSAndroid Build Coastguard Worker namespace skgpu::graphite { 20*c8dee2aaSAndroid Build Coastguard Worker 21*c8dee2aaSAndroid Build Coastguard Worker class TextureInfoData; 22*c8dee2aaSAndroid Build Coastguard Worker 23*c8dee2aaSAndroid Build Coastguard Worker class SK_API TextureInfo { 24*c8dee2aaSAndroid Build Coastguard Worker public: 25*c8dee2aaSAndroid Build Coastguard Worker TextureInfo(); 26*c8dee2aaSAndroid Build Coastguard Worker ~TextureInfo(); 27*c8dee2aaSAndroid Build Coastguard Worker TextureInfo(const TextureInfo&); 28*c8dee2aaSAndroid Build Coastguard Worker TextureInfo& operator=(const TextureInfo&); 29*c8dee2aaSAndroid Build Coastguard Worker 30*c8dee2aaSAndroid Build Coastguard Worker bool operator==(const TextureInfo&) const; 31*c8dee2aaSAndroid Build Coastguard Worker bool operator!=(const TextureInfo& that) const { return !(*this == that); } 32*c8dee2aaSAndroid Build Coastguard Worker isValid()33*c8dee2aaSAndroid Build Coastguard Worker bool isValid() const { return fValid; } backend()34*c8dee2aaSAndroid Build Coastguard Worker BackendApi backend() const { return fBackend; } 35*c8dee2aaSAndroid Build Coastguard Worker numSamples()36*c8dee2aaSAndroid Build Coastguard Worker uint32_t numSamples() const { return fSampleCount; } mipmapped()37*c8dee2aaSAndroid Build Coastguard Worker Mipmapped mipmapped() const { return fMipmapped; } isProtected()38*c8dee2aaSAndroid Build Coastguard Worker Protected isProtected() const { return fProtected; } 39*c8dee2aaSAndroid Build Coastguard Worker SkTextureCompressionType compressionType() const; 40*c8dee2aaSAndroid Build Coastguard Worker bool isMemoryless() const; 41*c8dee2aaSAndroid Build Coastguard Worker 42*c8dee2aaSAndroid Build Coastguard Worker bool isCompatible(const TextureInfo& that) const; 43*c8dee2aaSAndroid Build Coastguard Worker // Return a string containing the full description of this TextureInfo. 44*c8dee2aaSAndroid Build Coastguard Worker SkString toString() const; 45*c8dee2aaSAndroid Build Coastguard Worker // Return a string containing only the info relevant for its use as a RenderPass attachment. 46*c8dee2aaSAndroid Build Coastguard Worker SkString toRPAttachmentString() const; 47*c8dee2aaSAndroid Build Coastguard Worker 48*c8dee2aaSAndroid Build Coastguard Worker private: 49*c8dee2aaSAndroid Build Coastguard Worker friend class TextureInfoData; 50*c8dee2aaSAndroid Build Coastguard Worker friend class TextureInfoPriv; 51*c8dee2aaSAndroid Build Coastguard Worker 52*c8dee2aaSAndroid Build Coastguard Worker // Size determined by looking at the TextureInfoData subclasses, then guessing-and-checking. 53*c8dee2aaSAndroid Build Coastguard Worker // Compiler will complain if this is too small - in that case, just increase the number. 54*c8dee2aaSAndroid Build Coastguard Worker inline constexpr static size_t kMaxSubclassSize = 112; 55*c8dee2aaSAndroid Build Coastguard Worker using AnyTextureInfoData = SkAnySubclass<TextureInfoData, kMaxSubclassSize>; 56*c8dee2aaSAndroid Build Coastguard Worker 57*c8dee2aaSAndroid Build Coastguard Worker template <typename SomeTextureInfoData> TextureInfo(BackendApi backend,uint32_t sampleCount,skgpu::Mipmapped mipped,skgpu::Protected isProtected,const SomeTextureInfoData & textureInfoData)58*c8dee2aaSAndroid Build Coastguard Worker TextureInfo(BackendApi backend, 59*c8dee2aaSAndroid Build Coastguard Worker uint32_t sampleCount, 60*c8dee2aaSAndroid Build Coastguard Worker skgpu::Mipmapped mipped, 61*c8dee2aaSAndroid Build Coastguard Worker skgpu::Protected isProtected, 62*c8dee2aaSAndroid Build Coastguard Worker const SomeTextureInfoData& textureInfoData) 63*c8dee2aaSAndroid Build Coastguard Worker : fBackend(backend) 64*c8dee2aaSAndroid Build Coastguard Worker , fValid(true) 65*c8dee2aaSAndroid Build Coastguard Worker , fSampleCount(sampleCount) 66*c8dee2aaSAndroid Build Coastguard Worker , fMipmapped(mipped) 67*c8dee2aaSAndroid Build Coastguard Worker , fProtected(isProtected) { 68*c8dee2aaSAndroid Build Coastguard Worker fTextureInfoData.emplace<SomeTextureInfoData>(textureInfoData); 69*c8dee2aaSAndroid Build Coastguard Worker } 70*c8dee2aaSAndroid Build Coastguard Worker 71*c8dee2aaSAndroid Build Coastguard Worker friend size_t ComputeSize(SkISize dimensions, const TextureInfo&); // for bytesPerPixel 72*c8dee2aaSAndroid Build Coastguard Worker 73*c8dee2aaSAndroid Build Coastguard Worker size_t bytesPerPixel() const; 74*c8dee2aaSAndroid Build Coastguard Worker 75*c8dee2aaSAndroid Build Coastguard Worker BackendApi fBackend = BackendApi::kMock; 76*c8dee2aaSAndroid Build Coastguard Worker bool fValid = false; 77*c8dee2aaSAndroid Build Coastguard Worker 78*c8dee2aaSAndroid Build Coastguard Worker uint32_t fSampleCount = 1; 79*c8dee2aaSAndroid Build Coastguard Worker Mipmapped fMipmapped = Mipmapped::kNo; 80*c8dee2aaSAndroid Build Coastguard Worker Protected fProtected = Protected::kNo; 81*c8dee2aaSAndroid Build Coastguard Worker 82*c8dee2aaSAndroid Build Coastguard Worker AnyTextureInfoData fTextureInfoData; 83*c8dee2aaSAndroid Build Coastguard Worker }; 84*c8dee2aaSAndroid Build Coastguard Worker 85*c8dee2aaSAndroid Build Coastguard Worker } // namespace skgpu::graphite 86*c8dee2aaSAndroid Build Coastguard Worker 87*c8dee2aaSAndroid Build Coastguard Worker #endif //skgpu_graphite_TextureInfo_DEFINED 88