aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkRasterPipeline.cpp
diff options
context:
space:
mode:
authorGravatar Mike Klein <mtklein@chromium.org>2017-07-25 12:02:13 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-07-25 17:42:58 +0000
commit159db0a6a1001b220b42fcae46ed324e0986b14a (patch)
tree6888754e4fff820b4b054552e40de3db01e60c2d /src/core/SkRasterPipeline.cpp
parent066f020bb6cb9dbb12b977fcddd93982201777fe (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.cpp11
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;
+ }
+}