aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--include/core/SkColorFilter.h6
-rw-r--r--include/effects/SkLumaColorFilter.h1
-rw-r--r--src/core/SkColorFilter.cpp19
-rw-r--r--src/core/SkColorMatrixFilterRowMajor255.cpp18
-rw-r--r--src/core/SkColorMatrixFilterRowMajor255.h1
-rw-r--r--src/core/SkModeColorFilter.cpp25
-rw-r--r--src/core/SkModeColorFilter.h1
-rw-r--r--src/effects/SkColorMatrixFilter.cpp3
-rw-r--r--src/effects/SkHighContrastFilter.cpp7
-rw-r--r--src/effects/SkLumaColorFilter.cpp19
-rw-r--r--src/effects/SkOverdrawColorFilter.cpp2
-rw-r--r--src/effects/SkOverdrawColorFilter.h3
-rw-r--r--src/effects/SkTableColorFilter.cpp36
-rw-r--r--src/shaders/SkColorFilterShader.cpp8
-rw-r--r--src/utils/SkShadowUtils.cpp8
-rw-r--r--tools/sk_tool_utils.cpp3
16 files changed, 22 insertions, 138 deletions
diff --git a/include/core/SkColorFilter.h b/include/core/SkColorFilter.h
index 2e3662701d..1c320ba30f 100644
--- a/include/core/SkColorFilter.h
+++ b/include/core/SkColorFilter.h
@@ -72,8 +72,6 @@ public:
*/
virtual void filterSpan(const SkPMColor src[], int count, SkPMColor result[]) const = 0;
- virtual void filterSpan4f(const SkPM4f src[], int count, SkPM4f result[]) const = 0;
-
void appendStages(SkRasterPipeline*, SkColorSpace*, SkArenaAlloc*, bool shaderIsOpaque) const;
enum Flags {
@@ -189,6 +187,10 @@ private:
bool shaderIsOpaque) const;
+ virtual void onFilterStage(const SkPM4f[], int, SkPM4f[]) const {
+ SkASSERT(false);
+ }
+
friend class SkColorSpaceXformer;
friend class SkComposeColorFilter;
diff --git a/include/effects/SkLumaColorFilter.h b/include/effects/SkLumaColorFilter.h
index 94bf51da2d..af9dff12aa 100644
--- a/include/effects/SkLumaColorFilter.h
+++ b/include/effects/SkLumaColorFilter.h
@@ -29,7 +29,6 @@ public:
static sk_sp<SkColorFilter> Make();
void filterSpan(const SkPMColor src[], int count, SkPMColor[]) const override;
- void filterSpan4f(const SkPM4f src[], int count, SkPM4f result[]) const override;
#if SK_SUPPORT_GPU
sk_sp<GrFragmentProcessor> asFragmentProcessor(GrContext*, SkColorSpace*) const override;
diff --git a/src/core/SkColorFilter.cpp b/src/core/SkColorFilter.cpp
index a1b4043f49..9304c7c803 100644
--- a/src/core/SkColorFilter.cpp
+++ b/src/core/SkColorFilter.cpp
@@ -61,7 +61,7 @@ void SkColorFilter::onAppendStages(SkRasterPipeline* p,
ctx->fn = [](SkJumper_CallbackCtx* arg, int active_pixels) {
auto ctx = (Ctx*)arg;
auto buf = (SkPM4f*)ctx->rgba;
- ctx->cf->filterSpan4f(buf, active_pixels, buf);
+ ctx->cf->onFilterStage(buf, active_pixels, buf);
};
p->append(SkRasterPipeline::callback, ctx);
}
@@ -72,9 +72,19 @@ SkColor SkColorFilter::filterColor(SkColor c) const {
return SkUnPreMultiply::PMColorToColor(dst);
}
+#include "SkRasterPipeline.h"
SkColor4f SkColorFilter::filterColor4f(const SkColor4f& c) const {
SkPM4f dst, src = c.premul();
- this->filterSpan4f(&src, 1, &dst);
+
+ SkSTArenaAlloc<128> alloc;
+ SkRasterPipeline pipeline(&alloc);
+
+ pipeline.append(SkRasterPipeline::constant_color, &src);
+ this->onAppendStages(&pipeline, nullptr, &alloc, c.fA == 1);
+ SkPM4f* dstPtr = &dst;
+ pipeline.append(SkRasterPipeline::store_f32, &dstPtr);
+ pipeline.run(0,1);
+
return dst.unpremul();
}
@@ -102,11 +112,6 @@ public:
fOuter->filterSpan(result, count, result);
}
- void filterSpan4f(const SkPM4f shader[], int count, SkPM4f result[]) const override {
- fInner->filterSpan4f(shader, count, result);
- fOuter->filterSpan4f(result, count, result);
- }
-
#ifndef SK_IGNORE_TO_STRING
void toString(SkString* str) const override {
SkString outerS, innerS;
diff --git a/src/core/SkColorMatrixFilterRowMajor255.cpp b/src/core/SkColorMatrixFilterRowMajor255.cpp
index bd88c927d1..aa11746d0a 100644
--- a/src/core/SkColorMatrixFilterRowMajor255.cpp
+++ b/src/core/SkColorMatrixFilterRowMajor255.cpp
@@ -137,24 +137,6 @@ void SkColorMatrixFilterRowMajor255::filterSpan(const SkPMColor src[], int count
filter_span<SkPMColorAdaptor>(fTranspose, src, count, dst);
}
-struct SkPM4fAdaptor {
- enum {
- R = SkPM4f::R,
- G = SkPM4f::G,
- B = SkPM4f::B,
- A = SkPM4f::A,
- };
- static SkPM4f From4f(const Sk4f& c4) {
- return SkPM4f::From4f(c4);
- }
- static Sk4f To4f(const SkPM4f& c) {
- return c.to4f();
- }
-};
-void SkColorMatrixFilterRowMajor255::filterSpan4f(const SkPM4f src[], int count, SkPM4f dst[]) const {
- filter_span<SkPM4fAdaptor>(fTranspose, src, count, dst);
-}
-
///////////////////////////////////////////////////////////////////////////////
void SkColorMatrixFilterRowMajor255::flatten(SkWriteBuffer& buffer) const {
diff --git a/src/core/SkColorMatrixFilterRowMajor255.h b/src/core/SkColorMatrixFilterRowMajor255.h
index 57201f041c..43e18510f8 100644
--- a/src/core/SkColorMatrixFilterRowMajor255.h
+++ b/src/core/SkColorMatrixFilterRowMajor255.h
@@ -19,7 +19,6 @@ public:
static sk_sp<SkColorFilter> MakeSingleChannelOutput(const SkScalar row[5]);
void filterSpan(const SkPMColor src[], int count, SkPMColor[]) const override;
- void filterSpan4f(const SkPM4f src[], int count, SkPM4f[]) const override;
uint32_t getFlags() const override;
bool asColorMatrix(SkScalar matrix[20]) const override;
sk_sp<SkColorFilter> makeComposed(sk_sp<SkColorFilter>) const override;
diff --git a/src/core/SkModeColorFilter.cpp b/src/core/SkModeColorFilter.cpp
index 3efcc81ec7..f30b6a527d 100644
--- a/src/core/SkModeColorFilter.cpp
+++ b/src/core/SkModeColorFilter.cpp
@@ -64,14 +64,6 @@ void SkModeColorFilter::filterSpan(const SkPMColor shader[], int count, SkPMColo
}
}
-void SkModeColorFilter::filterSpan4f(const SkPM4f shader[], int count, SkPM4f result[]) const {
- SkXfermodeProc4f proc = SkXfermode::GetProc4f(fMode);
- auto pm4f = fPMColor4f;
- for (int i = 0; i < count; i++) {
- result[i] = proc(pm4f, shader[i]);
- }
-}
-
void SkModeColorFilter::flatten(SkWriteBuffer& buffer) const {
buffer.writeColor(fColor);
buffer.writeUInt((int)fMode);
@@ -167,21 +159,6 @@ private:
typedef SkModeColorFilter INHERITED;
};
-class Modulate_SkModeColorFilter final : public SkModeColorFilter {
-public:
- Modulate_SkModeColorFilter(SkColor color) : INHERITED(color, SkBlendMode::kModulate) { }
-
- void filterSpan4f(const SkPM4f shader[], int count, SkPM4f result[]) const override {
- auto pm4f = fPMColor4f.to4f();
- for (int i = 0; i < count; i++) {
- (pm4f * shader[i].to4f()).store(result[i].fVec);
- }
- }
-
-private:
- typedef SkModeColorFilter INHERITED;
-};
-
///////////////////////////////////////////////////////////////////////////////
sk_sp<SkColorFilter> SkColorFilter::MakeModeFilter(SkColor color, SkBlendMode mode) {
@@ -222,8 +199,6 @@ sk_sp<SkColorFilter> SkColorFilter::MakeModeFilter(SkColor color, SkBlendMode mo
return sk_make_sp<Src_SkModeColorFilter>(color);
case SkBlendMode::kSrcOver:
return sk_make_sp<SrcOver_SkModeColorFilter>(color);
- case SkBlendMode::kModulate:
- return sk_make_sp<Modulate_SkModeColorFilter>(color);
default:
return SkModeColorFilter::Make(color, mode);
}
diff --git a/src/core/SkModeColorFilter.h b/src/core/SkModeColorFilter.h
index e3408d8bf5..66dda38653 100644
--- a/src/core/SkModeColorFilter.h
+++ b/src/core/SkModeColorFilter.h
@@ -24,7 +24,6 @@ public:
bool asColorMode(SkColor*, SkBlendMode*) const override;
uint32_t getFlags() const override;
void filterSpan(const SkPMColor shader[], int count, SkPMColor result[]) const override;
- void filterSpan4f(const SkPM4f shader[], int count, SkPM4f result[]) const override;
#ifndef SK_IGNORE_TO_STRING
void toString(SkString* str) const override;
diff --git a/src/effects/SkColorMatrixFilter.cpp b/src/effects/SkColorMatrixFilter.cpp
index 6326590721..12cfbb36b9 100644
--- a/src/effects/SkColorMatrixFilter.cpp
+++ b/src/effects/SkColorMatrixFilter.cpp
@@ -47,9 +47,6 @@ public:
void filterSpan(const SkPMColor src[], int count, SkPMColor dst[]) const override {
fMatrixFilter->filterSpan(src, count, dst);
}
- void filterSpan4f(const SkPM4f src[], int count, SkPM4f dst[]) const override {
- fMatrixFilter->filterSpan4f(src, count, dst);
- }
uint32_t getFlags() const override {
return fMatrixFilter->getFlags();
}
diff --git a/src/effects/SkHighContrastFilter.cpp b/src/effects/SkHighContrastFilter.cpp
index b8efabf98a..c6f132842e 100644
--- a/src/effects/SkHighContrastFilter.cpp
+++ b/src/effects/SkHighContrastFilter.cpp
@@ -144,7 +144,6 @@ public:
#endif
void filterSpan(const SkPMColor src[], int count, SkPMColor dst[]) const override;
- void filterSpan4f(const SkPM4f src[], int count, SkPM4f result[]) const override;
void onAppendStages(SkRasterPipeline* p,
SkColorSpace* dst,
SkArenaAlloc* scratch,
@@ -179,12 +178,6 @@ void SkHighContrast_Filter::filterSpan(const SkPMColor src[], int count, SkPMCol
}
}
-void SkHighContrast_Filter::filterSpan4f(const SkPM4f src[], int count, SkPM4f dst[]) const {
- for (int i = 0; i < count; ++i) {
- dst[i] = ApplyHighContrastFilter(fConfig, dst[i].unpremul()).premul();
- }
-}
-
void SkHighContrast_Filter::onAppendStages(SkRasterPipeline* p,
SkColorSpace* dstCS,
SkArenaAlloc* alloc,
diff --git a/src/effects/SkLumaColorFilter.cpp b/src/effects/SkLumaColorFilter.cpp
index f0e58c06f8..efe44a4258 100644
--- a/src/effects/SkLumaColorFilter.cpp
+++ b/src/effects/SkLumaColorFilter.cpp
@@ -36,25 +36,6 @@ void SkLumaColorFilter::filterSpan(const SkPMColor src[], int count, SkPMColor d
}
}
-void SkLumaColorFilter::filterSpan4f(const SkPM4f src[], int count, SkPM4f dst[]) const {
- for (int i = 0; i < count; ++i) {
- /*
- * While LuminanceToAlpha is defined to operate on un-premultiplied
- * inputs, due to the final alpha scaling it can be computed based on
- * premultipled components:
- *
- * LumA = (k1 * r / a + k2 * g / a + k3 * b / a) * a
- * LumA = (k1 * r + k2 * g + k3 * b)
- */
- dst[i].fVec[SkPM4f::R] = 0;
- dst[i].fVec[SkPM4f::G] = 0;
- dst[i].fVec[SkPM4f::B] = 0;
- dst[i].fVec[SkPM4f::A] = src[i].r() * SK_LUM_COEFF_R +
- src[i].g() * SK_LUM_COEFF_G +
- src[i].b() * SK_LUM_COEFF_B;
- }
-}
-
void SkLumaColorFilter::onAppendStages(SkRasterPipeline* p,
SkColorSpace* dst,
SkArenaAlloc* scratch,
diff --git a/src/effects/SkOverdrawColorFilter.cpp b/src/effects/SkOverdrawColorFilter.cpp
index 73aaafa2ac..bbeb028144 100644
--- a/src/effects/SkOverdrawColorFilter.cpp
+++ b/src/effects/SkOverdrawColorFilter.cpp
@@ -20,7 +20,7 @@ void SkOverdrawColorFilter::filterSpan(const SkPMColor src[], int count, SkPMCol
}
}
-void SkOverdrawColorFilter::filterSpan4f(const SkPM4f src[], int count, SkPM4f dst[]) const {
+void SkOverdrawColorFilter::onFilterStage(const SkPM4f src[], int count, SkPM4f dst[]) const {
for (int i = 0; i < count; ++i) {
uint8_t alpha = (int)(src[i].a() * 255);
if (alpha >= kNumColors) {
diff --git a/src/effects/SkOverdrawColorFilter.h b/src/effects/SkOverdrawColorFilter.h
index fd56372dc4..09c5173bf6 100644
--- a/src/effects/SkOverdrawColorFilter.h
+++ b/src/effects/SkOverdrawColorFilter.h
@@ -32,7 +32,6 @@ public:
#endif
void filterSpan(const SkPMColor src[], int count, SkPMColor dst[]) const override;
- void filterSpan4f(const SkPM4f src[], int count, SkPM4f result[]) const override;
void toString(SkString* str) const override;
static sk_sp<SkFlattenable> CreateProc(SkReadBuffer& buffer);
@@ -47,6 +46,8 @@ private:
memcpy(fColors, colors, kNumColors * sizeof(SkPMColor));
}
+ void onFilterStage(const SkPM4f src[], int count, SkPM4f result[]) const override;
+
SkPMColor fColors[kNumColors];
typedef SkColorFilter INHERITED;
diff --git a/src/effects/SkTableColorFilter.cpp b/src/effects/SkTableColorFilter.cpp
index b5156ae5bf..93d784fe60 100644
--- a/src/effects/SkTableColorFilter.cpp
+++ b/src/effects/SkTableColorFilter.cpp
@@ -90,7 +90,6 @@ public:
#endif
void filterSpan(const SkPMColor src[], int count, SkPMColor dst[]) const override;
- void filterSpan4f(const SkPM4f src[], int count, SkPM4f result[]) const override;
SK_TO_STRING_OVERRIDE()
@@ -185,41 +184,6 @@ void SkTable_ColorFilter::filterSpan(const SkPMColor src[], int count, SkPMColor
}
}
-void SkTable_ColorFilter::filterSpan4f(const SkPM4f src[], int count, SkPM4f dst[]) const {
- const uint8_t* table = fStorage;
- const uint8_t* tableA = gIdentityTable;
- const uint8_t* tableR = gIdentityTable;
- const uint8_t* tableG = gIdentityTable;
- const uint8_t* tableB = gIdentityTable;
- if (fFlags & kA_Flag) {
- tableA = table; table += 256;
- }
- if (fFlags & kR_Flag) {
- tableR = table; table += 256;
- }
- if (fFlags & kG_Flag) {
- tableG = table; table += 256;
- }
- if (fFlags & kB_Flag) {
- tableB = table;
- }
-
- const float oneOver255 = 1.0f / 255;
- for (int i = 0; i < count; ++i) {
- SkColor4f c = src[i].unpremul();
- int r = (int)(c.fR * 255.999) & 0xFF;
- int g = (int)(c.fG * 255.999) & 0xFF;
- int b = (int)(c.fB * 255.999) & 0xFF;
- int a = (int)(c.fA * 255.999) & 0xFF;
-
- SkColor4f d {
- tableR[r] * oneOver255, tableG[g] * oneOver255,
- tableB[b] * oneOver255, tableA[a] * oneOver255,
- };
- dst[i] = d.premul();
- }
-}
-
#ifndef SK_IGNORE_TO_STRING
void SkTable_ColorFilter::toString(SkString* str) const {
const uint8_t* table = fStorage;
diff --git a/src/shaders/SkColorFilterShader.cpp b/src/shaders/SkColorFilterShader.cpp
index 9803d6ca7b..94cc99e9df 100644
--- a/src/shaders/SkColorFilterShader.cpp
+++ b/src/shaders/SkColorFilterShader.cpp
@@ -94,11 +94,9 @@ void SkColorFilterShader::FilterShaderContext::shadeSpan(int x, int y, SkPMColor
}
void SkColorFilterShader::FilterShaderContext::shadeSpan4f(int x, int y, SkPM4f result[],
- int count) {
- const SkColorFilterShader& filterShader = static_cast<const SkColorFilterShader&>(fShader);
-
- fShaderContext->shadeSpan4f(x, y, result, count);
- filterShader.fFilter->filterSpan4f(result, count, result);
+ int count) {
+ // Should never get here, as shadeSpan4f should only be called if stages fails
+ SkASSERT(false);
}
#if SK_SUPPORT_GPU
diff --git a/src/utils/SkShadowUtils.cpp b/src/utils/SkShadowUtils.cpp
index 9079d57443..4b5ed5f168 100644
--- a/src/utils/SkShadowUtils.cpp
+++ b/src/utils/SkShadowUtils.cpp
@@ -38,7 +38,6 @@ public:
}
void filterSpan(const SkPMColor src[], int count, SkPMColor dst[]) const override;
- void filterSpan4f(const SkPM4f src[], int count, SkPM4f result[]) const override;
#if SK_SUPPORT_GPU
sk_sp<GrFragmentProcessor> asFragmentProcessor(GrContext*, SkColorSpace*) const override;
@@ -128,13 +127,6 @@ void SkGaussianColorFilter::filterSpan(const SkPMColor src[], int count, SkPMCol
}
}
-void SkGaussianColorFilter::filterSpan4f(const SkPM4f src[], int count, SkPM4f dst[]) const {
- for (int i = 0; i < count; ++i) {
- float v = eval_gaussian(src[i].a());
- dst[i] = SkPM4f::FromPremulRGBA(v, v, v, v);
- }
-}
-
sk_sp<SkFlattenable> SkGaussianColorFilter::CreateProc(SkReadBuffer&) {
return Make();
}
diff --git a/tools/sk_tool_utils.cpp b/tools/sk_tool_utils.cpp
index 4b57a2cead..95f4cb1a6e 100644
--- a/tools/sk_tool_utils.cpp
+++ b/tools/sk_tool_utils.cpp
@@ -40,9 +40,6 @@ public:
void filterSpan(const SkPMColor src[], int count, SkPMColor dst[]) const override {
SK_ABORT("SkSRGBColorFilter is only implemented for GPU");
}
- void filterSpan4f(const SkPM4f src[], int count, SkPM4f dst[]) const override {
- SK_ABORT("SkSRGBColorFilter is only implemented for GPU");
- }
Factory getFactory() const override { return nullptr; }
#ifndef SK_IGNORE_TO_STRING