| Index: src/gpu/batches/GrDefaultPathRenderer.cpp | 
| diff --git a/src/gpu/batches/GrDefaultPathRenderer.cpp b/src/gpu/batches/GrDefaultPathRenderer.cpp | 
| index 708bcd723413317031d1d5e1ce956360e233e46d..94508b130b4fcc05198bab77955c7e878f816bb4 100644 | 
| --- a/src/gpu/batches/GrDefaultPathRenderer.cpp | 
| +++ b/src/gpu/batches/GrDefaultPathRenderer.cpp | 
| @@ -28,6 +28,130 @@ | 
| : fSeparateStencil(separateStencilSupport) | 
| , fStencilWrapOps(stencilWrapOpsSupport) { | 
| } | 
| + | 
| + | 
| +//////////////////////////////////////////////////////////////////////////////// | 
| +// Stencil rules for paths | 
| + | 
| +////// Even/Odd | 
| + | 
| +GR_STATIC_CONST_SAME_STENCIL(gEOStencilPass, | 
| +    kInvert_StencilOp, | 
| +    kKeep_StencilOp, | 
| +    kAlwaysIfInClip_StencilFunc, | 
| +    0xffff, | 
| +    0xffff, | 
| +    0xffff); | 
| + | 
| +// ok not to check clip b/c stencil pass only wrote inside clip | 
| +GR_STATIC_CONST_SAME_STENCIL(gEOColorPass, | 
| +    kZero_StencilOp, | 
| +    kZero_StencilOp, | 
| +    kNotEqual_StencilFunc, | 
| +    0xffff, | 
| +    0x0000, | 
| +    0xffff); | 
| + | 
| +// have to check clip b/c outside clip will always be zero. | 
| +GR_STATIC_CONST_SAME_STENCIL(gInvEOColorPass, | 
| +    kZero_StencilOp, | 
| +    kZero_StencilOp, | 
| +    kEqualIfInClip_StencilFunc, | 
| +    0xffff, | 
| +    0x0000, | 
| +    0xffff); | 
| + | 
| +////// Winding | 
| + | 
| +// when we have separate stencil we increment front faces / decrement back faces | 
| +// when we don't have wrap incr and decr we use the stencil test to simulate | 
| +// them. | 
| + | 
| +GR_STATIC_CONST_STENCIL(gWindStencilSeparateWithWrap, | 
| +    kIncWrap_StencilOp,             kDecWrap_StencilOp, | 
| +    kKeep_StencilOp,                kKeep_StencilOp, | 
| +    kAlwaysIfInClip_StencilFunc,    kAlwaysIfInClip_StencilFunc, | 
| +    0xffff,                         0xffff, | 
| +    0xffff,                         0xffff, | 
| +    0xffff,                         0xffff); | 
| + | 
| +// if inc'ing the max value, invert to make 0 | 
| +// if dec'ing zero invert to make all ones. | 
| +// we can't avoid touching the stencil on both passing and | 
| +// failing, so we can't resctrict ourselves to the clip. | 
| +GR_STATIC_CONST_STENCIL(gWindStencilSeparateNoWrap, | 
| +    kInvert_StencilOp,              kInvert_StencilOp, | 
| +    kIncClamp_StencilOp,            kDecClamp_StencilOp, | 
| +    kEqual_StencilFunc,             kEqual_StencilFunc, | 
| +    0xffff,                         0xffff, | 
| +    0xffff,                         0x0000, | 
| +    0xffff,                         0xffff); | 
| + | 
| +// When there are no separate faces we do two passes to setup the winding rule | 
| +// stencil. First we draw the front faces and inc, then we draw the back faces | 
| +// and dec. These are same as the above two split into the incrementing and | 
| +// decrementing passes. | 
| +GR_STATIC_CONST_SAME_STENCIL(gWindSingleStencilWithWrapInc, | 
| +    kIncWrap_StencilOp, | 
| +    kKeep_StencilOp, | 
| +    kAlwaysIfInClip_StencilFunc, | 
| +    0xffff, | 
| +    0xffff, | 
| +    0xffff); | 
| + | 
| +GR_STATIC_CONST_SAME_STENCIL(gWindSingleStencilWithWrapDec, | 
| +    kDecWrap_StencilOp, | 
| +    kKeep_StencilOp, | 
| +    kAlwaysIfInClip_StencilFunc, | 
| +    0xffff, | 
| +    0xffff, | 
| +    0xffff); | 
| + | 
| +GR_STATIC_CONST_SAME_STENCIL(gWindSingleStencilNoWrapInc, | 
| +    kInvert_StencilOp, | 
| +    kIncClamp_StencilOp, | 
| +    kEqual_StencilFunc, | 
| +    0xffff, | 
| +    0xffff, | 
| +    0xffff); | 
| + | 
| +GR_STATIC_CONST_SAME_STENCIL(gWindSingleStencilNoWrapDec, | 
| +    kInvert_StencilOp, | 
| +    kDecClamp_StencilOp, | 
| +    kEqual_StencilFunc, | 
| +    0xffff, | 
| +    0x0000, | 
| +    0xffff); | 
| + | 
| +// Color passes are the same whether we use the two-sided stencil or two passes | 
| + | 
| +GR_STATIC_CONST_SAME_STENCIL(gWindColorPass, | 
| +    kZero_StencilOp, | 
| +    kZero_StencilOp, | 
| +    kNonZeroIfInClip_StencilFunc, | 
| +    0xffff, | 
| +    0x0000, | 
| +    0xffff); | 
| + | 
| +GR_STATIC_CONST_SAME_STENCIL(gInvWindColorPass, | 
| +    kZero_StencilOp, | 
| +    kZero_StencilOp, | 
| +    kEqualIfInClip_StencilFunc, | 
| +    0xffff, | 
| +    0x0000, | 
| +    0xffff); | 
| + | 
| +////// Normal render to stencil | 
| + | 
| +// Sometimes the default path renderer can draw a path directly to the stencil | 
| +// buffer without having to first resolve the interior / exterior. | 
| +GR_STATIC_CONST_SAME_STENCIL(gDirectToStencil, | 
| +    kZero_StencilOp, | 
| +    kIncClamp_StencilOp, | 
| +    kAlwaysIfInClip_StencilFunc, | 
| +    0xffff, | 
| +    0x0000, | 
| +    0xffff); | 
|  | 
| //////////////////////////////////////////////////////////////////////////////// | 
| // Helpers for drawPath | 
|  |