BUG=skia:

Review URL: https://codereview.chromium.org/815643005
diff --git a/src/gpu/GrInOrderDrawBuffer.h b/src/gpu/GrInOrderDrawBuffer.h
index d733546..6a6cd88 100644
--- a/src/gpu/GrInOrderDrawBuffer.h
+++ b/src/gpu/GrInOrderDrawBuffer.h
@@ -51,6 +51,7 @@
     void discard(GrRenderTarget*) SK_OVERRIDE;
 
 private:
+    typedef GrGpu::DrawArgs DrawArgs;
     enum {
         kDraw_Cmd           = 1,
         kStencilPath_Cmd    = 2,
@@ -61,11 +62,13 @@
         kDrawPaths_Cmd      = 7,
     };
 
+    struct SetState;
+
     struct Cmd : ::SkNoncopyable {
         Cmd(uint8_t type) : fType(type) {}
         virtual ~Cmd() {}
 
-        virtual void execute(GrInOrderDrawBuffer*, const GrOptDrawState*) = 0;
+        virtual void execute(GrInOrderDrawBuffer*, const SetState*) = 0;
 
         uint8_t fType;
     };
@@ -73,7 +76,7 @@
     struct Draw : public Cmd {
         Draw(const DrawInfo& info) : Cmd(kDraw_Cmd), fInfo(info) {}
 
-        void execute(GrInOrderDrawBuffer*, const GrOptDrawState*) SK_OVERRIDE;
+        void execute(GrInOrderDrawBuffer*, const SetState*) SK_OVERRIDE;
 
         DrawInfo     fInfo;
     };
@@ -86,7 +89,7 @@
 
         const GrPath* path() const { return fPath.get(); }
 
-        void execute(GrInOrderDrawBuffer*, const GrOptDrawState*) SK_OVERRIDE;
+        void execute(GrInOrderDrawBuffer*, const SetState*) SK_OVERRIDE;
 
         SkMatrix                                                fViewMatrix;
         bool                                                    fUseHWAA;
@@ -102,7 +105,7 @@
 
         const GrPath* path() const { return fPath.get(); }
 
-        void execute(GrInOrderDrawBuffer*, const GrOptDrawState*) SK_OVERRIDE;
+        void execute(GrInOrderDrawBuffer*, const SetState*) SK_OVERRIDE;
 
         GrStencilSettings       fStencilSettings;
 
@@ -115,7 +118,7 @@
 
         const GrPathRange* pathRange() const { return fPathRange.get();  }
 
-        void execute(GrInOrderDrawBuffer*, const GrOptDrawState*) SK_OVERRIDE;
+        void execute(GrInOrderDrawBuffer*, const SetState*) SK_OVERRIDE;
 
         int                     fIndicesLocation;
         PathIndexType           fIndexType;
@@ -134,7 +137,7 @@
 
         GrRenderTarget* renderTarget() const { return fRenderTarget.get(); }
 
-        void execute(GrInOrderDrawBuffer*, const GrOptDrawState*) SK_OVERRIDE;
+        void execute(GrInOrderDrawBuffer*, const SetState*) SK_OVERRIDE;
 
         SkIRect fRect;
         GrColor fColor;
@@ -150,7 +153,7 @@
 
         GrRenderTarget* renderTarget() const { return fRenderTarget.get(); }
 
-        void execute(GrInOrderDrawBuffer*, const GrOptDrawState*) SK_OVERRIDE;
+        void execute(GrInOrderDrawBuffer*, const SetState*) SK_OVERRIDE;
 
         SkIRect fRect;
         bool    fInsideClip;
@@ -165,7 +168,7 @@
         GrSurface* dst() const { return fDst.get(); }
         GrSurface* src() const { return fSrc.get(); }
 
-        void execute(GrInOrderDrawBuffer*, const GrOptDrawState*) SK_OVERRIDE;
+        void execute(GrInOrderDrawBuffer*, const SetState*) SK_OVERRIDE;
 
         SkIPoint    fDstPoint;
         SkIRect     fSrcRect;
@@ -181,11 +184,16 @@
                  const GrScissorState& scissor, const GrDeviceCoordTexture* dstCopy,
                  GrGpu::DrawType drawType)
         : Cmd(kSetState_Cmd)
+        , fPrimitiveProcessor(primProc)
         , fState(drawState, primProc, caps, scissor, dstCopy, drawType) {}
 
-        void execute(GrInOrderDrawBuffer*, const GrOptDrawState*) SK_OVERRIDE;
+        void execute(GrInOrderDrawBuffer*, const SetState*) SK_OVERRIDE;
 
-        GrOptDrawState          fState;
+        typedef GrPendingProgramElement<const GrPrimitiveProcessor> ProgramPrimitiveProcessor;
+        ProgramPrimitiveProcessor   fPrimitiveProcessor;
+        const GrOptDrawState        fState;
+        GrProgramDesc               fDesc;
+        GrBatchTracker              fBatchTracker;
     };
 
     typedef void* TCmdAlign; // This wouldn't be enough align if a command used long double.
@@ -265,7 +273,7 @@
     };
 
     CmdBuffer                           fCmdBuffer;
-    GrOptDrawState*                     fPrevState;
+    SetState*                           fPrevState;
     SkTArray<GrTraceMarkerSet, false>   fGpuCmdMarkers;
     SkTDArray<char>                     fPathIndexBuffer;
     SkTDArray<float>                    fPathTransformBuffer;