From a4e4b798a5d46a5acbcb44ef094f626b64d39467 Mon Sep 17 00:00:00 2001 From: herb Date: Sat, 4 Jun 2016 13:27:10 -0700 Subject: Add the ability to handle premul and swizzle src bitmap data. BUG=skia:5378 GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2030953002 Review-Url: https://codereview.chromium.org/2030953002 --- src/core/SkBitmapProcShader.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/core/SkBitmapProcShader.cpp b/src/core/SkBitmapProcShader.cpp index a372b51990..f88729e305 100644 --- a/src/core/SkBitmapProcShader.cpp +++ b/src/core/SkBitmapProcShader.cpp @@ -205,7 +205,10 @@ private: static bool choose_linear_pipeline(const SkShader::ContextRec& rec, const SkImageInfo& srcInfo) { // If we get here, we can reasonably use either context, respect the caller's preference // - return SkShader::ContextRec::kPM4f_DstType == rec.fPreferredDstType; + bool needsPremul = srcInfo.alphaType() == kUnpremul_SkAlphaType; + bool needsSwizzle = srcInfo.bytesPerPixel() == 4 && srcInfo.colorType() != kN32_SkColorType; + return SkShader::ContextRec::kPM4f_DstType == rec.fPreferredDstType + || needsPremul || needsSwizzle; } size_t SkBitmapProcShader::ContextSize(const ContextRec& rec, const SkImageInfo& srcInfo) { -- cgit v1.2.3