diff options
author | Mike Klein <mtklein@google.com> | 2017-12-18 23:16:35 +0000 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-12-18 23:16:46 +0000 |
commit | 245c4b21c1b95452b9ed406c43096157bd9e6402 (patch) | |
tree | b1e38311a08f7294f366fe3e89c4ba231f3be600 /src/shaders | |
parent | 8a64e52a98d178be13fd137b3b3a3c6aff457d85 (diff) |
Revert "attempt 2: add experimental bilerp_clamp_8888 stage"
This reverts commit 8a64e52a98d178be13fd137b3b3a3c6aff457d85.
Reason for revert:
Test-Android-Clang-NexusPlayer-CPU-Moorefield-x86-Release-All-Android
Test-Android-Clang-NexusPlayer-GPU-PowerVR-x86-Release-All-Android
Original change's description:
> attempt 2: add experimental bilerp_clamp_8888 stage
>
> It looks like we can specialize hot image shaders into their
> own single stages for a good speedup on both x86 and ARM.
>
> I've started here with bilerp_clamp_8888, and will
> follow up with bgra and 565, and lowp versions of those,
> and probably also the same for nearest neighbors.
>
> All pixels are identical in GMs.
>
> Change-Id: Ib5ed6e528efd9e3eed96ba67d02fbec2e8133a81
> Reviewed-on: https://skia-review.googlesource.com/86860
> Reviewed-by: Mike Klein <mtklein@chromium.org>
> Commit-Queue: Mike Klein <mtklein@chromium.org>
TBR=mtklein@chromium.org,liyuqian@google.com
Change-Id: I34409a7b4aee4fd54baee44f7fc53bd0982500fe
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://skia-review.googlesource.com/86601
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
Diffstat (limited to 'src/shaders')
-rw-r--r-- | src/shaders/SkImageShader.cpp | 49 |
1 files changed, 15 insertions, 34 deletions
diff --git a/src/shaders/SkImageShader.cpp b/src/shaders/SkImageShader.cpp index 75e86c4923..ef13498ece 100644 --- a/src/shaders/SkImageShader.cpp +++ b/src/shaders/SkImageShader.cpp @@ -313,7 +313,7 @@ bool SkImageShader::onAppendStages(const StageRec& rec) const { p->append_matrix(alloc, matrix); auto gather = alloc->make<SkJumper_GatherCtx>(); - gather->pixels = pm.addr(); + gather->pixels = pm.writable_addr(); // Don't worry, we won't write to it. gather->stride = pm.rowBytesAsPixels(); gather->width = pm.width(); gather->height = pm.height(); @@ -325,8 +325,6 @@ bool SkImageShader::onAppendStages(const StageRec& rec) const { limit_y->scale = pm.height(); limit_y->invScale = 1.0f / pm.height(); - bool is_srgb = rec.fDstCS && (!info.colorSpace() || info.gammaCloseToSRGB()); - auto append_tiling_and_gather = [&] { switch (fTileModeX) { case kClamp_TileMode: /* The gather_xxx stage will clamp for us. */ break; @@ -348,38 +346,11 @@ bool SkImageShader::onAppendStages(const StageRec& rec) const { case kRGBA_F16_SkColorType: p->append(SkRasterPipeline::gather_f16, gather); break; default: SkASSERT(false); } - if (is_srgb) { + if (rec.fDstCS && (!info.colorSpace() || info.gammaCloseToSRGB())) { p->append(SkRasterPipeline::from_srgb); } }; - auto append_misc = [&] { - if (info.colorType() == kAlpha_8_SkColorType) { - p->append(SkRasterPipeline::set_rgb, &misc->paint_color); - } - if (info.colorType() == kAlpha_8_SkColorType || - info.alphaType() == kUnpremul_SkAlphaType) { - p->append(SkRasterPipeline::premul); - } - if (quality > kLow_SkFilterQuality) { - // Bicubic filtering naturally produces out of range values on both sides. - p->append(SkRasterPipeline::clamp_0); - p->append(SkRasterPipeline::clamp_a); - } - append_gamut_transform(p, alloc, info.colorSpace(), rec.fDstCS, kPremul_SkAlphaType); - return true; - }; - - if (quality == kLow_SkFilterQuality && - info.colorType() == kRGBA_8888_SkColorType && - fTileModeX == SkShader::kClamp_TileMode && - fTileModeY == SkShader::kClamp_TileMode && - !is_srgb) { - - p->append(SkRasterPipeline::bilerp_clamp_8888, gather); - return append_misc(); - } - SkJumper_SamplerCtx* sampler = nullptr; if (quality != kNone_SkFilterQuality) { sampler = alloc->make<SkJumper_SamplerCtx>(); @@ -395,7 +366,6 @@ bool SkImageShader::onAppendStages(const StageRec& rec) const { if (quality == kNone_SkFilterQuality) { append_tiling_and_gather(); - } else if (quality == kLow_SkFilterQuality) { p->append(SkRasterPipeline::save_xy, sampler); @@ -405,7 +375,6 @@ bool SkImageShader::onAppendStages(const StageRec& rec) const { sample(SkRasterPipeline::bilinear_px, SkRasterPipeline::bilinear_py); p->append(SkRasterPipeline::move_dst_src); - } else { p->append(SkRasterPipeline::save_xy, sampler); @@ -432,5 +401,17 @@ bool SkImageShader::onAppendStages(const StageRec& rec) const { p->append(SkRasterPipeline::move_dst_src); } - return append_misc(); + if (info.colorType() == kAlpha_8_SkColorType) { + p->append(SkRasterPipeline::set_rgb, &misc->paint_color); + } + if (info.colorType() == kAlpha_8_SkColorType || info.alphaType() == kUnpremul_SkAlphaType) { + p->append(SkRasterPipeline::premul); + } + if (quality > kLow_SkFilterQuality) { + // Bicubic filtering naturally produces out of range values on both sides. + p->append(SkRasterPipeline::clamp_0); + p->append(SkRasterPipeline::clamp_a); + } + append_gamut_transform(p, alloc, info.colorSpace(), rec.fDstCS, kPremul_SkAlphaType); + return true; } |