diff options
author | reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2012-08-07 21:35:13 +0000 |
---|---|---|
committer | reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2012-08-07 21:35:13 +0000 |
commit | 4b163ed2c22facbe8891616874ae07ba7827d9c9 (patch) | |
tree | a6c54760e3ded8456cc4a410beb9da4a5bfeabcf /src/core | |
parent | 2ddff9388694263c7be9347de7eb768cd0847997 (diff) |
Privatization:
move SkFDot.h to private
move parts of SkMath.h into SkMathPriv.h
Review URL: https://codereview.appspot.com/6461045
git-svn-id: http://skia.googlecode.com/svn/trunk@4997 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/Sk64.cpp | 3 | ||||
-rw-r--r-- | src/core/SkBitmapProcState_matrix.h | 1 | ||||
-rw-r--r-- | src/core/SkBitmapProcState_shaderproc.h | 2 | ||||
-rw-r--r-- | src/core/SkBlitRow_D16.cpp | 1 | ||||
-rw-r--r-- | src/core/SkConfig8888.cpp | 1 | ||||
-rw-r--r-- | src/core/SkCordic.cpp | 4 | ||||
-rw-r--r-- | src/core/SkFDot6.h | 58 | ||||
-rw-r--r-- | src/core/SkFloat.cpp | 2 | ||||
-rw-r--r-- | src/core/SkFloatBits.cpp | 4 | ||||
-rw-r--r-- | src/core/SkMath.cpp | 4 | ||||
-rw-r--r-- | src/core/SkMathPriv.h | 94 | ||||
-rw-r--r-- | src/core/SkXfermode.cpp | 1 |
12 files changed, 163 insertions, 12 deletions
diff --git a/src/core/Sk64.cpp b/src/core/Sk64.cpp index f3506564a5..c530ed866f 100644 --- a/src/core/Sk64.cpp +++ b/src/core/Sk64.cpp @@ -1,4 +1,3 @@ - /* * Copyright 2006 The Android Open Source Project * @@ -7,7 +6,7 @@ */ #include "Sk64.h" -#include "SkMath.h" +#include "SkMathPriv.h" #define shift_left(hi, lo) \ hi = (hi << 1) | (lo >> 31); \ diff --git a/src/core/SkBitmapProcState_matrix.h b/src/core/SkBitmapProcState_matrix.h index 469cbf3ad4..317c98437e 100644 --- a/src/core/SkBitmapProcState_matrix.h +++ b/src/core/SkBitmapProcState_matrix.h @@ -7,6 +7,7 @@ */ #include "SkMath.h" +#include "SkMathPriv.h" #define SCALE_NOFILTER_NAME MAKENAME(_nofilter_scale) #define SCALE_FILTER_NAME MAKENAME(_filter_scale) diff --git a/src/core/SkBitmapProcState_shaderproc.h b/src/core/SkBitmapProcState_shaderproc.h index a3a8a99c0d..ead57f123e 100644 --- a/src/core/SkBitmapProcState_shaderproc.h +++ b/src/core/SkBitmapProcState_shaderproc.h @@ -6,7 +6,7 @@ * found in the LICENSE file. */ - +#include "SkMathPriv.h" #define SCALE_FILTER_NAME MAKENAME(_filter_DX_shaderproc) diff --git a/src/core/SkBlitRow_D16.cpp b/src/core/SkBlitRow_D16.cpp index c815468bb6..5e675e5493 100644 --- a/src/core/SkBlitRow_D16.cpp +++ b/src/core/SkBlitRow_D16.cpp @@ -8,6 +8,7 @@ #include "SkBlitRow.h" #include "SkColorPriv.h" #include "SkDither.h" +#include "SkMathPriv.h" /////////////////////////////////////////////////////////////////////////////// diff --git a/src/core/SkConfig8888.cpp b/src/core/SkConfig8888.cpp index 10a1b36614..f889f20744 100644 --- a/src/core/SkConfig8888.cpp +++ b/src/core/SkConfig8888.cpp @@ -1,4 +1,5 @@ #include "SkConfig8888.h" +#include "SkMathPriv.h" namespace { diff --git a/src/core/SkCordic.cpp b/src/core/SkCordic.cpp index 14d34fb9fd..56cb4606c5 100644 --- a/src/core/SkCordic.cpp +++ b/src/core/SkCordic.cpp @@ -1,4 +1,3 @@ - /* * Copyright 2006 The Android Open Source Project * @@ -6,9 +5,8 @@ * found in the LICENSE file. */ - #include "SkCordic.h" -#include "SkMath.h" +#include "SkMathPriv.h" #include "Sk64.h" // 0x20000000 equals pi / 4 diff --git a/src/core/SkFDot6.h b/src/core/SkFDot6.h new file mode 100644 index 0000000000..aa588572f8 --- /dev/null +++ b/src/core/SkFDot6.h @@ -0,0 +1,58 @@ + +/* + * Copyright 2006 The Android Open Source Project + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + + +#ifndef SkFDot6_DEFINED +#define SkFDot6_DEFINED + +#include "SkMath.h" + +typedef int32_t SkFDot6; + +#define SK_FDot6One (64) +#define SK_FDot6Half (32) + +#ifdef SK_DEBUG + inline SkFDot6 SkIntToFDot6(S16CPU x) { + SkASSERT(SkToS16(x) == x); + return x << 6; + } +#else + #define SkIntToFDot6(x) ((x) << 6) +#endif + +#define SkFDot6Floor(x) ((x) >> 6) +#define SkFDot6Ceil(x) (((x) + 63) >> 6) +#define SkFDot6Round(x) (((x) + 32) >> 6) + +#define SkFixedToFDot6(x) ((x) >> 10) + +inline SkFixed SkFDot6ToFixed(SkFDot6 x) { + SkASSERT((x << 10 >> 10) == x); + + return x << 10; +} + +#ifdef SK_SCALAR_IS_FLOAT + #define SkScalarToFDot6(x) (SkFDot6)((x) * 64) +#else + #define SkScalarToFDot6(x) ((x) >> 10) +#endif + +inline SkFixed SkFDot6Div(SkFDot6 a, SkFDot6 b) { + SkASSERT(b != 0); + + if (a == (int16_t)a) { + return (a << 16) / b; + } else { + return SkFixedDiv(a, b); + } +} + +#endif + diff --git a/src/core/SkFloat.cpp b/src/core/SkFloat.cpp index ec785f320b..dffb0d7803 100644 --- a/src/core/SkFloat.cpp +++ b/src/core/SkFloat.cpp @@ -8,7 +8,7 @@ #include "SkFloat.h" -#include "SkMath.h" +#include "SkMathPriv.h" #define EXP_BIAS (127+23) diff --git a/src/core/SkFloatBits.cpp b/src/core/SkFloatBits.cpp index 378f98db43..fe4a1b9ab8 100644 --- a/src/core/SkFloatBits.cpp +++ b/src/core/SkFloatBits.cpp @@ -1,12 +1,12 @@ - /* * Copyright 2011 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ + #include "SkFloatBits.h" -#include "SkMath.h" +#include "SkMathPriv.h" /****************************************************************************** SkFloatBits_toInt[Floor, Round, Ceil] are identical except for what they diff --git a/src/core/SkMath.cpp b/src/core/SkMath.cpp index 7b753057cc..a149625297 100644 --- a/src/core/SkMath.cpp +++ b/src/core/SkMath.cpp @@ -1,4 +1,3 @@ - /* * Copyright 2008 The Android Open Source Project * @@ -6,8 +5,7 @@ * found in the LICENSE file. */ - -#include "SkMath.h" +#include "SkMathPriv.h" #include "SkCordic.h" #include "SkFloatBits.h" #include "SkFloatingPoint.h" diff --git a/src/core/SkMathPriv.h b/src/core/SkMathPriv.h new file mode 100644 index 0000000000..055acc4ebd --- /dev/null +++ b/src/core/SkMathPriv.h @@ -0,0 +1,94 @@ +/* + * Copyright 2012 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef SkMathPriv_DEFINED +#define SkMathPriv_DEFINED + +#include "SkMath.h" + +/** Returns -1 if n < 0, else returns 0 + */ +#define SkExtractSign(n) ((int32_t)(n) >> 31) + +/** If sign == -1, returns -n, else sign must be 0, and returns n. + Typically used in conjunction with SkExtractSign(). + */ +static inline int32_t SkApplySign(int32_t n, int32_t sign) { + SkASSERT(sign == 0 || sign == -1); + return (n ^ sign) - sign; +} + +/** Return x with the sign of y */ +static inline int32_t SkCopySign32(int32_t x, int32_t y) { + return SkApplySign(x, SkExtractSign(x ^ y)); +} + +/** Given a positive value and a positive max, return the value + pinned against max. + Note: only works as long as max - value doesn't wrap around + @return max if value >= max, else value + */ +static inline unsigned SkClampUMax(unsigned value, unsigned max) { +#ifdef SK_CPU_HAS_CONDITIONAL_INSTR + if (value > max) { + value = max; + } + return value; +#else + int diff = max - value; + // clear diff if diff is positive + diff &= diff >> 31; + + return value + diff; +#endif +} + +/** Computes the 64bit product of a * b, and then shifts the answer down by + shift bits, returning the low 32bits. shift must be [0..63] + e.g. to perform a fixedmul, call SkMulShift(a, b, 16) + */ +int32_t SkMulShift(int32_t a, int32_t b, unsigned shift); + +/** Return the integer square root of n, treated as a SkFixed (16.16) + */ +#define SkSqrt32(n) SkSqrtBits(n, 15) + +/** Return the integer cube root of value, with a bias of bitBias + */ +int32_t SkCubeRootBits(int32_t value, int bitBias); + +/////////////////////////////////////////////////////////////////////////////// + +/** Return a*b/255, truncating away any fractional bits. Only valid if both + a and b are 0..255 + */ +static inline U8CPU SkMulDiv255Trunc(U8CPU a, U8CPU b) { + SkASSERT((uint8_t)a == a); + SkASSERT((uint8_t)b == b); + unsigned prod = SkMulS16(a, b) + 1; + return (prod + (prod >> 8)) >> 8; +} + +/** Return (a*b)/255, taking the ceiling of any fractional bits. Only valid if + both a and b are 0..255. The expected result equals (a * b + 254) / 255. + */ +static inline U8CPU SkMulDiv255Ceiling(U8CPU a, U8CPU b) { + SkASSERT((uint8_t)a == a); + SkASSERT((uint8_t)b == b); + unsigned prod = SkMulS16(a, b) + 255; + return (prod + (prod >> 8)) >> 8; +} + +/** Just the rounding step in SkDiv255Round: round(value / 255) + */ +static inline unsigned SkDiv255Round(unsigned prod) { + prod += 128; + return (prod + (prod >> 8)) >> 8; +} + +#endif + diff --git a/src/core/SkXfermode.cpp b/src/core/SkXfermode.cpp index 74097be67b..aeed9cc26e 100644 --- a/src/core/SkXfermode.cpp +++ b/src/core/SkXfermode.cpp @@ -10,6 +10,7 @@ #include "SkXfermode.h" #include "SkColorPriv.h" #include "SkFlattenableBuffers.h" +#include "SkMathPriv.h" SK_DEFINE_INST_COUNT(SkXfermode) |