aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Mike Reed <reed@google.com>2017-05-31 15:03:02 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-05-31 19:54:05 +0000
commit25f3805efa465bc3f804f192fe1ee64450f01d7c (patch)
treefd32acec7e98cc4793d7488bbb89f582b5770de6
parentd696df74d4b2d70fb7b9078c6092d5eb1858d03d (diff)
slant colorfilter away from filterSpan4f
rename to make it easy to delete any impl that also had onAppendStages... i.e. rename to make it clear that it is just an impl trick for rasterpipeline. Bug: skia: Change-Id: If3c3b2811eff12d399cdf7a77552c01e72c06996 Reviewed-on: https://skia-review.googlesource.com/18234 Reviewed-by: Mike Klein <mtklein@chromium.org> Commit-Queue: Mike Reed <reed@google.com>
-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