| Index: src/codec/SkSwizzler.cpp
|
| diff --git a/src/codec/SkSwizzler.cpp b/src/codec/SkSwizzler.cpp
|
| deleted file mode 100644
|
| index 563933f13a03c16e880c2b8132c7df3657fc4868..0000000000000000000000000000000000000000
|
| --- a/src/codec/SkSwizzler.cpp
|
| +++ /dev/null
|
| @@ -1,221 +0,0 @@
|
| -/*
|
| - * Copyright 2015 Google Inc.
|
| - *
|
| - * Use of this source code is governed by a BSD-style license that can be
|
| - * found in the LICENSE file.
|
| - */
|
| -
|
| -#include "SkColorPriv.h"
|
| -#include "SkSwizzler.h"
|
| -#include "SkTemplates.h"
|
| -
|
| -// index
|
| -
|
| -#define A32_MASK_IN_PLACE (SkPMColor)(SK_A32_MASK << SK_A32_SHIFT)
|
| -
|
| -static bool swizzle_index_to_n32(void* SK_RESTRICT dstRow,
|
| - const uint8_t* SK_RESTRICT src,
|
| - int width, int deltaSrc, int, const SkPMColor ctable[]) {
|
| -
|
| - SkPMColor* SK_RESTRICT dst = (SkPMColor*)dstRow;
|
| - SkPMColor cc = A32_MASK_IN_PLACE;
|
| - for (int x = 0; x < width; x++) {
|
| - SkPMColor c = ctable[*src];
|
| - cc &= c;
|
| - dst[x] = c;
|
| - src += deltaSrc;
|
| - }
|
| - return cc != A32_MASK_IN_PLACE;
|
| -}
|
| -
|
| -static bool swizzle_index_to_n32_skipZ(void* SK_RESTRICT dstRow,
|
| - const uint8_t* SK_RESTRICT src,
|
| - int width, int deltaSrc, int,
|
| - const SkPMColor ctable[]) {
|
| -
|
| - SkPMColor* SK_RESTRICT dst = (SkPMColor*)dstRow;
|
| - SkPMColor cc = A32_MASK_IN_PLACE;
|
| - for (int x = 0; x < width; x++) {
|
| - SkPMColor c = ctable[*src];
|
| - cc &= c;
|
| - if (c != 0) {
|
| - dst[x] = c;
|
| - }
|
| - src += deltaSrc;
|
| - }
|
| - return cc != A32_MASK_IN_PLACE;
|
| -}
|
| -
|
| -#undef A32_MASK_IN_PLACE
|
| -
|
| -// n32
|
| -static bool swizzle_rgbx_to_n32(void* SK_RESTRICT dstRow,
|
| - const uint8_t* SK_RESTRICT src,
|
| - int width, int deltaSrc, int, const SkPMColor[]) {
|
| - SkPMColor* SK_RESTRICT dst = (SkPMColor*)dstRow;
|
| - for (int x = 0; x < width; x++) {
|
| - dst[x] = SkPackARGB32(0xFF, src[0], src[1], src[2]);
|
| - src += deltaSrc;
|
| - }
|
| - return false;
|
| -}
|
| -
|
| -static bool swizzle_rgba_to_n32_premul(void* SK_RESTRICT dstRow,
|
| - const uint8_t* SK_RESTRICT src,
|
| - int width, int deltaSrc, int, const SkPMColor[]) {
|
| - SkPMColor* SK_RESTRICT dst = (SkPMColor*)dstRow;
|
| - unsigned alphaMask = 0xFF;
|
| - for (int x = 0; x < width; x++) {
|
| - unsigned alpha = src[3];
|
| - dst[x] = SkPreMultiplyARGB(alpha, src[0], src[1], src[2]);
|
| - src += deltaSrc;
|
| - alphaMask &= alpha;
|
| - }
|
| - return alphaMask != 0xFF;
|
| -}
|
| -
|
| -static bool swizzle_rgba_to_n32_unpremul(void* SK_RESTRICT dstRow,
|
| - const uint8_t* SK_RESTRICT src,
|
| - int width, int deltaSrc, int,
|
| - const SkPMColor[]) {
|
| - uint32_t* SK_RESTRICT dst = reinterpret_cast<uint32_t*>(dstRow);
|
| - unsigned alphaMask = 0xFF;
|
| - for (int x = 0; x < width; x++) {
|
| - unsigned alpha = src[3];
|
| - dst[x] = SkPackARGB32NoCheck(alpha, src[0], src[1], src[2]);
|
| - src += deltaSrc;
|
| - alphaMask &= alpha;
|
| - }
|
| - return alphaMask != 0xFF;
|
| -}
|
| -
|
| -static bool swizzle_rgba_to_n32_premul_skipZ(void* SK_RESTRICT dstRow,
|
| - const uint8_t* SK_RESTRICT src,
|
| - int width, int deltaSrc, int,
|
| - const SkPMColor[]) {
|
| - SkPMColor* SK_RESTRICT dst = (SkPMColor*)dstRow;
|
| - unsigned alphaMask = 0xFF;
|
| - for (int x = 0; x < width; x++) {
|
| - unsigned alpha = src[3];
|
| - if (0 != alpha) {
|
| - dst[x] = SkPreMultiplyARGB(alpha, src[0], src[1], src[2]);
|
| - }
|
| - src += deltaSrc;
|
| - alphaMask &= alpha;
|
| - }
|
| - return alphaMask != 0xFF;
|
| -}
|
| -
|
| -/**
|
| - FIXME: This was my idea to cheat in order to continue taking advantage of skipping zeroes.
|
| - This would be fine for drawing normally, but not for drawing with transfer modes. Being
|
| - honest means we can draw correctly with transfer modes, with the cost of not being able
|
| - to take advantage of Android's free unwritten pages. Something to keep in mind when we
|
| - decide whether to switch to unpremul default.
|
| -static bool swizzle_rgba_to_n32_unpremul_skipZ(void* SK_RESTRICT dstRow,
|
| - const uint8_t* SK_RESTRICT src,
|
| - int width, int deltaSrc, int,
|
| - const SkPMColor[]) {
|
| - SkPMColor* SK_RESTRICT dst = (SkPMColor*)dstRow;
|
| - unsigned alphaMask = 0xFF;
|
| - for (int x = 0; x < width; x++) {
|
| - unsigned alpha = src[3];
|
| - // NOTE: We cheat here. The caller requested unpremul and skip zeroes. It's possible
|
| - // the color components are not zero, but we skip them anyway, meaning they'll remain
|
| - // zero (implied by the request to skip zeroes).
|
| - if (0 != alpha) {
|
| - dst[x] = SkPackARGB32NoCheck(alpha, src[0], src[1], src[2]);
|
| - }
|
| - src += deltaSrc;
|
| - alphaMask &= alpha;
|
| - }
|
| - return alphaMask != 0xFF;
|
| -}
|
| -*/
|
| -
|
| -SkSwizzler* SkSwizzler::CreateSwizzler(SkSwizzler::SrcConfig sc, const SkPMColor* ctable,
|
| - const SkImageInfo& info, void* dst,
|
| - size_t dstRowBytes, bool skipZeroes) {
|
| - if (info.colorType() == kUnknown_SkColorType) {
|
| - return NULL;
|
| - }
|
| - if (info.minRowBytes() > dstRowBytes) {
|
| - return NULL;
|
| - }
|
| - if (kIndex == sc && NULL == ctable) {
|
| - return NULL;
|
| - }
|
| - RowProc proc = NULL;
|
| - switch (sc) {
|
| - case kIndex:
|
| - switch (info.colorType()) {
|
| - case kN32_SkColorType:
|
| - // We assume the color premultiplied ctable (or not) as desired.
|
| - if (skipZeroes) {
|
| - proc = &swizzle_index_to_n32_skipZ;
|
| - } else {
|
| - proc = &swizzle_index_to_n32;
|
| - }
|
| - break;
|
| -
|
| - default:
|
| - break;
|
| - }
|
| - break;
|
| - case kRGBX:
|
| - // TODO: Support other swizzles.
|
| - switch (info.colorType()) {
|
| - case kN32_SkColorType:
|
| - proc = &swizzle_rgbx_to_n32;
|
| - break;
|
| - default:
|
| - break;
|
| - }
|
| - break;
|
| - case kRGBA:
|
| - switch (info.colorType()) {
|
| - case kN32_SkColorType:
|
| - if (info.alphaType() == kUnpremul_SkAlphaType) {
|
| - // Respect skipZeroes?
|
| - proc = &swizzle_rgba_to_n32_unpremul;
|
| - } else {
|
| - if (skipZeroes) {
|
| - proc = &swizzle_rgba_to_n32_premul_skipZ;
|
| - } else {
|
| - proc = &swizzle_rgba_to_n32_premul;
|
| - }
|
| - }
|
| - break;
|
| - default:
|
| - break;
|
| - }
|
| - break;
|
| - default:
|
| - break;
|
| - }
|
| - if (NULL == proc) {
|
| - return NULL;
|
| - }
|
| - return SkNEW_ARGS(SkSwizzler, (proc, ctable, BytesPerPixel(sc), info, dst, dstRowBytes));
|
| -}
|
| -
|
| -SkSwizzler::SkSwizzler(RowProc proc, const SkPMColor* ctable, int srcBpp,
|
| - const SkImageInfo& info, void* dst, size_t rowBytes)
|
| - : fRowProc(proc)
|
| - , fColorTable(ctable)
|
| - , fSrcPixelSize(srcBpp)
|
| - , fDstInfo(info)
|
| - , fDstRow(dst)
|
| - , fDstRowBytes(rowBytes)
|
| - , fCurrY(0)
|
| -{
|
| -}
|
| -
|
| -bool SkSwizzler::next(const uint8_t* SK_RESTRICT src) {
|
| - SkASSERT(fCurrY < fDstInfo.height());
|
| - const bool hadAlpha = fRowProc(fDstRow, src, fDstInfo.width(), fSrcPixelSize,
|
| - fCurrY, fColorTable);
|
| - fCurrY++;
|
| - fDstRow = SkTAddOffset<void>(fDstRow, fDstRowBytes);
|
| - return hadAlpha;
|
| -}
|
|
|