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_BackendTexture_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker #define skgpu_graphite_BackendTexture_DEFINED 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkRefCnt.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkSize.h" 13*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/graphite/GraphiteTypes.h" 14*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/graphite/TextureInfo.h" 15*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/base/SkAnySubclass.h" 16*c8dee2aaSAndroid Build Coastguard Worker 17*c8dee2aaSAndroid Build Coastguard Worker namespace skgpu::graphite { 18*c8dee2aaSAndroid Build Coastguard Worker 19*c8dee2aaSAndroid Build Coastguard Worker class BackendTextureData; 20*c8dee2aaSAndroid Build Coastguard Worker struct VulkanTextureInfo; 21*c8dee2aaSAndroid Build Coastguard Worker 22*c8dee2aaSAndroid Build Coastguard Worker class SK_API BackendTexture { 23*c8dee2aaSAndroid Build Coastguard Worker public: 24*c8dee2aaSAndroid Build Coastguard Worker BackendTexture(); 25*c8dee2aaSAndroid Build Coastguard Worker BackendTexture(const BackendTexture&); 26*c8dee2aaSAndroid Build Coastguard Worker 27*c8dee2aaSAndroid Build Coastguard Worker ~BackendTexture(); 28*c8dee2aaSAndroid Build Coastguard Worker 29*c8dee2aaSAndroid Build Coastguard Worker BackendTexture& operator=(const BackendTexture&); 30*c8dee2aaSAndroid Build Coastguard Worker 31*c8dee2aaSAndroid Build Coastguard Worker bool operator==(const BackendTexture&) const; 32*c8dee2aaSAndroid Build Coastguard Worker bool operator!=(const BackendTexture& that) const { return !(*this == that); } 33*c8dee2aaSAndroid Build Coastguard Worker isValid()34*c8dee2aaSAndroid Build Coastguard Worker bool isValid() const { return fInfo.isValid(); } backend()35*c8dee2aaSAndroid Build Coastguard Worker BackendApi backend() const { return fInfo.backend(); } 36*c8dee2aaSAndroid Build Coastguard Worker dimensions()37*c8dee2aaSAndroid Build Coastguard Worker SkISize dimensions() const { return fDimensions; } 38*c8dee2aaSAndroid Build Coastguard Worker info()39*c8dee2aaSAndroid Build Coastguard Worker const TextureInfo& info() const { return fInfo; } 40*c8dee2aaSAndroid Build Coastguard Worker 41*c8dee2aaSAndroid Build Coastguard Worker private: 42*c8dee2aaSAndroid Build Coastguard Worker friend class BackendTextureData; 43*c8dee2aaSAndroid Build Coastguard Worker friend class BackendTexturePriv; 44*c8dee2aaSAndroid Build Coastguard Worker 45*c8dee2aaSAndroid Build Coastguard Worker // Size determined by looking at the BackendTextureData subclasses, then guessing-and-checking. 46*c8dee2aaSAndroid Build Coastguard Worker // Compiler will complain if this is too small - in that case, just increase the number. 47*c8dee2aaSAndroid Build Coastguard Worker inline constexpr static size_t kMaxSubclassSize = 72; 48*c8dee2aaSAndroid Build Coastguard Worker using AnyBackendTextureData = SkAnySubclass<BackendTextureData, kMaxSubclassSize>; 49*c8dee2aaSAndroid Build Coastguard Worker 50*c8dee2aaSAndroid Build Coastguard Worker template <typename SomeBackendTextureData> BackendTexture(SkISize dimensions,TextureInfo info,const SomeBackendTextureData & textureData)51*c8dee2aaSAndroid Build Coastguard Worker BackendTexture(SkISize dimensions, TextureInfo info, const SomeBackendTextureData& textureData) 52*c8dee2aaSAndroid Build Coastguard Worker : fDimensions(dimensions), fInfo(info) { 53*c8dee2aaSAndroid Build Coastguard Worker fTextureData.emplace<SomeBackendTextureData>(textureData); 54*c8dee2aaSAndroid Build Coastguard Worker } 55*c8dee2aaSAndroid Build Coastguard Worker 56*c8dee2aaSAndroid Build Coastguard Worker SkISize fDimensions; 57*c8dee2aaSAndroid Build Coastguard Worker TextureInfo fInfo; 58*c8dee2aaSAndroid Build Coastguard Worker AnyBackendTextureData fTextureData; 59*c8dee2aaSAndroid Build Coastguard Worker }; 60*c8dee2aaSAndroid Build Coastguard Worker 61*c8dee2aaSAndroid Build Coastguard Worker } // namespace skgpu::graphite 62*c8dee2aaSAndroid Build Coastguard Worker 63*c8dee2aaSAndroid Build Coastguard Worker #endif // skgpu_graphite_BackendTexture_DEFINED 64*c8dee2aaSAndroid Build Coastguard Worker 65