diff options
author | reed <reed@google.com> | 2015-04-14 18:39:57 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-04-14 18:39:57 -0700 |
commit | dd83031b98db4c6d3d0de2353bf115152a7d1464 (patch) | |
tree | ad5d37b51be4935c20c413ec096ce9d084e13f51 /src/core/SkBlitter_ARGB32.cpp | |
parent | c3c5990ac0f1063eb92a98b98a71314b5b5ef7e8 (diff) |
add new blit2 methods in support of antialiased hairlines
before:
9M 1 528µs 530µs 539µs 607µs 5% ▁▁▁▁▁▁▁▁█▂ 8888 path_hairline_small_AA_quad
after:
9M 1 355µs 356µs 358µs 375µs 2% ▂▁▁▁▁▁▁▁▁█ 8888 path_hairline_small_AA_quad
BUG=skia:
does require new baselines (bug chrome is guarded)
Review URL: https://codereview.chromium.org/1060153003
Diffstat (limited to 'src/core/SkBlitter_ARGB32.cpp')
-rw-r--r-- | src/core/SkBlitter_ARGB32.cpp | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/src/core/SkBlitter_ARGB32.cpp b/src/core/SkBlitter_ARGB32.cpp index bbad6c7926..caf85ddc1f 100644 --- a/src/core/SkBlitter_ARGB32.cpp +++ b/src/core/SkBlitter_ARGB32.cpp @@ -106,6 +106,25 @@ void SkARGB32_Blitter::blitAntiH(int x, int y, const SkAlpha antialias[], } } +#ifndef SK_SUPPORT_LEGACY_BLITANTIH2V2 +void SkARGB32_Blitter::blitAntiH2(int x, int y, U8CPU a0, U8CPU a1) { + uint32_t* device = fDevice.getAddr32(x, y); + SkDEBUGCODE((void)fDevice.getAddr32(x + 1, y);) + + device[0] = SkBlendARGB32(fPMColor, device[0], a0); + device[1] = SkBlendARGB32(fPMColor, device[1], a1); +} + +void SkARGB32_Blitter::blitAntiV2(int x, int y, U8CPU a0, U8CPU a1) { + uint32_t* device = fDevice.getAddr32(x, y); + SkDEBUGCODE((void)fDevice.getAddr32(x, y + 1);) + + device[0] = SkBlendARGB32(fPMColor, device[0], a0); + device = (uint32_t*)((char*)device + fDevice.rowBytes()); + device[0] = SkBlendARGB32(fPMColor, device[0], a1); +} +#endif + ////////////////////////////////////////////////////////////////////////////////////// #define solid_8_pixels(mask, dst, color) \ @@ -180,6 +199,25 @@ void SkARGB32_Opaque_Blitter::blitMask(const SkMask& mask, } } +#ifndef SK_SUPPORT_LEGACY_BLITANTIH2V2 +void SkARGB32_Opaque_Blitter::blitAntiH2(int x, int y, U8CPU a0, U8CPU a1) { + uint32_t* device = fDevice.getAddr32(x, y); + SkDEBUGCODE((void)fDevice.getAddr32(x + 1, y);) + + device[0] = SkFastFourByteInterp(fPMColor, device[0], a0); + device[1] = SkFastFourByteInterp(fPMColor, device[1], a1); +} + +void SkARGB32_Opaque_Blitter::blitAntiV2(int x, int y, U8CPU a0, U8CPU a1) { + uint32_t* device = fDevice.getAddr32(x, y); + SkDEBUGCODE((void)fDevice.getAddr32(x, y + 1);) + + device[0] = SkFastFourByteInterp(fPMColor, device[0], a0); + device = (uint32_t*)((char*)device + fDevice.rowBytes()); + device[0] = SkFastFourByteInterp(fPMColor, device[0], a1); +} +#endif + /////////////////////////////////////////////////////////////////////////////// void SkARGB32_Blitter::blitV(int x, int y, int height, SkAlpha alpha) { @@ -256,6 +294,25 @@ void SkARGB32_Black_Blitter::blitAntiH(int x, int y, const SkAlpha antialias[], } } +#ifndef SK_SUPPORT_LEGACY_BLITANTIH2V2 +void SkARGB32_Black_Blitter::blitAntiH2(int x, int y, U8CPU a0, U8CPU a1) { + uint32_t* device = fDevice.getAddr32(x, y); + SkDEBUGCODE((void)fDevice.getAddr32(x + 1, y);) + + device[0] = (a0 << SK_A32_SHIFT) + SkAlphaMulQ(device[0], 256 - a0); + device[1] = (a1 << SK_A32_SHIFT) + SkAlphaMulQ(device[1], 256 - a1); +} + +void SkARGB32_Black_Blitter::blitAntiV2(int x, int y, U8CPU a0, U8CPU a1) { + uint32_t* device = fDevice.getAddr32(x, y); + SkDEBUGCODE((void)fDevice.getAddr32(x, y + 1);) + + device[0] = (a0 << SK_A32_SHIFT) + SkAlphaMulQ(device[0], 256 - a0); + device = (uint32_t*)((char*)device + fDevice.rowBytes()); + device[0] = (a1 << SK_A32_SHIFT) + SkAlphaMulQ(device[0], 256 - a1); +} +#endif + /////////////////////////////////////////////////////////////////////////////// // Special version of SkBlitRow::Factory32 that knows we're in kSrc_Mode, |