diff options
Diffstat (limited to 'src/shaders')
-rw-r--r-- | src/shaders/SkImageShader.cpp | 16 |
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(); } |