diff options
author | Matt Sarett <msarett@google.com> | 2017-01-09 09:14:28 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-01-09 14:48:33 +0000 |
commit | e980155dd5d0cb6a10c9823c351763d50993a08d (patch) | |
tree | 0e74ae250ab2013797b99444725a8485b959925c /src/core/SkColorSpaceXform.cpp | |
parent | 9a34b8c77978b946eba961a21a091e65d6820589 (diff) |
Fix SkColorSpaceXform F16 behavior
After changing the matrix representation, we are no longer guaranteed
that the "a" in "rgba" is zeroed in store_f16_1() opaque.
This fixed Gold:
26a0543579cf7473de2099ce0d056ac8aba83811&head=true&include=false&limit=50&neg=false&pos=false&query=source_type%3DcolorImage&unt=true">https://gold.skia.org/search?blame=26a0543579cf7473de2099ce0d056ac8aba83811&head=true&include=false&limit=50&neg=false&pos=false&query=source_type%3DcolorImage&unt=true
Also tacked on an optimization. No need to load alpha when the image
is opaque.
BUG=skia:
Change-Id: I28d80c486b6644eee4a38a7a70f94eb51474e4b0
Reviewed-on: https://skia-review.googlesource.com/6738
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Matt Sarett <msarett@google.com>
Diffstat (limited to 'src/core/SkColorSpaceXform.cpp')
-rw-r--r-- | src/core/SkColorSpaceXform.cpp | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/src/core/SkColorSpaceXform.cpp b/src/core/SkColorSpaceXform.cpp index d394d3b980..b73a3cf198 100644 --- a/src/core/SkColorSpaceXform.cpp +++ b/src/core/SkColorSpaceXform.cpp @@ -773,6 +773,7 @@ static AI void store_f16_1_opaque(void* dst, const uint32_t* src, const uint8_t* const[3]) { uint64_t tmp; SkFloatToHalf_finite_ftz(rgba).store(&tmp); + tmp &= 0x0000FFFFFFFFFFFF; tmp |= static_cast<uint64_t>(SK_Half1) << 48; *((uint64_t*) dst) = tmp; } @@ -861,7 +862,7 @@ static void color_xform_RGBA(void* dst, const void* vsrc, int len, LoadFn load; Load1Fn load_1; const bool kLoadAlpha = (kPremul_SkAlphaType == kAlphaType) || - (kF16_Linear_DstFormat == kDst); + (kF16_Linear_DstFormat == kDst && kOpaque_SkAlphaType != kAlphaType); switch (kSrc) { case kRGBA_8888_Linear_SrcFormat: if (kLoadAlpha) { |