| Index: src/gpu/batches/GrAAFillRectBatch.h | 
| diff --git a/src/gpu/batches/GrAAFillRectBatch.h b/src/gpu/batches/GrAAFillRectBatch.h | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..c852eb100201f8f9d97185bc144c9618c711be20 | 
| --- /dev/null | 
| +++ b/src/gpu/batches/GrAAFillRectBatch.h | 
| @@ -0,0 +1,91 @@ | 
| +/* | 
| + * Copyright 2015 Google Inc. | 
| + * | 
| + * Use of this source code is governed by a BSD-style license that can be | 
| + * found in the LICENSE file. | 
| + */ | 
| + | 
| +#ifndef GrAAFillRectBatch_DEFINED | 
| +#define GrAAFillRectBatch_DEFINED | 
| + | 
| +#include "GrBatch.h" | 
| +#include "GrColor.h" | 
| +#include "GrTypes.h" | 
| +#include "SkMatrix.h" | 
| +#include "SkRect.h" | 
| + | 
| +class GrAAFillRectBatch : public GrBatch { | 
| +public: | 
| +    struct Geometry { | 
| +        GrColor fColor; | 
| +        SkMatrix fViewMatrix; | 
| +        SkRect fRect; | 
| +        SkRect fDevRect; | 
| +    }; | 
| + | 
| +    static GrBatch* Create(const Geometry& geometry) { | 
| +        return SkNEW_ARGS(GrAAFillRectBatch, (geometry)); | 
| +    } | 
| + | 
| +    const char* name() const override { return "AAFillRectBatch"; } | 
| + | 
| +    void getInvariantOutputColor(GrInitInvariantOutput* out) const override { | 
| +        // When this is called on a batch, there is only one geometry bundle | 
| +        out->setKnownFourComponents(fGeoData[0].fColor); | 
| +    } | 
| + | 
| +    void getInvariantOutputCoverage(GrInitInvariantOutput* out) const override { | 
| +        out->setUnknownSingleComponent(); | 
| +    } | 
| + | 
| +    void initBatchTracker(const GrPipelineInfo& init) override; | 
| + | 
| +    void generateGeometry(GrBatchTarget* batchTarget) override; | 
| + | 
| +    SkSTArray<1, Geometry, true>* geoData() { return &fGeoData; } | 
| + | 
| +private: | 
| +    GrAAFillRectBatch(const Geometry& geometry) { | 
| +        this->initClassID<GrAAFillRectBatch>(); | 
| +        fGeoData.push_back(geometry); | 
| + | 
| +        this->setBounds(geometry.fDevRect); | 
| +    } | 
| + | 
| +    static const int kNumAAFillRectsInIndexBuffer = 256; | 
| +    static const int kVertsPerAAFillRect = 8; | 
| +    static const int kIndicesPerAAFillRect = 30; | 
| + | 
| +    const GrIndexBuffer* getIndexBuffer(GrResourceProvider* resourceProvider); | 
| + | 
| +    GrColor color() const { return fBatch.fColor; } | 
| +    bool usesLocalCoords() const { return fBatch.fUsesLocalCoords; } | 
| +    bool canTweakAlphaForCoverage() const { return fBatch.fCanTweakAlphaForCoverage; } | 
| +    bool colorIgnored() const { return fBatch.fColorIgnored; } | 
| +    const SkMatrix& viewMatrix() const { return fGeoData[0].fViewMatrix; } | 
| +    bool coverageIgnored() const { return fBatch.fCoverageIgnored; } | 
| + | 
| +    bool onCombineIfPossible(GrBatch* t) override; | 
| + | 
| +    void generateAAFillRectGeometry(void* vertices, | 
| +                                    size_t offset, | 
| +                                    size_t vertexStride, | 
| +                                    GrColor color, | 
| +                                    const SkMatrix& viewMatrix, | 
| +                                    const SkRect& rect, | 
| +                                    const SkRect& devRect, | 
| +                                    bool tweakAlphaForCoverage) const; | 
| + | 
| +    struct BatchTracker { | 
| +        GrColor fColor; | 
| +        bool fUsesLocalCoords; | 
| +        bool fColorIgnored; | 
| +        bool fCoverageIgnored; | 
| +        bool fCanTweakAlphaForCoverage; | 
| +    }; | 
| + | 
| +    BatchTracker fBatch; | 
| +    SkSTArray<1, Geometry, true> fGeoData; | 
| +}; | 
| + | 
| +#endif | 
|  |