| Index: src/utils/SkTextureCompressor.cpp
|
| diff --git a/src/utils/SkTextureCompressor.cpp b/src/utils/SkTextureCompressor.cpp
|
| index c4a6293ed26f6a4407a0f20332e088a8119b8319..2b9234746091bc64ef94af123369154dc799088f 100644
|
| --- a/src/utils/SkTextureCompressor.cpp
|
| +++ b/src/utils/SkTextureCompressor.cpp
|
| @@ -11,6 +11,8 @@
|
| #include "SkData.h"
|
| #include "SkEndian.h"
|
|
|
| +#include "SkTextureCompression_opts.h"
|
| +
|
| ////////////////////////////////////////////////////////////////////////////////
|
| //
|
| // Utility Functions
|
| @@ -586,15 +588,14 @@ static inline uint64_t interleave6(uint64_t topRows, uint64_t bottomRows) {
|
|
|
| // x: b f 00 00 00 a e c g i m 00 00 00 d h j n 00 k o 00 l p
|
|
|
| - x |= ((x << 52) & (0x3FULL << 52));
|
| - x = (x | ((x << 20) & (0x3FULL << 28))) >> 16;
|
| + x = (x | ((x << 52) & (0x3FULL << 52)) | ((x << 20) & (0x3FULL << 28))) >> 16;
|
|
|
| -#if defined (SK_CPU_BENDIAN)
|
| // x: 00 00 00 00 00 00 00 00 b f l p a e c g i m k o d h j n
|
|
|
| t = (x ^ (x >> 6)) & 0xFC0000ULL;
|
| x = x ^ t ^ (t << 6);
|
|
|
| +#if defined (SK_CPU_BENDIAN)
|
| // x: 00 00 00 00 00 00 00 00 b f l p a e i m c g k o d h j n
|
|
|
| t = (x ^ (x >> 36)) & 0x3FULL;
|
| @@ -610,11 +611,6 @@ static inline uint64_t interleave6(uint64_t topRows, uint64_t bottomRows) {
|
| #else
|
| // If our CPU is little endian, then the above logic will
|
| // produce the following indices:
|
| - // x: 00 00 00 00 00 00 00 00 c g i m d h b f l p j n a e k o
|
| -
|
| - t = (x ^ (x >> 6)) & 0xFC0000ULL;
|
| - x = x ^ t ^ (t << 6);
|
| -
|
| // x: 00 00 00 00 00 00 00 00 c g i m d h l p b f j n a e k o
|
|
|
| t = (x ^ (x >> 36)) & 0xFC0ULL;
|
| @@ -770,19 +766,37 @@ static inline size_t get_compressed_data_size(Format fmt, int width, int height)
|
| }
|
| }
|
|
|
| -typedef bool (*CompressBitmapProc)(uint8_t* dst, const uint8_t* src,
|
| - int width, int height, int rowBytes);
|
| -
|
| bool CompressBufferToFormat(uint8_t* dst, const uint8_t* src, SkColorType srcColorType,
|
| - int width, int height, int rowBytes, Format format) {
|
| + int width, int height, int rowBytes, Format format, bool opt) {
|
| + CompressionProc proc = NULL;
|
| + if (opt) {
|
| + proc = SkTextureCompressorGetPlatformProc(srcColorType, format);
|
| + }
|
|
|
| - CompressBitmapProc kProcMap[kFormatCnt][kLastEnum_SkColorType + 1];
|
| - memset(kProcMap, 0, sizeof(kProcMap));
|
| + if (NULL == proc) {
|
| + switch (srcColorType) {
|
| + case kAlpha_8_SkColorType:
|
| + {
|
| + switch (format) {
|
| + case kLATC_Format:
|
| + proc = compress_a8_to_latc;
|
| + break;
|
| + case kR11_EAC_Format:
|
| + proc = compress_a8_to_r11eac;
|
| + break;
|
| + default:
|
| + // Do nothing...
|
| + break;
|
| + }
|
| + }
|
| + break;
|
|
|
| - kProcMap[kLATC_Format][kAlpha_8_SkColorType] = compress_a8_to_latc;
|
| - kProcMap[kR11_EAC_Format][kAlpha_8_SkColorType] = compress_a8_to_r11eac;
|
| + default:
|
| + // Do nothing...
|
| + break;
|
| + }
|
| + }
|
|
|
| - CompressBitmapProc proc = kProcMap[format][srcColorType];
|
| if (NULL != proc) {
|
| return proc(dst, src, width, height, rowBytes);
|
| }
|
|
|