diff options
author | Mike Klein <mtklein@chromium.org> | 2017-07-25 12:02:13 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-07-25 17:42:58 +0000 |
commit | 159db0a6a1001b220b42fcae46ed324e0986b14a (patch) | |
tree | 6888754e4fff820b4b054552e40de3db01e60c2d /src/core/SkRasterPipeline.cpp | |
parent | 066f020bb6cb9dbb12b977fcddd93982201777fe (diff) |
rough clamped tracking in SkRasterPipeline
This should make srgb_color_filter draw correctly in software.
Previously the Rec2020 block would overflow.
Change-Id: Ied4516728039e54214886d55bba92662beee9a26
Reviewed-on: https://skia-review.googlesource.com/26562
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
Diffstat (limited to 'src/core/SkRasterPipeline.cpp')
-rw-r--r-- | src/core/SkRasterPipeline.cpp | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/core/SkRasterPipeline.cpp b/src/core/SkRasterPipeline.cpp index a7b25d7ef9..5484c9f94c 100644 --- a/src/core/SkRasterPipeline.cpp +++ b/src/core/SkRasterPipeline.cpp @@ -15,6 +15,7 @@ void SkRasterPipeline::reset() { fStages = nullptr; fNumStages = 0; fSlotsNeeded = 1; // We always need one extra slot for just_return(). + fClamped = true; } void SkRasterPipeline::append(StockStage stage, void* ctx) { @@ -46,6 +47,7 @@ void SkRasterPipeline::extend(const SkRasterPipeline& src) { fStages = &stages[src.fNumStages - 1]; fNumStages += src.fNumStages; fSlotsNeeded += src.fSlotsNeeded - 1; // Don't double count just_returns(). + fClamped = fClamped && src.fClamped; } void SkRasterPipeline::dump() const { @@ -162,3 +164,12 @@ void SkRasterPipeline::append_matrix(SkArenaAlloc* alloc, const SkMatrix& matrix } } } + +void SkRasterPipeline::clamp_if_unclamped(SkAlphaType alphaType) { + if (!fClamped) { + this->append(SkRasterPipeline::clamp_0); + this->append(alphaType == kPremul_SkAlphaType ? SkRasterPipeline::clamp_a + : SkRasterPipeline::clamp_1); + fClamped = true; + } +} |