Chromium Code Reviews| 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); |