| Index: src/gpu/GrAARectRenderer.cpp
|
| diff --git a/src/gpu/GrAARectRenderer.cpp b/src/gpu/GrAARectRenderer.cpp
|
| index 420c9e7c5a409f2de6f9a82962080d052afa864f..7e86c0b49d10ea022bbb38df53aea0acb2dff6bf 100644
|
| --- a/src/gpu/GrAARectRenderer.cpp
|
| +++ b/src/gpu/GrAARectRenderer.cpp
|
| @@ -70,24 +70,11 @@ public:
|
|
|
| void getInvariantOutputColor(GrInitInvariantOutput* out) const SK_OVERRIDE {
|
| // When this is called on a batch, there is only one geometry bundle
|
| - if (!this->canTweakAlphaForCoverage() && GrColorIsOpaque(fGeoData[0].fColor)) {
|
| - out->setUnknownOpaqueFourComponents();
|
| - } else {
|
| - out->setUnknownFourComponents();
|
| - }
|
| + out->setKnownFourComponents(fGeoData[0].fColor);
|
| }
|
|
|
| void getInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRIDE {
|
| - if (this->canTweakAlphaForCoverage()) {
|
| - // uniform coverage
|
| - out->setKnownSingleComponent(0xff);
|
| - } else {
|
| - out->setUnknownSingleComponent();
|
| - }
|
| - }
|
| -
|
| - void initBatchOpt(const GrBatchOpt& batchOpt) {
|
| - fBatchOpt = batchOpt;
|
| + out->setUnknownSingleComponent();
|
| }
|
|
|
| void initBatchTracker(const GrPipelineInfo& init) SK_OVERRIDE {
|
| @@ -103,6 +90,7 @@ public:
|
| fBatch.fColor = fGeoData[0].fColor;
|
| fBatch.fUsesLocalCoords = init.fUsesLocalCoords;
|
| fBatch.fCoverageIgnored = init.fCoverageIgnored;
|
| + fBatch.fCanTweakAlphaForCoverage = init.fCanTweakAlphaForCoverage;
|
| }
|
|
|
| void generateGeometry(GrBatchTarget* batchTarget, const GrPipeline* pipeline) SK_OVERRIDE {
|
| @@ -194,19 +182,12 @@ private:
|
|
|
| GrColor color() const { return fBatch.fColor; }
|
| bool usesLocalCoords() const { return fBatch.fUsesLocalCoords; }
|
| - bool canTweakAlphaForCoverage() const { return fBatchOpt.fCanTweakAlphaForCoverage; }
|
| + bool canTweakAlphaForCoverage() const { return fBatch.fCanTweakAlphaForCoverage; }
|
| bool colorIgnored() const { return fBatch.fColorIgnored; }
|
| const SkMatrix& viewMatrix() const { return fGeoData[0].fViewMatrix; }
|
|
|
| bool onCombineIfPossible(GrBatch* t) SK_OVERRIDE {
|
| AAFillRectBatch* that = t->cast<AAFillRectBatch>();
|
| - if (this->canTweakAlphaForCoverage() != that->canTweakAlphaForCoverage()) {
|
| - return false;
|
| - }
|
| -
|
| - if (this->colorIgnored() != that->colorIgnored()) {
|
| - return false;
|
| - }
|
|
|
| SkASSERT(this->usesLocalCoords() == that->usesLocalCoords());
|
| // We apply the viewmatrix to the rect points on the cpu. However, if the pipeline uses
|
| @@ -219,6 +200,13 @@ private:
|
| if (this->color() != that->color()) {
|
| fBatch.fColor = GrColor_ILLEGAL;
|
| }
|
| +
|
| + // In the event of two batches, one who can tweak, one who cannot, we just fall back to
|
| + // not tweaking
|
| + if (this->canTweakAlphaForCoverage() != that->canTweakAlphaForCoverage()) {
|
| + fBatch.fCanTweakAlphaForCoverage = false;
|
| + }
|
| +
|
| fGeoData.push_back_n(that->geoData()->count(), that->geoData()->begin());
|
| return true;
|
| }
|
| @@ -321,9 +309,9 @@ private:
|
| bool fUsesLocalCoords;
|
| bool fColorIgnored;
|
| bool fCoverageIgnored;
|
| + bool fCanTweakAlphaForCoverage;
|
| };
|
|
|
| - GrBatchOpt fBatchOpt;
|
| BatchTracker fBatch;
|
| const GrIndexBuffer* fIndexBuffer;
|
| SkSTArray<1, Geometry, true> fGeoData;
|
|
|