Calculate stage stats in GrOptDrawState

BUG=skia:
R=bsalomon@google.com

Author: egdaniel@google.com

Review URL: https://codereview.chromium.org/545693004
diff --git a/src/gpu/GrOptDrawState.h b/src/gpu/GrOptDrawState.h
index 457f035..9c9bf94 100644
--- a/src/gpu/GrOptDrawState.h
+++ b/src/gpu/GrOptDrawState.h
@@ -23,6 +23,11 @@
     bool inputColorIsUsed() const { return fInputColorIsUsed; }
     bool inputCoverageIsUsed() const { return fInputCoverageIsUsed; }
 
+    bool readsDst() const { return fReadsDst; }
+    bool readsFragPosition() const { return fReadsFragPosition; }
+    bool requiresVertexShader() const { return fRequiresVertexShader; }
+    bool requiresLocalCoordAttrib() const { return fRequiresLocalCoordAttrib; }
+
 private:
     /**
      * Constructs and optimized drawState out of a GrRODrawState.
@@ -61,11 +66,23 @@
      */
     void adjustFromBlendOpts();
 
+    /**
+     * Loop over the effect stages to determine various info like what data they will read and what
+     * shaders they require.
+     */
+    void getStageStats();
+
     // These flags are needed to protect the code from creating an unused uniform color/coverage
     // which will cause shader compiler errors.
     bool            fInputColorIsUsed;
     bool            fInputCoverageIsUsed;
 
+    // These flags give aggregated info on the effect stages that are used when building programs.
+    bool            fReadsDst;
+    bool            fReadsFragPosition;
+    bool            fRequiresVertexShader;
+    bool            fRequiresLocalCoordAttrib;
+
     SkAutoSTArray<4, GrVertexAttrib> fOptVA;
 
     BlendOptFlags   fBlendOptFlags;