| Index: src/utils/SkTextureCompressor.cpp
|
| diff --git a/src/utils/SkTextureCompressor.cpp b/src/utils/SkTextureCompressor.cpp
|
| index 30fd3072d5b67e8dab3e9981ebef631509893e7e..801328642ff301cd4cad88232373c67316273378 100644
|
| --- a/src/utils/SkTextureCompressor.cpp
|
| +++ b/src/utils/SkTextureCompressor.cpp
|
| @@ -20,15 +20,16 @@
|
|
|
| namespace SkTextureCompressor {
|
|
|
| -void GetBlockDimensions(Format format, int* dimX, int* dimY) {
|
| +void GetBlockDimensions(Format format, int* dimX, int* dimY, bool matchSpec) {
|
| if (NULL == dimX || NULL == dimY) {
|
| return;
|
| }
|
|
|
| - if (SkTextureCompressorGetPlatformDims(format, dimX, dimY)) {
|
| + if (!matchSpec && SkTextureCompressorGetPlatformDims(format, dimX, dimY)) {
|
| return;
|
| }
|
|
|
| + // No specialized arguments, return the dimensions as they are in the spec.
|
| switch(format) {
|
| // These formats are 64 bits per 4x4 block.
|
| default:
|
| @@ -50,7 +51,8 @@ void GetBlockDimensions(Format format, int* dimX, int* dimY) {
|
|
|
| int GetCompressedDataSize(Format fmt, int width, int height) {
|
| int dimX, dimY;
|
| - GetBlockDimensions(fmt, &dimX, &dimY);
|
| + GetBlockDimensions(fmt, &dimX, &dimY, true);
|
| +
|
| int encodedBlockSize = 0;
|
|
|
| switch (fmt) {
|
| @@ -159,4 +161,30 @@ SkBlitter* CreateBlitterForFormat(int width, int height, void* compressedBuffer,
|
| return NULL;
|
| }
|
|
|
| +bool DecompressBufferFromFormat(uint8_t* dst, int dstRowBytes, const uint8_t* src,
|
| + int width, int height, Format format) {
|
| + int dimX, dimY;
|
| + GetBlockDimensions(format, &dimX, &dimY, true);
|
| +
|
| + if (width < 0 || ((width % dimX) != 0) || height < 0 || ((height % dimY) != 0)) {
|
| + return false;
|
| + }
|
| +
|
| + switch(format) {
|
| + case kLATC_Format:
|
| + DecompressLATC(dst, dstRowBytes, src, width, height);
|
| + return true;
|
| +
|
| + case kR11_EAC_Format:
|
| + DecompressR11EAC(dst, dstRowBytes, src, width, height);
|
| + return true;
|
| +
|
| + case kASTC_12x12_Format:
|
| + // TODO(krajcevski) .. right now just fall through and return false.
|
| + return false;
|
| + }
|
| +
|
| + return false;
|
| +}
|
| +
|
| } // namespace SkTextureCompressor
|
|
|