aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkShader.cpp
diff options
context:
space:
mode:
authorGravatar Mike Klein <mtklein@chromium.org>2017-05-23 15:06:17 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-05-24 15:26:15 +0000
commit3b840e930493d260bf4945af03920c01400ee6cc (patch)
tree05537618ad4b1263fec84d729bf0791e6ab6b88f /src/core/SkShader.cpp
parentbc146b1bd787274d93e98116ba6f2ad30824bd8e (diff)
add a bulk shader path through SkRasterPipelineBlitter
Change-Id: I76f1f0c29b3408bffb7732ee1afb8337c478605e Reviewed-on: https://skia-review.googlesource.com/17768 Commit-Queue: Mike Klein <mtklein@chromium.org> Reviewed-by: Florin Malita <fmalita@chromium.org> Reviewed-by: Herb Derby <herb@google.com>
Diffstat (limited to 'src/core/SkShader.cpp')
-rw-r--r--src/core/SkShader.cpp37
1 files changed, 1 insertions, 36 deletions
diff --git a/src/core/SkShader.cpp b/src/core/SkShader.cpp
index c8d5f08776..ff5b400a25 100644
--- a/src/core/SkShader.cpp
+++ b/src/core/SkShader.cpp
@@ -264,42 +264,7 @@ bool SkShader::appendStages(SkRasterPipeline* p,
const SkMatrix& ctm,
const SkPaint& paint,
const SkMatrix* localM) const {
- SkRasterPipeline_<256> subclass;
- if (this->onAppendStages(&subclass, dstCS, alloc, ctm, paint, localM)) {
- p->extend(subclass);
- return true;
- }
-
- // SkShader::Context::shadeSpan4f() handles the paint opacity internally,
- // but SkRasterPipelineBlitter applies it as a separate stage.
- // We skip the internal shadeSpan4f() step by forcing the paint opaque.
- SkTCopyOnFirstWrite<SkPaint> opaquePaint(paint);
- if (paint.getAlpha() != SK_AlphaOPAQUE) {
- opaquePaint.writable()->setAlpha(SK_AlphaOPAQUE);
- }
-
- ContextRec rec(*opaquePaint, ctm, localM, ContextRec::kPM4f_DstType, dstCS);
-
- struct CallbackCtx : SkJumper_CallbackCtx {
- sk_sp<SkShader> shader;
- Context* ctx;
- };
- auto cb = alloc->make<CallbackCtx>();
- cb->shader = dstCS ? SkColorSpaceXformer::Make(sk_ref_sp(dstCS))->apply(this)
- : sk_ref_sp(const_cast<SkShader*>(this));
- cb->ctx = cb->shader->makeContext(rec, alloc);
- cb->fn = [](SkJumper_CallbackCtx* self, int active_pixels) {
- auto c = (CallbackCtx*)self;
- int x = (int)c->rgba[0],
- y = (int)c->rgba[1];
- c->ctx->shadeSpan4f(x,y, (SkPM4f*)c->rgba, active_pixels);
- };
-
- if (cb->ctx) {
- p->append(SkRasterPipeline::callback, cb);
- return true;
- }
- return false;
+ return this->onAppendStages(p, dstCS, alloc, ctm, paint, localM);
}
bool SkShader::onAppendStages(SkRasterPipeline* p,