aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/core/SkColorSpaceXformSteps.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/core/SkColorSpaceXformSteps.cpp b/src/core/SkColorSpaceXformSteps.cpp
index d2f3881a1d..77a9c6b05d 100644
--- a/src/core/SkColorSpaceXformSteps.cpp
+++ b/src/core/SkColorSpaceXformSteps.cpp
@@ -107,6 +107,13 @@ void SkColorSpaceXformSteps::apply(SkRasterPipeline* p) const {
if (flags.linearize) {
if (srcTF_is_sRGB) {
p->append(SkRasterPipeline::from_srgb);
+ } else if (srcTF.fA == 1 &&
+ srcTF.fB == 0 &&
+ srcTF.fC == 0 &&
+ srcTF.fD == 0 &&
+ srcTF.fE == 0 &&
+ srcTF.fF == 0) {
+ p->append(SkRasterPipeline::gamma, &srcTF.fG);
} else {
p->append(SkRasterPipeline::parametric_r, &srcTF);
p->append(SkRasterPipeline::parametric_g, &srcTF);
@@ -119,6 +126,13 @@ void SkColorSpaceXformSteps::apply(SkRasterPipeline* p) const {
if (flags.encode) {
if (dstTF_is_sRGB) {
p->append(SkRasterPipeline::to_srgb);
+ } else if (dstTFInv.fA == 1 &&
+ dstTFInv.fB == 0 &&
+ dstTFInv.fC == 0 &&
+ dstTFInv.fD == 0 &&
+ dstTFInv.fE == 0 &&
+ dstTFInv.fF == 0) {
+ p->append(SkRasterPipeline::gamma, &dstTFInv.fG);
} else {
p->append(SkRasterPipeline::parametric_r, &dstTFInv);
p->append(SkRasterPipeline::parametric_g, &dstTFInv);