| Index: src/gpu/GrGeometryProcessor.h | 
| diff --git a/src/gpu/GrGeometryProcessor.h b/src/gpu/GrGeometryProcessor.h | 
| index fb2300ed67454aa8f1337e7ccc9c4b25df95c953..d88f3e632aaaedd1882cb6501810fc0070c612da 100644 | 
| --- a/src/gpu/GrGeometryProcessor.h | 
| +++ b/src/gpu/GrGeometryProcessor.h | 
| @@ -92,6 +92,7 @@ class GrPrimitiveProcessor : public GrProcessor { | 
| public: | 
| // TODO let the PrimProc itself set this in its setData call, this should really live on the | 
| // bundle of primitive data | 
| +    const SkMatrix& viewMatrix() const { return fViewMatrix; } | 
| const SkMatrix& localMatrix() const { return fLocalMatrix; } | 
|  | 
| /* | 
| @@ -135,7 +136,9 @@ public: | 
| virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) const = 0; | 
|  | 
| protected: | 
| -    GrPrimitiveProcessor(const SkMatrix& localMatrix) : fLocalMatrix(localMatrix) {} | 
| +    GrPrimitiveProcessor(const SkMatrix& viewMatrix, const SkMatrix& localMatrix) | 
| +        : fViewMatrix(viewMatrix) | 
| +        , fLocalMatrix(localMatrix) {} | 
|  | 
| /* | 
| * CanCombineOutput will return true if two draws are 'batchable' from a color perspective. | 
| @@ -168,6 +171,7 @@ protected: | 
| } | 
|  | 
| private: | 
| +    SkMatrix fViewMatrix; | 
| SkMatrix fLocalMatrix; | 
|  | 
| typedef GrProcessor INHERITED; | 
| @@ -185,9 +189,10 @@ public: | 
| // TODO the Hint can be handled in a much more clean way when we have deferred geometry or | 
| // atleast bundles | 
| GrGeometryProcessor(GrColor color, | 
| -                        bool opaqueVertexColors = false, | 
| -                        const SkMatrix& localMatrix = SkMatrix::I()) | 
| -        : INHERITED(localMatrix) | 
| +                        const SkMatrix& viewMatrix = SkMatrix::I(), | 
| +                        const SkMatrix& localMatrix = SkMatrix::I(), | 
| +                        bool opaqueVertexColors = false) | 
| +        : INHERITED(viewMatrix, localMatrix) | 
| , fVertexStride(0) | 
| , fColor(color) | 
| , fOpaqueVertexColors(opaqueVertexColors) | 
| @@ -237,6 +242,11 @@ public: | 
| return false; | 
| } | 
|  | 
| +        // TODO let the GPs decide this | 
| +        if (!this->viewMatrix().cheapEqualTo(that.viewMatrix())) { | 
| +            return false; | 
| +        } | 
| + | 
| // TODO remove the hint | 
| const GrGeometryProcessor& other = that.cast<GrGeometryProcessor>(); | 
| if (fHasVertexColor && fOpaqueVertexColors != other.fOpaqueVertexColors) { | 
| @@ -342,8 +352,10 @@ private: | 
| */ | 
| class GrPathProcessor : public GrPrimitiveProcessor { | 
| public: | 
| -    static GrPathProcessor* Create(GrColor color, const SkMatrix& localMatrix = SkMatrix::I()) { | 
| -        return SkNEW_ARGS(GrPathProcessor, (color, localMatrix)); | 
| +    static GrPathProcessor* Create(GrColor color, | 
| +                                   const SkMatrix& viewMatrix = SkMatrix::I(), | 
| +                                   const SkMatrix& localMatrix = SkMatrix::I()) { | 
| +        return SkNEW_ARGS(GrPathProcessor, (color, viewMatrix, localMatrix)); | 
| } | 
|  | 
| void initBatchTracker(GrBatchTracker*, const InitBT&) const SK_OVERRIDE; | 
| @@ -366,7 +378,7 @@ public: | 
| virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) const SK_OVERRIDE; | 
|  | 
| private: | 
| -    GrPathProcessor(GrColor color, const SkMatrix& localMatrix); | 
| +    GrPathProcessor(GrColor color, const SkMatrix& viewMatrix, const SkMatrix& localMatrix); | 
| GrColor fColor; | 
|  | 
| typedef GrPrimitiveProcessor INHERITED; | 
|  |