diff options
author | 2017-12-16 00:40:08 +0000 | |
---|---|---|
committer | 2017-12-16 00:40:13 +0000 | |
commit | dd821bc56488d4ec2a9f797f271b0b669800f2e1 (patch) | |
tree | d30ab463e674c279770b919f34c18d0c0b7d81ce /src | |
parent | aae533e418f37d788cdb1a1177e882d0f8868b62 (diff) |
Revert "Increase accuracy of float -> fixed in ICC code"
This reverts commit ef8dda227b55445de090cfc5c59fb633f8a1763d.
Reason for revert: This is breaking WebKit layout tests on linux and blocking the autoroller. Probably just needs a rebase. See:
https://storage.googleapis.com/chromium-layout-test-archives/linux_trusty_blink_rel/20229/layout-test-results/results.html
Original change's description:
> Increase accuracy of float -> fixed in ICC code
>
> Add a comment to SkFixed explaining the accuracy issues of the macros.
>
> Bug: skia:
> Change-Id: Ibfecb16821fefe87822cc3acd1cf8498df10a492
> Reviewed-on: https://skia-review.googlesource.com/85742
> Reviewed-by: Brian Osman <brianosman@google.com>
> Commit-Queue: Brian Osman <brianosman@google.com>
TBR=mtklein@chromium.org,brianosman@google.com,reed@google.com
Change-Id: I354327767bd59a6104b1431b053721c3102719be
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: skia:
Reviewed-on: https://skia-review.googlesource.com/86281
Reviewed-by: Eric Karl <ericrk@chromium.org>
Commit-Queue: Eric Karl <ericrk@chromium.org>
Diffstat (limited to 'src')
-rw-r--r-- | src/core/SkICC.cpp | 28 |
1 files changed, 10 insertions, 18 deletions
diff --git a/src/core/SkICC.cpp b/src/core/SkICC.cpp index cfc66e1238..128bce368d 100644 --- a/src/core/SkICC.cpp +++ b/src/core/SkICC.cpp @@ -281,33 +281,25 @@ static constexpr uint32_t kICCTagTable[3 * kICCNumEntries] { SkEndian_SwapBE32(kTAG_cprt_Bytes), }; -// This is like SkFloatToFixed, but rounds to nearest, preserving as much accuracy as possible -// when going float -> fixed -> float (it has the same accuracy when going fixed -> float -> fixed). -// The use of double is necessary to accomodate the full potential 32-bit mantissa of the 16.16 -// SkFixed value, and so avoiding rounding problems with float. Also, see the comment in SkFixed.h. -static SkFixed float_round_to_fixed(float x) { - return sk_float_saturate2int((float)floor((double)x * SK_Fixed1 + 0.5)); -} - static void write_xyz_tag(uint32_t* ptr, const SkMatrix44& toXYZ, int col) { ptr[0] = SkEndian_SwapBE32(kXYZ_PCSSpace); ptr[1] = 0; - ptr[2] = SkEndian_SwapBE32(float_round_to_fixed(toXYZ.getFloat(0, col))); - ptr[3] = SkEndian_SwapBE32(float_round_to_fixed(toXYZ.getFloat(1, col))); - ptr[4] = SkEndian_SwapBE32(float_round_to_fixed(toXYZ.getFloat(2, col))); + ptr[2] = SkEndian_SwapBE32(SkFloatToFixed(toXYZ.getFloat(0, col))); + ptr[3] = SkEndian_SwapBE32(SkFloatToFixed(toXYZ.getFloat(1, col))); + ptr[4] = SkEndian_SwapBE32(SkFloatToFixed(toXYZ.getFloat(2, col))); } static void write_trc_tag(uint32_t* ptr, const SkColorSpaceTransferFn& fn) { ptr[0] = SkEndian_SwapBE32(kTAG_ParaCurveType); ptr[1] = 0; ptr[2] = (uint32_t) (SkEndian_SwapBE16(kGABCDEF_ParaCurveType)); - ptr[3] = SkEndian_SwapBE32(float_round_to_fixed(fn.fG)); - ptr[4] = SkEndian_SwapBE32(float_round_to_fixed(fn.fA)); - ptr[5] = SkEndian_SwapBE32(float_round_to_fixed(fn.fB)); - ptr[6] = SkEndian_SwapBE32(float_round_to_fixed(fn.fC)); - ptr[7] = SkEndian_SwapBE32(float_round_to_fixed(fn.fD)); - ptr[8] = SkEndian_SwapBE32(float_round_to_fixed(fn.fE)); - ptr[9] = SkEndian_SwapBE32(float_round_to_fixed(fn.fF)); + ptr[3] = SkEndian_SwapBE32(SkFloatToFixed(fn.fG)); + ptr[4] = SkEndian_SwapBE32(SkFloatToFixed(fn.fA)); + ptr[5] = SkEndian_SwapBE32(SkFloatToFixed(fn.fB)); + ptr[6] = SkEndian_SwapBE32(SkFloatToFixed(fn.fC)); + ptr[7] = SkEndian_SwapBE32(SkFloatToFixed(fn.fD)); + ptr[8] = SkEndian_SwapBE32(SkFloatToFixed(fn.fE)); + ptr[9] = SkEndian_SwapBE32(SkFloatToFixed(fn.fF)); } static bool is_3x3(const SkMatrix44& toXYZD50) { |