Propagated AA flags through Ganesh's clip stack (in preparation for GL AA clipping)

http://codereview.appspot.com/6038051/



git-svn-id: http://skia.googlecode.com/svn/trunk@3685 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/gpu/GrClip.cpp b/src/gpu/GrClip.cpp
index a02d9f4..87d58c4 100644
--- a/src/gpu/GrClip.cpp
+++ b/src/gpu/GrClip.cpp
@@ -10,7 +10,8 @@
 
 #include "GrClip.h"
 
-GrClip::GrClip() {
+GrClip::GrClip() 
+    : fRequiresAA(false) {
     fConservativeBounds.setEmpty();
     fConservativeBoundsValid = true;
 }
@@ -38,6 +39,7 @@
     fList = src.fList;
     fConservativeBounds = src.fConservativeBounds;
     fConservativeBoundsValid = src.fConservativeBoundsValid;
+    fRequiresAA = src.fRequiresAA;
     return *this;
 }
 
@@ -45,6 +47,7 @@
     fList.reset();
     fConservativeBounds.setEmpty();
     fConservativeBoundsValid = true;
+    fRequiresAA = false;
 }
 
 void GrClip::setFromRect(const GrRect& r) {
@@ -57,6 +60,7 @@
         fList.back().fRect = r;
         fList.back().fType = kRect_ClipType;
         fList.back().fOp = kReplace_SetOp;
+        fList.back().fDoAA = false;
         fConservativeBounds = r;
         fConservativeBoundsValid = true;
     }
@@ -72,6 +76,7 @@
         fList.back().fRect.set(r);
         fList.back().fType = kRect_ClipType;
         fList.back().fOp = kReplace_SetOp;
+        fList.back().fDoAA = false;
         fConservativeBounds.set(r);
         fConservativeBoundsValid = true;
     }
@@ -86,6 +91,7 @@
 void GrClip::setFromIterator(GrClipIterator* iter, GrScalar tx, GrScalar ty,
                              const GrRect* conservativeBounds) {
     fList.reset();
+    fRequiresAA = false;
 
     int rectCount = 0;
 
@@ -97,6 +103,10 @@
             Element& e = fList.push_back();
             e.fType = iter->getType();
             e.fOp = iter->getOp();
+            e.fDoAA = iter->getDoAA();
+            if (e.fDoAA) {
+                fRequiresAA = true;
+            }
             // iterators should not emit replace
             GrAssert(kReplace_SetOp != e.fOp);
             switch (e.fType) {
diff --git a/src/gpu/SkGr.cpp b/src/gpu/SkGr.cpp
index ba98e06..c832b20 100644
--- a/src/gpu/SkGr.cpp
+++ b/src/gpu/SkGr.cpp
@@ -181,6 +181,10 @@
     return skToGrOps[fCurr->fOp];
 }
 
+bool SkGrClipIterator::getDoAA() const {
+    return fCurr->fDoAA;
+}
+
 GrPathFill SkGrClipIterator::getPathFill() const {
     switch (fCurr->fPath->getFillType()) {
         case SkPath::kWinding_FillType: