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 |