diff options
author | Mike Klein <mtklein@chromium.org> | 2018-05-24 15:36:09 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-05-24 20:31:08 +0000 |
commit | 77418559ca0921a944007d084852408ee76273e5 (patch) | |
tree | e4a3f514209412786f7b70e12e7dfa904d82c361 /src/core/SkColorSpaceXformSteps.cpp | |
parent | a06f215a7ddab3ce002a69d5b3187e628077c200 (diff) |
skip transfer functions when not needed
Change-Id: I72e1084e6a14b3c1fa3f0a5c2100f13c6bcb24c7
Reviewed-on: https://skia-review.googlesource.com/130062
Commit-Queue: Mike Klein <mtklein@chromium.org>
Auto-Submit: Mike Klein <mtklein@chromium.org>
Reviewed-by: Brian Osman <brianosman@google.com>
Diffstat (limited to 'src/core/SkColorSpaceXformSteps.cpp')
-rw-r--r-- | src/core/SkColorSpaceXformSteps.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/core/SkColorSpaceXformSteps.cpp b/src/core/SkColorSpaceXformSteps.cpp index c05bf6304e..08a59fc672 100644 --- a/src/core/SkColorSpaceXformSteps.cpp +++ b/src/core/SkColorSpaceXformSteps.cpp @@ -83,4 +83,23 @@ SkColorSpaceXformSteps::SkColorSpaceXformSteps(SkColorSpace* src, SkAlphaType sr // Step II) if dst has linear blending, encode back using dst transfer function before storing this->late_encode = !dstNL; + + // Fill out all the transfer functions we'll use: + SkColorSpaceTransferFn srcTF, dstTF; + SkAssertResult(src->isNumericalTransferFn(&srcTF)); + SkAssertResult(dst->isNumericalTransferFn(&dstTF)); + this->srcTFInv = srcTF.invert(); + this->dstTF = dstTF; + this->dstTFInv = dstTF.invert(); + + // If we linearize then immediately reencode with the same transfer function, skip both. + if ( this->linearize_src && + !this->late_unpremul && + !this->gamut_transform && + this->early_encode && + 0 == memcmp(&srcTF, &dstTF, sizeof(SkColorSpaceTransferFn))) + { + this->linearize_src = false; + this->early_encode = false; + } } |