Index: src/utils/SkTextureCompressor_R11EAC.cpp |
diff --git a/src/utils/SkTextureCompressor_R11EAC.cpp b/src/utils/SkTextureCompressor_R11EAC.cpp |
index 7baa219a28de88d05e2a6966b85b9d45ab2534e6..1b0a705c10d7bff2dda78586a427162c38be1d84 100644 |
--- a/src/utils/SkTextureCompressor_R11EAC.cpp |
+++ b/src/utils/SkTextureCompressor_R11EAC.cpp |
@@ -609,6 +609,21 @@ bool CompressA8ToR11EAC(uint8_t* dst, const uint8_t* src, int width, int height, |
} |
SkBlitter* CreateR11EACBlitter(int width, int height, void* outputBuffer) { |
+ if ((width % 4) != 0 || (height % 4) != 0) { |
+ return NULL; |
+ } |
+ |
+ // Memset the output buffer to an encoding that decodes to zero... |
robertphillips
2014/08/06 20:54:49
ASTC -> R11 ?
krajcevski
2014/08/06 22:42:00
Done.
|
+ // In the case of ASTC, if everything index is zero, then the interpolated value |
+ // will decode to zero provided we have the right header. We use the encoding |
+ // from recognizing all zero blocks from above. |
+ const int nBlocks = (width * height / 16); |
+ uint64_t *dst = reinterpret_cast<uint64_t *>(outputBuffer); |
+ for (int i = 0; i < nBlocks; ++i) { |
+ *dst = 0x0020000000002000ULL; |
+ ++dst; |
+ } |
+ |
return new |
SkTCompressedAlphaBlitter<4, 8, compress_block_vertical> |
(width, height, outputBuffer); |