| Index: src/pathops/SkPathOpsTypes.cpp
|
| diff --git a/src/pathops/SkPathOpsTypes.cpp b/src/pathops/SkPathOpsTypes.cpp
|
| index bad1bc7a8b8d1cb585f3b5ca1ac19489be7260fd..d25df12873da6db903991c9dcf49a5d946985a6e 100644
|
| --- a/src/pathops/SkPathOpsTypes.cpp
|
| +++ b/src/pathops/SkPathOpsTypes.cpp
|
| @@ -25,6 +25,13 @@ static bool equal_ulps(float a, float b, int epsilon, int depsilon) {
|
| return aBits < bBits + epsilon && bBits < aBits + epsilon;
|
| }
|
|
|
| +static bool equal_ulps_no_normal_check(float a, float b, int epsilon, int depsilon) {
|
| + int aBits = SkFloatAs2sCompliment(a);
|
| + int bBits = SkFloatAs2sCompliment(b);
|
| + // Find the difference in ULPs.
|
| + return aBits < bBits + epsilon && bBits < aBits + epsilon;
|
| +}
|
| +
|
| static bool equal_ulps_pin(float a, float b, int epsilon, int depsilon) {
|
| if (!SkScalarIsFinite(a) || !SkScalarIsFinite(b)) {
|
| return false;
|
| @@ -120,6 +127,11 @@ bool AlmostEqualUlps(float a, float b) {
|
| return equal_ulps(a, b, UlpsEpsilon, UlpsEpsilon);
|
| }
|
|
|
| +bool AlmostEqualUlpsNoNormalCheck(float a, float b) {
|
| + const int UlpsEpsilon = 16;
|
| + return equal_ulps_no_normal_check(a, b, UlpsEpsilon, UlpsEpsilon);
|
| +}
|
| +
|
| bool AlmostEqualUlps_Pin(float a, float b) {
|
| const int UlpsEpsilon = 16;
|
| return equal_ulps_pin(a, b, UlpsEpsilon, UlpsEpsilon);
|
| @@ -212,10 +224,12 @@ double SkDCubeRoot(double x) {
|
| return result;
|
| }
|
|
|
| -SkOpGlobalState::SkOpGlobalState(SkOpCoincidence* coincidence, SkOpContourHead* head
|
| +SkOpGlobalState::SkOpGlobalState(SkOpContourHead* head,
|
| + SkChunkAlloc* allocator
|
| SkDEBUGPARAMS(bool debugSkipAssert)
|
| SkDEBUGPARAMS(const char* testName))
|
| - : fCoincidence(coincidence)
|
| + : fAllocator(allocator)
|
| + , fCoincidence(nullptr)
|
| , fContourHead(head)
|
| , fNested(0)
|
| , fWindingFailed(false)
|
| @@ -227,13 +241,9 @@ SkOpGlobalState::SkOpGlobalState(SkOpCoincidence* coincidence, SkOpContourHead*
|
| SkDEBUGPARAMS(fContourID(0))
|
| SkDEBUGPARAMS(fPtTID(0))
|
| SkDEBUGPARAMS(fSegmentID(0))
|
| - SkDEBUGPARAMS(fSpanID(0))
|
| - SkDEBUGPARAMS(fDebugSkipAssert(debugSkipAssert)) {
|
| - if (coincidence) {
|
| - coincidence->debugSetGlobalState(this);
|
| - }
|
| +SkDEBUGPARAMS(fSpanID(0))
|
| +SkDEBUGPARAMS(fDebugSkipAssert(debugSkipAssert)) {
|
| #if DEBUG_T_SECT_LOOP_COUNT
|
| debugResetLoopCounts();
|
| #endif
|
| }
|
| -
|
|
|