Remove all legacy 565 blitters
These are actually faster than RP in some cases, but it's 565, so I
don't care. Saves about 1.4K of code locally.
Change-Id: I08867b9ff7ad6ce28d5ee7c69d10ecea270128f0
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/579098
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Ben Wagner <bungeman@google.com>
diff --git a/gn/core.gni b/gn/core.gni
index 45f2816..e2d7078 100644
--- a/gn/core.gni
+++ b/gn/core.gni
@@ -141,7 +141,6 @@
"$_src/core/SkBlitter.h",
"$_src/core/SkBlitter_A8.cpp",
"$_src/core/SkBlitter_ARGB32.cpp",
- "$_src/core/SkBlitter_RGB565.cpp",
"$_src/core/SkBlitter_Sprite.cpp",
"$_src/core/SkBlockAllocator.cpp",
"$_src/core/SkBlockAllocator.h",
diff --git a/include/private/SkColorData.h b/include/private/SkColorData.h
index 2b27785..5761df2 100644
--- a/include/private/SkColorData.h
+++ b/include/private/SkColorData.h
@@ -330,27 +330,6 @@
/////////////////////////////////////////////////////////////////////////////////////////
-/* SrcOver the 32bit src color with the 16bit dst, returning a 16bit value
- (with dirt in the high 16bits, so caller beware).
-*/
-static inline U16CPU SkSrcOver32To16(SkPMColor src, uint16_t dst) {
- unsigned sr = SkGetPackedR32(src);
- unsigned sg = SkGetPackedG32(src);
- unsigned sb = SkGetPackedB32(src);
-
- unsigned dr = SkGetPackedR16(dst);
- unsigned dg = SkGetPackedG16(dst);
- unsigned db = SkGetPackedB16(dst);
-
- unsigned isa = 255 - SkGetPackedA32(src);
-
- dr = (sr + SkMul16ShiftRound(dr, isa, SK_R16_BITS)) >> (8 - SK_R16_BITS);
- dg = (sg + SkMul16ShiftRound(dg, isa, SK_G16_BITS)) >> (8 - SK_G16_BITS);
- db = (sb + SkMul16ShiftRound(db, isa, SK_B16_BITS)) >> (8 - SK_B16_BITS);
-
- return SkPackRGB16(dr, dg, db);
-}
-
static inline SkColor SkPixel16ToColor(U16CPU src) {
SkASSERT(src == SkToU16(src));
diff --git a/public.bzl b/public.bzl
index d4cf522..5132021 100644
--- a/public.bzl
+++ b/public.bzl
@@ -331,7 +331,6 @@
"src/core/SkBlitter.h",
"src/core/SkBlitter_A8.cpp",
"src/core/SkBlitter_ARGB32.cpp",
- "src/core/SkBlitter_RGB565.cpp",
"src/core/SkBlitter_Sprite.cpp",
"src/core/SkBlockAllocator.cpp",
"src/core/SkBlockAllocator.h",
diff --git a/src/core/BUILD.bazel b/src/core/BUILD.bazel
index c4b1997..ef95284 100644
--- a/src/core/BUILD.bazel
+++ b/src/core/BUILD.bazel
@@ -76,7 +76,6 @@
"SkBlitter.h",
"SkBlitter_A8.cpp",
"SkBlitter_ARGB32.cpp",
- "SkBlitter_RGB565.cpp",
"SkBlitter_Sprite.cpp",
"SkBlurMF.cpp",
"SkBlurMask.cpp",
diff --git a/src/core/SkBlitter.cpp b/src/core/SkBlitter.cpp
index a6bfcaa..5d11f34 100644
--- a/src/core/SkBlitter.cpp
+++ b/src/core/SkBlitter.cpp
@@ -687,9 +687,8 @@
}
}
- // Only kN32 and 565 are handled by legacy blitters now, 565 mostly just for Android.
- return device.colorType() == kN32_SkColorType
- || device.colorType() == kRGB_565_SkColorType;
+ // Only kN32 is handled by legacy blitters now
+ return device.colorType() == kN32_SkColorType;
#endif
}
@@ -782,9 +781,8 @@
return create_SkRP_or_SkVMBlitter();
}
- // Everything but legacy kN32_SkColorType and kRGB_565_SkColorType should already be handled.
- SkASSERT(device.colorType() == kN32_SkColorType ||
- device.colorType() == kRGB_565_SkColorType);
+ // Everything but legacy kN32_SkColorType should already be handled.
+ SkASSERT(device.colorType() == kN32_SkColorType);
// And we should either have a shader, be blending with SrcOver, or both.
SkASSERT(paint->getShader() || paint->asBlendMode() == SkBlendMode::kSrcOver);
@@ -814,13 +812,6 @@
return alloc->make<SkARGB32_Blitter>(device, *paint);
}
- case kRGB_565_SkColorType:
- if (shaderContext && SkRGB565_Shader_Blitter::Supports(device, *paint)) {
- return alloc->make<SkRGB565_Shader_Blitter>(device, *paint, shaderContext);
- } else {
- return create_SkRP_or_SkVMBlitter();
- }
-
default:
SkASSERT(false);
return alloc->make<SkNullBlitter>();
diff --git a/src/core/SkBlitter_RGB565.cpp b/src/core/SkBlitter_RGB565.cpp
deleted file mode 100644
index c804f31..0000000
--- a/src/core/SkBlitter_RGB565.cpp
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * Copyright 2017 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include "include/core/SkShader.h"
-#include "include/private/SkColorData.h"
-#include "include/private/SkColorData.h"
-#include "src/core/SkCoreBlitters.h"
-#include "src/core/SkXfermodePriv.h"
-
-static void D16_S32X_src(uint16_t dst[], const SkPMColor src[], int count, uint8_t coverage) {
- SkASSERT(coverage == 0xFF);
- for (int i = 0; i < count; ++i) {
- dst[i] = SkPixel32ToPixel16(src[i]);
- }
-}
-
-static void D16_S32X_src_coverage(uint16_t dst[], const SkPMColor src[], int count,
- uint8_t coverage) {
- switch (coverage) {
- case 0: break;
- case 0xFF:
- for (int i = 0; i < count; ++i) {
- dst[i] = SkPixel32ToPixel16(src[i]);
- }
- break;
- default:
- unsigned scale = coverage + (coverage >> 7);
- for (int i = 0; i < count; ++i) {
- dst[i] = SkSrcOver32To16(SkAlphaMulQ(src[i], scale), dst[i]);
- }
- break;
- }
-}
-
-static void D16_S32A_srcover(uint16_t dst[], const SkPMColor src[], int count, uint8_t coverage) {
- SkASSERT(coverage == 0xFF);
- for (int i = 0; i < count; ++i) {
- dst[i] = SkSrcOver32To16(src[i], dst[i]);
- }
-}
-
-static void D16_S32A_srcover_coverage(uint16_t dst[], const SkPMColor src[], int count,
- uint8_t coverage) {
- switch (coverage) {
- case 0: break;
- case 0xFF:
- for (int i = 0; i < count; ++i) {
- dst[i] = SkSrcOver32To16(src[i], dst[i]);
- }
- break;
- default:
- unsigned scale = coverage + (coverage >> 7);
- for (int i = 0; i < count; ++i) {
- dst[i] = SkSrcOver32To16(SkAlphaMulQ(src[i], scale), dst[i]);
- }
- break;
- }
-}
-
-bool SkRGB565_Shader_Blitter::Supports(const SkPixmap& device, const SkPaint& paint) {
- if (device.colorType() != kRGB_565_SkColorType) {
- return false;
- }
- if (device.colorSpace()) {
- return false;
- }
- const auto bm = paint.asBlendMode();
- if (bm != SkBlendMode::kSrcOver && bm != SkBlendMode::kSrc) {
- return false;
- }
- if (paint.isDither()) {
- return false;
- }
- return true;
-}
-
-SkRGB565_Shader_Blitter::SkRGB565_Shader_Blitter(const SkPixmap& device,
- const SkPaint& paint, SkShaderBase::Context* shaderContext)
- : INHERITED(device, paint, shaderContext)
-{
- SkASSERT(shaderContext);
- SkASSERT(Supports(device, paint));
-
- fBuffer = (SkPMColor*)sk_malloc_throw(device.width() * (sizeof(SkPMColor)));
-
- bool isOpaque = SkToBool(shaderContext->getFlags() & SkShaderBase::kOpaqueAlpha_Flag);
-
- if (paint.asBlendMode() == SkBlendMode::kSrc || isOpaque) {
- fBlend = D16_S32X_src;
- fBlendCoverage = D16_S32X_src_coverage;
- } else { // srcover
- fBlend = isOpaque ? D16_S32X_src : D16_S32A_srcover;
- fBlendCoverage = isOpaque ? D16_S32X_src_coverage : D16_S32A_srcover_coverage;
- }
-}
-
-SkRGB565_Shader_Blitter::~SkRGB565_Shader_Blitter() {
- sk_free(fBuffer);
-}
-
-void SkRGB565_Shader_Blitter::blitH(int x, int y, int width) {
- SkASSERT(x >= 0 && y >= 0 && x + width <= fDevice.width());
-
- uint16_t* device = fDevice.writable_addr16(x, y);
-
- SkPMColor* span = fBuffer;
- fShaderContext->shadeSpan(x, y, span, width);
- fBlend(device, span, width, 0xFF);
-}
-
-void SkRGB565_Shader_Blitter::blitAntiH(int x, int y, const SkAlpha coverage[],
- const int16_t runs[]) {
- SkPMColor* span = fBuffer;
- uint16_t* device = fDevice.writable_addr16(x, y);
- auto* shaderContext = fShaderContext;
-
- for (;;) {
- int count = *runs;
- if (count <= 0) {
- break;
- }
- int aa = *coverage;
- if (aa) {
- shaderContext->shadeSpan(x, y, span, count);
- fBlendCoverage(device, span, count, aa);
- }
- device += count;
- runs += count;
- coverage += count;
- x += count;
- }
-}
diff --git a/src/core/SkCoreBlitters.h b/src/core/SkCoreBlitters.h
index 89c5dd9..75d3d27 100644
--- a/src/core/SkCoreBlitters.h
+++ b/src/core/SkCoreBlitters.h
@@ -145,27 +145,6 @@
///////////////////////////////////////////////////////////////////////////////////////////////////
-typedef void (*SkS32D16BlendProc)(uint16_t*, const SkPMColor*, int, uint8_t);
-
-class SkRGB565_Shader_Blitter : public SkShaderBlitter {
-public:
- SkRGB565_Shader_Blitter(const SkPixmap& device, const SkPaint&, SkShaderBase::Context*);
- ~SkRGB565_Shader_Blitter() override;
- void blitH(int x, int y, int width) override;
- void blitAntiH(int x, int y, const SkAlpha[], const int16_t[]) override;
-
- static bool Supports(const SkPixmap& device, const SkPaint&);
-
-private:
- SkPMColor* fBuffer;
- SkS32D16BlendProc fBlend;
- SkS32D16BlendProc fBlendCoverage;
-
- using INHERITED = SkShaderBlitter;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-
SkBlitter* SkCreateRasterPipelineBlitter(const SkPixmap&, const SkPaint&,
const SkMatrixProvider& matrixProvider, SkArenaAlloc*,
sk_sp<SkShader> clipShader, const SkSurfaceProps& props);