1 /* 2 * Copyright 2021 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 8 #ifndef skgpu_TextureInfo_DEFINED 9 #define skgpu_TextureInfo_DEFINED 10 11 #include "experimental/graphite/include/GraphiteTypes.h" 12 13 #ifdef SK_METAL 14 #include "experimental/graphite/include/private/MtlTypesPriv.h" 15 #endif 16 17 namespace skgpu { 18 19 // Forward declares so we can friend classes in other namespaces 20 #ifdef SK_METAL 21 namespace mtl { 22 class Caps; 23 class Texture; 24 } 25 #endif 26 27 class TextureInfo { 28 public: TextureInfo()29 TextureInfo() {} 30 #ifdef SK_METAL TextureInfo(const mtl::TextureInfo & mtlInfo)31 TextureInfo(const mtl::TextureInfo& mtlInfo) 32 : fBackend(BackendApi::kMetal) 33 , fValid(true) 34 , fSampleCount(mtlInfo.fSampleCount) 35 , fLevelCount(mtlInfo.fLevelCount) 36 , fProtected(Protected::kNo) 37 , fMtlSpec(mtlInfo) {} 38 #endif 39 ~TextureInfo()40 ~TextureInfo() {} 41 TextureInfo(const TextureInfo&) = default; 42 TextureInfo& operator=(const TextureInfo&) = delete; 43 44 bool operator==(const TextureInfo&) const; 45 isValid()46 bool isValid() const { return fValid; } backend()47 BackendApi backend() const { return fBackend; } 48 numSamples()49 uint32_t numSamples() const { return fSampleCount; } numMipLevels()50 uint32_t numMipLevels() const { return fLevelCount; } isProtected()51 Protected isProtected() const { return fProtected; } 52 53 #ifdef SK_METAL getMtlTextureInfo(mtl::TextureInfo * info)54 bool getMtlTextureInfo(mtl::TextureInfo* info) const { 55 if (!this->isValid() || fBackend != BackendApi::kMetal) { 56 return false; 57 } 58 *info = mtl::TextureSpecToTextureInfo(fMtlSpec, fSampleCount, fLevelCount); 59 return true; 60 } 61 #endif 62 63 private: 64 #ifdef SK_METAL 65 friend class mtl::Caps; 66 friend class mtl::Texture; mtlTextureSpec()67 const mtl::TextureSpec& mtlTextureSpec() const { 68 SkASSERT(fValid && fBackend == BackendApi::kMetal); 69 return fMtlSpec; 70 } 71 #endif 72 73 BackendApi fBackend = BackendApi::kMock; 74 bool fValid = false; 75 76 uint32_t fSampleCount = 1; 77 uint32_t fLevelCount = 0; 78 Protected fProtected = Protected::kNo; 79 80 union { 81 #ifdef SK_METAL 82 mtl::TextureSpec fMtlSpec; 83 #endif 84 }; 85 }; 86 87 } // namespace skgpu 88 89 #endif //skgpu_TextureInfo_DEFINED 90