aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/shaders/SkImageShader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/shaders/SkImageShader.cpp')
-rw-r--r--src/shaders/SkImageShader.cpp16
1 files changed, 11 insertions, 5 deletions
diff --git a/src/shaders/SkImageShader.cpp b/src/shaders/SkImageShader.cpp
index 1838e9e498..8ef647f5c9 100644
--- a/src/shaders/SkImageShader.cpp
+++ b/src/shaders/SkImageShader.cpp
@@ -416,13 +416,19 @@ bool SkImageShader::onAppendStages(const StageRec& rec) const {
return true;
};
- if (quality == kLow_SkFilterQuality &&
- info.colorType() == kRGBA_8888_SkColorType &&
- fTileModeX == SkShader::kClamp_TileMode &&
- fTileModeY == SkShader::kClamp_TileMode &&
- !is_srgb) {
+ // We've got a fast path for 8888 bilinear clamp/clamp non-color-managed sampling.
+ auto ct = info.colorType();
+ if (true
+ && (ct == kRGBA_8888_SkColorType || ct == kBGRA_8888_SkColorType)
+ && quality == kLow_SkFilterQuality
+ && fTileModeX == SkShader::kClamp_TileMode
+ && fTileModeY == SkShader::kClamp_TileMode
+ && !is_srgb) {
p->append(SkRasterPipeline::bilerp_clamp_8888, gather);
+ if (ct == kBGRA_8888_SkColorType) {
+ p->append(SkRasterPipeline::swap_rb);
+ }
return append_misc();
}