diff options
author | msarett <msarett@google.com> | 2016-01-19 10:40:12 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-01-19 10:40:12 -0800 |
commit | bda86098ab2784968d0a1222dd1f4c18d18fe050 (patch) | |
tree | 7e81abd15acc0186a95ec3454f85dc663c36a996 /src/codec/SkSwizzler.cpp | |
parent | 94ec356ed4d8ed0cef39a43b221bee9394f74a8e (diff) |
Clean up unused or overly complex modes in SkSwizzler
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1582083005
Review URL: https://codereview.chromium.org/1582083005
Diffstat (limited to 'src/codec/SkSwizzler.cpp')
-rw-r--r-- | src/codec/SkSwizzler.cpp | 196 |
1 files changed, 89 insertions, 107 deletions
diff --git a/src/codec/SkSwizzler.cpp b/src/codec/SkSwizzler.cpp index e560d6f3cd..65e521050e 100644 --- a/src/codec/SkSwizzler.cpp +++ b/src/codec/SkSwizzler.cpp @@ -11,19 +11,44 @@ #include "SkSwizzler.h" #include "SkTemplates.h" -// samples the row. Does not do anything else but sampling -static void sample565(void* SK_RESTRICT dstRow, const uint8_t* SK_RESTRICT src, - int width, int bpp, int deltaSrc, int offset, const SkPMColor ctable[]){ +static void copy(void* dst, const uint8_t* src, int width, int bpp, int deltaSrc, int offset, + const SkPMColor ctable[]) { + // This function must not be called if we are sampling. If we are not + // sampling, deltaSrc should equal bpp. + SkASSERT(deltaSrc == bpp); + memcpy(dst, src + offset, width * bpp); +} + +static void sample1(void* dst, const uint8_t* src, int width, int bpp, int deltaSrc, int offset, + const SkPMColor ctable[]) { src += offset; - uint16_t* SK_RESTRICT dst = (uint16_t*) dstRow; + uint8_t* dst8 = (uint8_t*) dst; + for (int x = 0; x < width; x++) { + dst8[x] = *src; + src += deltaSrc; + } +} + +static void sample2(void* dst, const uint8_t* src, int width, int bpp, int deltaSrc, int offset, + const SkPMColor ctable[]) { + src += offset; + uint16_t* dst16 = (uint16_t*) dst; for (int x = 0; x < width; x++) { - dst[x] = src[1] << 8 | src[0]; + dst16[x] = *((const uint16_t*) src); src += deltaSrc; } } -// TODO (msarett): Investigate SIMD optimizations for swizzle routines. +static void sample4(void* dst, const uint8_t* src, int width, int bpp, int deltaSrc, int offset, + const SkPMColor ctable[]) { + src += offset; + uint32_t* dst32 = (uint32_t*) dst; + for (int x = 0; x < width; x++) { + dst32[x] = *((const uint32_t*) src); + src += deltaSrc; + } +} // kBit // These routines exclusively choose between white and black @@ -192,22 +217,6 @@ static void swizzle_small_index_to_n32( // kIndex -static void swizzle_index_to_index( - void* SK_RESTRICT dstRow, const uint8_t* SK_RESTRICT src, int dstWidth, - int bpp, int deltaSrc, int offset, const SkPMColor ctable[]) { - - src += offset; - uint8_t* SK_RESTRICT dst = (uint8_t*) dstRow; - if (1 == deltaSrc) { - memcpy(dst, src, dstWidth); - } else { - for (int x = 0; x < dstWidth; x++) { - dst[x] = *src; - src += deltaSrc; - } - } -} - static void swizzle_index_to_n32( void* SK_RESTRICT dstRow, const uint8_t* SK_RESTRICT src, int dstWidth, int bpp, int deltaSrc, int offset, const SkPMColor ctable[]) { @@ -261,22 +270,6 @@ static void swizzle_gray_to_n32( } } -static void swizzle_gray_to_gray( - void* SK_RESTRICT dstRow, const uint8_t* SK_RESTRICT src, int dstWidth, - int bpp, int deltaSrc, int offset, const SkPMColor ctable[]) { - - src += offset; - uint8_t* SK_RESTRICT dst = (uint8_t*) dstRow; - if (1 == deltaSrc) { - memcpy(dstRow, src, dstWidth); - } else { - for (int x = 0; x < dstWidth; x++) { - dst[x] = src[0]; - src += deltaSrc; - } - } -} - static void swizzle_gray_to_565( void* SK_RESTRICT dstRow, const uint8_t* SK_RESTRICT src, int dstWidth, int bytesPerPixel, int deltaSrc, int offset, const SkPMColor ctable[]) { @@ -303,26 +296,6 @@ static void swizzle_bgrx_to_n32( } } -static void fast_swizzle_bgrx_to_32( - void* dst, const uint8_t* src, int width, int bpp, int deltaSrc, int offset, - const SkPMColor ctable[]) { - - // This function must not be called if we are sampling. If we are not - // sampling, deltaSrc should equal bpp. - SkASSERT(deltaSrc == bpp); - - // The default swizzle supports BGR->N32 and BGRX->N32. This only - // supports BGRX->N32. - SkASSERT(4 == bpp); - - // These swizzles trust that the alpha value is already 0xFF. -#ifdef SK_PMCOLOR_IS_RGBA - SkOpts::swaprb_xxxa((uint32_t*) dst, (const uint32_t*) (src + offset), width); -#else - memcpy(dst, src + offset, width * bpp); -#endif -} - static void swizzle_bgrx_to_565( void* SK_RESTRICT dstRow, const uint8_t* SK_RESTRICT src, int dstWidth, int bpp, int deltaSrc, int offset, const SkPMColor ctable[]) { @@ -350,6 +323,22 @@ static void swizzle_bgra_to_n32_unpremul( } } +static void fast_swizzle_bgra_to_n32_unpremul( + void* dst, const uint8_t* src, int width, int bpp, int deltaSrc, int offset, + const SkPMColor ctable[]) { + + // This function must not be called if we are sampling. If we are not + // sampling, deltaSrc should equal bpp. + SkASSERT(deltaSrc == bpp); + + // These swizzles trust that the alpha value is already 0xFF. +#ifdef SK_PMCOLOR_IS_RGBA + SkOpts::swaprb_xxxa((uint32_t*) dst, (const uint32_t*) (src + offset), width); +#else + memcpy(dst, src + offset, width * bpp); +#endif +} + static void swizzle_bgra_to_n32_premul( void* SK_RESTRICT dstRow, const uint8_t* SK_RESTRICT src, int dstWidth, int bpp, int deltaSrc, int offset, const SkPMColor ctable[]) { @@ -378,9 +367,9 @@ static void fast_swizzle_bgra_to_n32_premul( #endif } -// kRGBX +// kRGB -static void swizzle_rgbx_to_n32( +static void swizzle_rgb_to_n32( void* SK_RESTRICT dstRow, const uint8_t* SK_RESTRICT src, int dstWidth, int bpp, int deltaSrc, int offset, const SkPMColor ctable[]) { @@ -392,27 +381,9 @@ static void swizzle_rgbx_to_n32( } } -static void fast_swizzle_rgbx_to_32( - void* dst, const uint8_t* src, int width, int bpp, int deltaSrc, int offset, - const SkPMColor ctable[]) { - - // This function must not be called if we are sampling. If we are not - // sampling, deltaSrc should equal bpp. - SkASSERT(deltaSrc == bpp); - - // The default swizzle supports RGB->N32 and RGBX->N32. This only - // supports RGBX->N32. - SkASSERT(4 == bpp); - // These swizzles trust that the alpha value is already 0xFF. -#ifdef SK_PMCOLOR_IS_RGBA - memcpy(dst, src + offset, width * bpp); -#else - SkOpts::swaprb_xxxa((uint32_t*) dst, (const uint32_t*) (src + offset), width); -#endif -} -static void swizzle_rgbx_to_565( +static void swizzle_rgb_to_565( void* SK_RESTRICT dstRow, const uint8_t* SK_RESTRICT src, int dstWidth, int bytesPerPixel, int deltaSrc, int offset, const SkPMColor ctable[]) { @@ -467,6 +438,22 @@ static void swizzle_rgba_to_n32_unpremul( } } +static void fast_swizzle_rgba_to_n32_unpremul( + void* dst, const uint8_t* src, int width, int bpp, int deltaSrc, int offset, + const SkPMColor ctable[]) { + + // This function must not be called if we are sampling. If we are not + // sampling, deltaSrc should equal bpp. + SkASSERT(deltaSrc == bpp); + + // These swizzles trust that the alpha value is already 0xFF. +#ifdef SK_PMCOLOR_IS_RGBA + memcpy(dst, src + offset, width * bpp); +#else + SkOpts::swaprb_xxxa((uint32_t*) dst, (const uint32_t*) (src + offset), width); +#endif +} + // kCMYK // // CMYK is stored as four bytes per pixel. @@ -630,7 +617,8 @@ SkSwizzler* SkSwizzler::CreateSwizzler(SkSwizzler::SrcConfig sc, proc = &swizzle_index_to_565; break; case kIndex_8_SkColorType: - proc = &swizzle_index_to_index; + proc = &sample1; + fastProc = © break; default: break; @@ -642,7 +630,8 @@ SkSwizzler* SkSwizzler::CreateSwizzler(SkSwizzler::SrcConfig sc, proc = &swizzle_gray_to_n32; break; case kGray_8_SkColorType: - proc = &swizzle_gray_to_gray; + proc = &sample1; + fastProc = © break; case kRGB_565_SkColorType: proc = &swizzle_gray_to_565; @@ -670,10 +659,10 @@ SkSwizzler* SkSwizzler::CreateSwizzler(SkSwizzler::SrcConfig sc, if (dstInfo.alphaType() == kUnpremul_SkAlphaType) { if (SkCodec::kYes_ZeroInitialized == zeroInit) { proc = &SkipLeading8888ZerosThen<swizzle_bgra_to_n32_unpremul>; - fastProc = &SkipLeading8888ZerosThen<fast_swizzle_bgrx_to_32>; + fastProc = &SkipLeading8888ZerosThen<fast_swizzle_bgra_to_n32_unpremul>; } else { proc = &swizzle_bgra_to_n32_unpremul; - fastProc = &fast_swizzle_bgrx_to_32; + fastProc = &fast_swizzle_bgra_to_n32_unpremul; } } else { if (SkCodec::kYes_ZeroInitialized == zeroInit) { @@ -689,14 +678,13 @@ SkSwizzler* SkSwizzler::CreateSwizzler(SkSwizzler::SrcConfig sc, break; } break; - case kRGBX: + case kRGB: switch (dstInfo.colorType()) { case kN32_SkColorType: - proc = &swizzle_rgbx_to_n32; - fastProc = &fast_swizzle_rgbx_to_32; + proc = &swizzle_rgb_to_n32; break; case kRGB_565_SkColorType: - proc = &swizzle_rgbx_to_565; + proc = &swizzle_rgb_to_565; default: break; } @@ -707,10 +695,10 @@ SkSwizzler* SkSwizzler::CreateSwizzler(SkSwizzler::SrcConfig sc, if (dstInfo.alphaType() == kUnpremul_SkAlphaType) { if (SkCodec::kYes_ZeroInitialized == zeroInit) { proc = &SkipLeading8888ZerosThen<swizzle_rgba_to_n32_unpremul>; - fastProc = &SkipLeading8888ZerosThen<fast_swizzle_rgbx_to_32>; + fastProc = &SkipLeading8888ZerosThen<fast_swizzle_rgba_to_n32_unpremul>; } else { proc = &swizzle_rgba_to_n32_unpremul; - fastProc = &fast_swizzle_rgbx_to_32; + fastProc = &fast_swizzle_rgba_to_n32_unpremul; } } else { if (SkCodec::kYes_ZeroInitialized == zeroInit) { @@ -726,24 +714,6 @@ SkSwizzler* SkSwizzler::CreateSwizzler(SkSwizzler::SrcConfig sc, break; } break; - case kRGB: - switch (dstInfo.colorType()) { - case kN32_SkColorType: - proc = &swizzle_rgbx_to_n32; - break; - default: - break; - } - break; - case kRGB_565: - switch (dstInfo.colorType()) { - case kRGB_565_SkColorType: - proc = &sample565; - break; - default: - break; - } - break; case kCMYK: switch (dstInfo.colorType()) { case kN32_SkColorType: @@ -756,6 +726,18 @@ SkSwizzler* SkSwizzler::CreateSwizzler(SkSwizzler::SrcConfig sc, break; } break; + case kNoOp8: + proc = &sample1; + fastProc = © + break; + case kNoOp16: + proc = sample2; + fastProc = © + break; + case kNoOp32: + proc = &sample4; + fastProc = © + break; default: break; } |