• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2020 Google Inc.
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 SkCompressedDataUtils_DEFINED
9 #define SkCompressedDataUtils_DEFINED
10 
11 #include "include/core/SkRefCnt.h"
12 #include "include/core/SkTextureCompressionType.h"
13 #include "include/private/base/SkAssert.h"
14 #include "include/private/base/SkTArray.h"
15 
16 #include <cstddef>
17 
18 class SkBitmap;
19 class SkData;
20 struct SkISize;
21 
SkTextureCompressionTypeIsOpaque(SkTextureCompressionType compression)22 static constexpr bool SkTextureCompressionTypeIsOpaque(SkTextureCompressionType compression) {
23     switch (compression) {
24         case SkTextureCompressionType::kNone:             return true;
25         case SkTextureCompressionType::kETC2_RGB8_UNORM:  return true;
26         case SkTextureCompressionType::kBC1_RGB8_UNORM:   return true;
27         case SkTextureCompressionType::kBC1_RGBA8_UNORM:  return false;
28         case SkTextureCompressionType::kASTC_RGBA8_4x4:   return false;
29         case SkTextureCompressionType::kASTC_RGBA8_6x6:   return false;
30         case SkTextureCompressionType::kASTC_RGBA8_8x8:   return false;
31     }
32 
33     SkUNREACHABLE;
34 }
35 
36 size_t SK_API SkCompressedDataSize(SkTextureCompressionType, SkISize baseDimensions,
37                                    skia_private::TArray<size_t>* individualMipOffsets, bool mipmapped);
38 size_t SkCompressedBlockSize(SkTextureCompressionType type);
39 
40 /**
41  * Returns the data size for the given SkTextureCompressionType
42  */
43 size_t SkCompressedFormatDataSize(SkTextureCompressionType compressionType,
44                                   SkISize dimensions, bool mipmapped);
45 
46  /*
47   * This method will decompress the bottommost level in 'data' into 'dst'.
48   */
49 bool SkDecompress(sk_sp<SkData> data,
50                   SkISize dimensions,
51                   SkTextureCompressionType compressionType,
52                   SkBitmap* dst);
53 
54 #endif
55