Chromium Code Reviews| Index: include/core/SkFixed.h |
| diff --git a/include/core/SkFixed.h b/include/core/SkFixed.h |
| index 8bbf2f0dfec48e298a3953843a58129601014202..8a56104172af0d043cc81fa00a5ed2fa36665277 100644 |
| --- a/include/core/SkFixed.h |
| +++ b/include/core/SkFixed.h |
| @@ -29,8 +29,18 @@ typedef int32_t SkFixed; |
| #define SK_FixedTanPIOver8 (0x6A0A) |
| #define SK_FixedRoot2Over2 (0xB505) |
| -#define SkFixedToFloat(x) ((x) * 1.52587890625e-5f) |
| -#define SkFloatToFixed(x) ((SkFixed)((x) * SK_Fixed1)) |
| +#define SkFixedToFloat(x) ((x) * 1.52587890625e-5f) |
| +#define SkFloatToFixed_Unsafe(x) ((SkFixed)((x) * SK_Fixed1)) |
| + |
| +#ifdef SK_DEBUG |
| + static inline SkFixed SkFloatToFixed(float x) { |
|
mtklein
2016/03/22 12:38:02
It should be fine to use this definition in Debug
|
| + const SkFixed result = SkFloatToFixed_Unsafe(x); |
| + SkASSERT(truncf(x * SK_Fixed1) == static_cast<float>(result)); |
| + return result; |
| + } |
| +#else |
| + #define SkFloatToFixed(x) SkFloatToFixed_Unsafe(x) |
| +#endif |
| // Pins over/under flows to SK_FixedMax/SK_FixedMin (slower than just a cast). |
| static inline SkFixed SkFloatPinToFixed(float x) { |
| @@ -43,20 +53,19 @@ static inline SkFixed SkFloatPinToFixed(float x) { |
| return result; |
| } |
| +#define SkFixedToDouble(x) ((x) * 1.52587890625e-5) |
| +#define SkDoubleToFixed_Unsafe(x) ((SkFixed)((x) * SK_Fixed1)) |
| + |
| #ifdef SK_DEBUG |
|
mtklein
2016/03/22 12:38:02
Ditto.
|
| - static inline SkFixed SkFloatToFixed_Check(float x) { |
| - int64_t n64 = (int64_t)(x * SK_Fixed1); |
| - SkFixed n32 = (SkFixed)n64; |
| - SkASSERT(n64 == n32); |
| - return n32; |
| + static inline SkFixed SkDoubleToFixed(double x) { |
| + const SkFixed result = SkDoubleToFixed_Unsafe(x); |
| + SkASSERT(trunc(x * SK_Fixed1) == static_cast<double>(result)); |
| + return result; |
| } |
| #else |
| - #define SkFloatToFixed_Check(x) SkFloatToFixed(x) |
| + #define SkDoubleToFixed(x) SkDoubleToFixed_Unsafe(x) |
| #endif |
| -#define SkFixedToDouble(x) ((x) * 1.52587890625e-5) |
| -#define SkDoubleToFixed(x) ((SkFixed)((x) * SK_Fixed1)) |
| - |
| // Pins over/under flows to SK_FixedMax/SK_FixedMin (slower than just a cast). |
| static inline SkFixed SkDoublePinToFixed(double x) { |
| x *= SK_Fixed1; |
| @@ -152,19 +161,30 @@ inline SkFixed SkFixedMul_longlong(SkFixed a, SkFixed b) { |
| #undef SkFixedMul |
| #define SkFixedMul(x, y) SkFixedMul_arm(x, y) |
| - #undef SkFloatToFixed |
| - #define SkFloatToFixed(x) SkFloatToFixed_arm(x) |
| + #undef SkFloatToFixed_Unsafe |
| + #define SkFloatToFixed_Unsafe(x) SkFloatToFixed_arm(x) |
|
mtklein
2016/03/22 12:38:02
Can you double check that SkFloatToFixed still cal
|
| #endif |
| /////////////////////////////////////////////////////////////////////////////// |
| typedef int64_t SkFixed3232; // 32.32 |
| -#define SkIntToFixed3232(x) (SkLeftShift((SkFixed3232)(x), 32)) |
| -#define SkFixed3232ToInt(x) ((int)((x) >> 32)) |
| -#define SkFixedToFixed3232(x) (SkLeftShift((SkFixed3232)(x), 16)) |
| -#define SkFixed3232ToFixed(x) ((SkFixed)((x) >> 16)) |
| -#define SkFloatToFixed3232(x) ((SkFixed3232)((x) * (65536.0f * 65536.0f))) |
| +#define SK_Fixed3232_1 (static_cast<SkFixed3232>(1) << 32) |
| +#define SkIntToFixed3232(x) (SkLeftShift((SkFixed3232)(x), 32)) |
| +#define SkFixed3232ToInt(x) ((int)((x) >> 32)) |
| +#define SkFixedToFixed3232(x) (SkLeftShift((SkFixed3232)(x), 16)) |
| +#define SkFixed3232ToFixed(x) ((SkFixed)((x) >> 16)) |
| +#define SkFloatToFixed3232_Unsafe(x) (static_cast<SkFixed3232>((x) * SK_Fixed3232_1)) |
| + |
| +#ifdef SK_DEBUG |
|
mtklein
2016/03/22 12:38:03
ditto
|
| + static inline SkFixed3232 SkFloatToFixed3232(float x) { |
| + const SkFixed3232 result = SkFloatToFixed3232_Unsafe(x); |
| + SkASSERT(truncf(x * SK_Fixed3232_1) == static_cast<float>(result)); |
| + return result; |
| + } |
| +#else |
| + #define SkFloatToFixed3232(x) SkFloatToFixed3232_Unsafe(x) |
| +#endif |
| #define SkScalarToFixed3232(x) SkFloatToFixed3232(x) |