| Index: src/gpu/GrOvalRenderer.cpp
 | 
| diff --git a/src/gpu/GrOvalRenderer.cpp b/src/gpu/GrOvalRenderer.cpp
 | 
| index 2f8af8d175b6bac7e9696c7bdf8d53d7688b46ed..a35d70859a4b167ababf6a333869e2353f9c1b71 100644
 | 
| --- a/src/gpu/GrOvalRenderer.cpp
 | 
| +++ b/src/gpu/GrOvalRenderer.cpp
 | 
| @@ -83,7 +83,7 @@ public:
 | 
|                      const GrBatchTracker&)
 | 
|              : fColor(GrColor_ILLEGAL) {}
 | 
|  
 | 
| -        void onEmitCode(EmitArgs& args) SK_OVERRIDE {
 | 
| +        void onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) SK_OVERRIDE{
 | 
|              const CircleEdgeEffect& ce = args.fGP.cast<CircleEdgeEffect>();
 | 
|              GrGLGPBuilder* pb = args.fPB;
 | 
|              const BatchTracker& local = args.fBT.cast<BatchTracker>();
 | 
| @@ -104,11 +104,11 @@ public:
 | 
|              this->addUniformViewMatrix(pb);
 | 
|  
 | 
|              // Setup position
 | 
| -            vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);",  this->position(), this->uViewM(),
 | 
| -                                   ce.inPosition()->fName);
 | 
| +            SetupPosition(vsBuilder, gpArgs, ce.inPosition()->fName,
 | 
| +                          ce.viewMatrix(), this->uViewM());
 | 
|  
 | 
|              // emit transforms
 | 
| -            this->emitTransforms(args.fPB,  this->position(), ce.inPosition()->fName,
 | 
| +            this->emitTransforms(args.fPB, gpArgs->fPositionVar, ce.inPosition()->fName,
 | 
|                                   ce.localMatrix(), args.fTransformsIn, args.fTransformsOut);;
 | 
|  
 | 
|              GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder();
 | 
| @@ -123,14 +123,15 @@ public:
 | 
|              fsBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage);
 | 
|          }
 | 
|  
 | 
| -        static void GenKey(const GrGeometryProcessor& processor,
 | 
| +        static void GenKey(const GrGeometryProcessor& gp,
 | 
|                             const GrBatchTracker& bt,
 | 
|                             const GrGLCaps&,
 | 
|                             GrProcessorKeyBuilder* b) {
 | 
|              const BatchTracker& local = bt.cast<BatchTracker>();
 | 
| -            const CircleEdgeEffect& circleEffect = processor.cast<CircleEdgeEffect>();
 | 
| +            const CircleEdgeEffect& circleEffect = gp.cast<CircleEdgeEffect>();
 | 
|              uint16_t key = circleEffect.isStroked() ? 0x1 : 0x0;
 | 
| -            key |= local.fUsesLocalCoords && processor.localMatrix().hasPerspective() ? 0x2 : 0x0;
 | 
| +            key |= local.fUsesLocalCoords && gp.localMatrix().hasPerspective() ? 0x2 : 0x0;
 | 
| +            key |= ComputePosKey(gp.viewMatrix()) << 2;
 | 
|              b->add32(key << 16 | local.fInputColorType);
 | 
|          }
 | 
|  
 | 
| @@ -259,7 +260,7 @@ public:
 | 
|                      const GrBatchTracker&)
 | 
|              : fColor(GrColor_ILLEGAL) {}
 | 
|  
 | 
| -        void onEmitCode(EmitArgs& args) SK_OVERRIDE {
 | 
| +        void onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) SK_OVERRIDE{
 | 
|              const EllipseEdgeEffect& ee = args.fGP.cast<EllipseEdgeEffect>();
 | 
|              GrGLGPBuilder* pb = args.fPB;
 | 
|              const BatchTracker& local = args.fBT.cast<BatchTracker>();
 | 
| @@ -286,11 +287,11 @@ public:
 | 
|              this->addUniformViewMatrix(pb);
 | 
|  
 | 
|              // Setup position
 | 
| -            vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", this->position(), this->uViewM(),
 | 
| -                                   ee.inPosition()->fName);
 | 
| +            SetupPosition(vsBuilder, gpArgs, ee.inPosition()->fName,
 | 
| +                          ee.viewMatrix(), this->uViewM());
 | 
|  
 | 
|              // emit transforms
 | 
| -            this->emitTransforms(args.fPB, this->position(), ee.inPosition()->fName,
 | 
| +            this->emitTransforms(args.fPB, gpArgs->fPositionVar, ee.inPosition()->fName,
 | 
|                                   ee.localMatrix(), args.fTransformsIn, args.fTransformsOut);
 | 
|  
 | 
|              // for outer curve
 | 
| @@ -320,14 +321,15 @@ public:
 | 
|              fsBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage);
 | 
|          }
 | 
|  
 | 
| -        static void GenKey(const GrGeometryProcessor& processor,
 | 
| +        static void GenKey(const GrGeometryProcessor& gp,
 | 
|                             const GrBatchTracker& bt,
 | 
|                             const GrGLCaps&,
 | 
|                             GrProcessorKeyBuilder* b) {
 | 
|              const BatchTracker& local = bt.cast<BatchTracker>();
 | 
| -            const EllipseEdgeEffect& ellipseEffect = processor.cast<EllipseEdgeEffect>();
 | 
| +            const EllipseEdgeEffect& ellipseEffect = gp.cast<EllipseEdgeEffect>();
 | 
|              uint16_t key = ellipseEffect.isStroked() ? 0x1 : 0x0;
 | 
| -            key |= local.fUsesLocalCoords && processor.localMatrix().hasPerspective() ? 0x2 : 0x0;
 | 
| +            key |= local.fUsesLocalCoords && gp.localMatrix().hasPerspective() ? 0x2 : 0x0;
 | 
| +            key |= ComputePosKey(gp.viewMatrix()) << 2;
 | 
|              b->add32(key << 16 | local.fInputColorType);
 | 
|          }
 | 
|  
 | 
| @@ -463,7 +465,7 @@ public:
 | 
|                      const GrBatchTracker&)
 | 
|              : fColor(GrColor_ILLEGAL) {}
 | 
|  
 | 
| -        void onEmitCode(EmitArgs& args) SK_OVERRIDE {
 | 
| +        void onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) SK_OVERRIDE{
 | 
|              const DIEllipseEdgeEffect& ee = args.fGP.cast<DIEllipseEdgeEffect>();
 | 
|              GrGLGPBuilder* pb = args.fPB;
 | 
|              const BatchTracker& local = args.fBT.cast<BatchTracker>();
 | 
| @@ -490,11 +492,11 @@ public:
 | 
|              this->addUniformViewMatrix(pb);
 | 
|  
 | 
|              // Setup position
 | 
| -            vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", this->position(), this->uViewM(),
 | 
| -                                   ee.inPosition()->fName);
 | 
| +            SetupPosition(vsBuilder, gpArgs, ee.inPosition()->fName,
 | 
| +                          ee.viewMatrix(), this->uViewM());
 | 
|  
 | 
|              // emit transforms
 | 
| -            this->emitTransforms(args.fPB, this->position(), ee.inPosition()->fName,
 | 
| +            this->emitTransforms(args.fPB, gpArgs->fPositionVar, ee.inPosition()->fName,
 | 
|                                   ee.localMatrix(), args.fTransformsIn, args.fTransformsOut);
 | 
|  
 | 
|              GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder();
 | 
| @@ -538,15 +540,15 @@ public:
 | 
|              fsBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage);
 | 
|          }
 | 
|  
 | 
| -        static void GenKey(const GrGeometryProcessor& processor,
 | 
| +        static void GenKey(const GrGeometryProcessor& gp,
 | 
|                             const GrBatchTracker& bt,
 | 
|                             const GrGLCaps&,
 | 
|                             GrProcessorKeyBuilder* b) {
 | 
|              const BatchTracker& local = bt.cast<BatchTracker>();
 | 
| -            const DIEllipseEdgeEffect& ellipseEffect = processor.cast<DIEllipseEdgeEffect>();
 | 
| +            const DIEllipseEdgeEffect& ellipseEffect = gp.cast<DIEllipseEdgeEffect>();
 | 
|              uint16_t key = ellipseEffect.getMode();
 | 
| -            key |= local.fUsesLocalCoords && processor.localMatrix().hasPerspective() ? 0x1 << 8 :
 | 
| -                                                                                        0x0;
 | 
| +            key |= local.fUsesLocalCoords && gp.localMatrix().hasPerspective() ? 0x1 << 8 : 0x0;
 | 
| +            key |= ComputePosKey(gp.viewMatrix()) << 9;
 | 
|              b->add32(key << 16 | local.fInputColorType);
 | 
|          }
 | 
|  
 | 
| 
 |