Revert "inline common modecolorfilters"

This reverts commit c8b6828d4f.

Reason for revert: looks like this messed up colorcomposefilter_wacky and colorcomposefilter_alpha.  I suspect we're missing a swap_rb or two.

Original change's description:
> inline common modecolorfilters
> 
> *seems* like we won't trigger layout tests, since chrome only uses Src, SrcIn and Modulate.
> Bug: skia:
> Change-Id: Ieae7e85bd3f2d23278b0405c2a5d64dbad1e0739
> Reviewed-on: https://skia-review.googlesource.com/19551
> Reviewed-by: Mike Klein <mtklein@chromium.org>
> Commit-Queue: Mike Klein <mtklein@chromium.org>

TBR=mtklein@chromium.org,mtklein@google.com,reed@google.com
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: skia:

Change-Id: I7fc28e0f1e65c69be328ade32fbef078dbe99402
Reviewed-on: https://skia-review.googlesource.com/19555
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
This commit is contained in:
Mike Klein 2017-06-13 00:41:52 +00:00 committed by Skia Commit-Bot
parent c8b6828d4f
commit 4049dffaa8

View File

@ -63,35 +63,11 @@ uint32_t SkModeColorFilter::getFlags() const {
}
void SkModeColorFilter::filterSpan(const SkPMColor shader[], int count, SkPMColor result[]) const {
SkPMColor color = fPMColor;
SkPMColor color = fPMColor;
SkXfermodeProc proc = SkXfermode::GetProc(fMode);
switch (fMode) {
case SkBlendMode::kSrc:
sk_memset32(result, color, count);
break;
case SkBlendMode::kSrcIn:
for (int i = 0; i < count; ++i) {
result[i] = SkAlphaMulQ(color, SkAlpha255To256(SkGetPackedA32(shader[i])));
}
break;
case SkBlendMode::kModulate:
for (int i = 0; i < count; ++i) {
int a = SkMulDiv255Round(SkGetPackedA32(color), SkGetPackedA32(shader[i]));
int r = SkMulDiv255Round(SkGetPackedR32(color), SkGetPackedR32(shader[i]));
int g = SkMulDiv255Round(SkGetPackedG32(color), SkGetPackedG32(shader[i]));
int b = SkMulDiv255Round(SkGetPackedB32(color), SkGetPackedB32(shader[i]));
result[i] = SkPackARGB32(a, r, g, b);
}
break;
default: {
SkSTArenaAlloc<256> alloc;
SkRasterPipeline p(&alloc);
p.append(SkRasterPipeline::load_8888, &shader);
this->appendStages(&p, nullptr, &alloc, false);
p.append(SkRasterPipeline::store_8888, &result);
p.run(0, 0, count);
} break;
for (int i = 0; i < count; i++) {
result[i] = proc(color, shader[i]);
}
}
@ -156,6 +132,32 @@ sk_sp<GrFragmentProcessor> SkModeColorFilter::asFragmentProcessor(
///////////////////////////////////////////////////////////////////////////////
class Src_SkModeColorFilter final : public SkModeColorFilter {
public:
Src_SkModeColorFilter(SkColor color) : INHERITED(color, SkBlendMode::kSrc) {}
void filterSpan(const SkPMColor shader[], int count, SkPMColor result[]) const override {
sk_memset32(result, this->getPMColor(), count);
}
private:
typedef SkModeColorFilter INHERITED;
};
class SrcOver_SkModeColorFilter final : public SkModeColorFilter {
public:
SrcOver_SkModeColorFilter(SkColor color) : INHERITED(color, SkBlendMode::kSrcOver) { }
void filterSpan(const SkPMColor shader[], int count, SkPMColor result[]) const override {
SkBlitRow::Color32(result, shader, count, this->getPMColor());
}
private:
typedef SkModeColorFilter INHERITED;
};
///////////////////////////////////////////////////////////////////////////////
sk_sp<SkColorFilter> SkColorFilter::MakeModeFilter(SkColor color, SkBlendMode mode) {
if (!SkIsValidMode(mode)) {
return nullptr;
@ -189,5 +191,12 @@ sk_sp<SkColorFilter> SkColorFilter::MakeModeFilter(SkColor color, SkBlendMode mo
return nullptr;
}
return SkModeColorFilter::Make(color, mode);
switch (mode) {
case SkBlendMode::kSrc:
return sk_make_sp<Src_SkModeColorFilter>(color);
case SkBlendMode::kSrcOver:
return sk_make_sp<SrcOver_SkModeColorFilter>(color);
default:
return SkModeColorFilter::Make(color, mode);
}
}