aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/shaders
diff options
context:
space:
mode:
authorGravatar Mike Klein <mtklein@google.com>2017-12-18 23:16:35 +0000
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-12-18 23:16:46 +0000
commit245c4b21c1b95452b9ed406c43096157bd9e6402 (patch)
treeb1e38311a08f7294f366fe3e89c4ba231f3be600 /src/shaders
parent8a64e52a98d178be13fd137b3b3a3c6aff457d85 (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.cpp49
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;
}