| 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); | 
| } | 
|  |