OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2014 Google Inc. | 2 * Copyright 2014 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #include "SkTextureCompressor.h" | 8 #include "SkTextureCompressor.h" |
9 #include "SkTextureCompressor_ASTC.h" | 9 #include "SkTextureCompressor_ASTC.h" |
10 #include "SkTextureCompressor_LATC.h" | 10 #include "SkTextureCompressor_LATC.h" |
(...skipping 26 matching lines...) Expand all Loading... |
37 void GetBlockDimensions(Format format, int* dimX, int* dimY, bool matchSpec) { | 37 void GetBlockDimensions(Format format, int* dimX, int* dimY, bool matchSpec) { |
38 if (NULL == dimX || NULL == dimY) { | 38 if (NULL == dimX || NULL == dimY) { |
39 return; | 39 return; |
40 } | 40 } |
41 | 41 |
42 if (!matchSpec && SkTextureCompressorGetPlatformDims(format, dimX, dimY)) { | 42 if (!matchSpec && SkTextureCompressorGetPlatformDims(format, dimX, dimY)) { |
43 return; | 43 return; |
44 } | 44 } |
45 | 45 |
46 // No specialized arguments, return the dimensions as they are in the spec. | 46 // No specialized arguments, return the dimensions as they are in the spec. |
47 static const struct FormatDimensions { | 47 switch(format) { |
48 const int fBlockSizeX; | 48 // These formats are 64 bits per 4x4 block. |
49 const int fBlockSizeY; | 49 default: |
50 } kFormatDimensions[kFormatCnt] = { | 50 SkDEBUGFAIL("Unknown compression format!"); |
51 { 4, 4 }, // kLATC_Format | 51 // fall through |
52 { 4, 4 }, // kR11_EAC_Format | 52 case kLATC_Format: |
53 { 4, 4 }, // kETC1_Format | 53 case kR11_EAC_Format: |
54 { 4, 4 }, // kASTC_4x4_Format | 54 case kETC1_Format: |
55 { 5, 4 }, // kASTC_5x4_Format | 55 *dimX = 4; |
56 { 5, 5 }, // kASTC_5x5_Format | 56 *dimY = 4; |
57 { 6, 5 }, // kASTC_6x5_Format | 57 break; |
58 { 6, 6 }, // kASTC_6x6_Format | |
59 { 8, 5 }, // kASTC_8x5_Format | |
60 { 8, 6 }, // kASTC_8x6_Format | |
61 { 8, 8 }, // kASTC_8x8_Format | |
62 { 10, 5 }, // kASTC_10x5_Format | |
63 { 10, 6 }, // kASTC_10x6_Format | |
64 { 10, 8 }, // kASTC_10x8_Format | |
65 { 10, 10 }, // kASTC_10x10_Format | |
66 { 12, 10 }, // kASTC_12x10_Format | |
67 { 12, 12 }, // kASTC_12x12_Format | |
68 }; | |
69 | 58 |
70 *dimX = kFormatDimensions[format].fBlockSizeX; | 59 // This format is 12x12 blocks to 128 bits. |
71 *dimY = kFormatDimensions[format].fBlockSizeY; | 60 case kASTC_12x12_Format: |
| 61 *dimX = 12; |
| 62 *dimY = 12; |
| 63 break; |
| 64 } |
72 } | 65 } |
73 | 66 |
74 int GetCompressedDataSize(Format fmt, int width, int height) { | 67 int GetCompressedDataSize(Format fmt, int width, int height) { |
75 int dimX, dimY; | 68 int dimX, dimY; |
76 GetBlockDimensions(fmt, &dimX, &dimY, true); | 69 GetBlockDimensions(fmt, &dimX, &dimY, true); |
77 | 70 |
78 int encodedBlockSize = 0; | 71 int encodedBlockSize = 0; |
79 | 72 |
80 switch (fmt) { | 73 switch (fmt) { |
81 // These formats are 64 bits per 4x4 block. | 74 // These formats are 64 bits per 4x4 block. |
82 case kLATC_Format: | 75 case kLATC_Format: |
83 case kR11_EAC_Format: | 76 case kR11_EAC_Format: |
84 case kETC1_Format: | 77 case kETC1_Format: |
85 encodedBlockSize = 8; | 78 encodedBlockSize = 8; |
86 break; | 79 break; |
87 | 80 |
88 // This format is 128 bits. | 81 // This format is 12x12 blocks to 128 bits. |
89 case kASTC_4x4_Format: | |
90 case kASTC_5x4_Format: | |
91 case kASTC_5x5_Format: | |
92 case kASTC_6x5_Format: | |
93 case kASTC_6x6_Format: | |
94 case kASTC_8x5_Format: | |
95 case kASTC_8x6_Format: | |
96 case kASTC_8x8_Format: | |
97 case kASTC_10x5_Format: | |
98 case kASTC_10x6_Format: | |
99 case kASTC_10x8_Format: | |
100 case kASTC_10x10_Format: | |
101 case kASTC_12x10_Format: | |
102 case kASTC_12x12_Format: | 82 case kASTC_12x12_Format: |
103 encodedBlockSize = 16; | 83 encodedBlockSize = 16; |
104 break; | 84 break; |
105 | 85 |
106 default: | 86 default: |
107 SkFAIL("Unknown compressed format!"); | 87 SkFAIL("Unknown compressed format!"); |
108 return -1; | 88 return -1; |
109 } | 89 } |
110 | 90 |
111 if(((width % dimX) == 0) && ((height % dimY) == 0)) { | 91 if(((width % dimX) == 0) && ((height % dimY) == 0)) { |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
225 return true; | 205 return true; |
226 | 206 |
227 case kR11_EAC_Format: | 207 case kR11_EAC_Format: |
228 DecompressR11EAC(dst, dstRowBytes, src, width, height); | 208 DecompressR11EAC(dst, dstRowBytes, src, width, height); |
229 return true; | 209 return true; |
230 | 210 |
231 #ifndef SK_IGNORE_ETC1_SUPPORT | 211 #ifndef SK_IGNORE_ETC1_SUPPORT |
232 case kETC1_Format: | 212 case kETC1_Format: |
233 return 0 == etc1_decode_image(src, dst, width, height, 3, dstRowByte
s); | 213 return 0 == etc1_decode_image(src, dst, width, height, 3, dstRowByte
s); |
234 #endif | 214 #endif |
235 | |
236 case kASTC_4x4_Format: | |
237 case kASTC_5x4_Format: | |
238 case kASTC_5x5_Format: | |
239 case kASTC_6x5_Format: | |
240 case kASTC_6x6_Format: | |
241 case kASTC_8x5_Format: | |
242 case kASTC_8x6_Format: | |
243 case kASTC_8x8_Format: | |
244 case kASTC_10x5_Format: | |
245 case kASTC_10x6_Format: | |
246 case kASTC_10x8_Format: | |
247 case kASTC_10x10_Format: | |
248 case kASTC_12x10_Format: | |
249 case kASTC_12x12_Format: | 215 case kASTC_12x12_Format: |
250 DecompressASTC(dst, dstRowBytes, src, width, height, dimX, dimY); | 216 // TODO(krajcevski) .. right now just fall through and return false. |
251 return true; | 217 return false; |
252 | 218 |
253 default: | 219 default: |
254 // Do nothing... | 220 // Do nothing... |
255 break; | 221 break; |
256 } | 222 } |
257 | 223 |
258 return false; | 224 return false; |
259 } | 225 } |
260 | 226 |
261 } // namespace SkTextureCompressor | 227 } // namespace SkTextureCompressor |
OLD | NEW |