| Index: src/gpu/GrInOrderDrawBuffer.cpp
 | 
| diff --git a/src/gpu/GrInOrderDrawBuffer.cpp b/src/gpu/GrInOrderDrawBuffer.cpp
 | 
| index 5b1f00891e991dc4cccafa02d93a03672ebd6c80..70d61ecfffba21ef67ab4c8bd1a8fdff53034770 100644
 | 
| --- a/src/gpu/GrInOrderDrawBuffer.cpp
 | 
| +++ b/src/gpu/GrInOrderDrawBuffer.cpp
 | 
| @@ -114,13 +114,13 @@ static inline uint8_t strip_trace_bit(uint8_t cmd) { return cmd & kCmdMask; }
 | 
|  
 | 
|  static inline bool cmd_has_trace_marker(uint8_t cmd) { return SkToBool(cmd & kTraceCmdBit); }
 | 
|  
 | 
| -void GrInOrderDrawBuffer::onDrawRect(GrDrawState* ds,
 | 
| +void GrInOrderDrawBuffer::onDrawRect(GrPipelineBuilder* pipelineBuilder,
 | 
|                                       GrColor color,
 | 
|                                       const SkMatrix& viewMatrix,
 | 
|                                       const SkRect& rect,
 | 
|                                       const SkRect* localRect,
 | 
|                                       const SkMatrix* localMatrix) {
 | 
| -    GrDrawState::AutoRestoreEffects are(ds);
 | 
| +    GrPipelineBuilder::AutoRestoreEffects are(pipelineBuilder);
 | 
|  
 | 
|      // Go to device coords to allow batching across matrix changes
 | 
|      SkMatrix invert = SkMatrix::I();
 | 
| @@ -183,10 +183,12 @@ void GrInOrderDrawBuffer::onDrawRect(GrDrawState* ds,
 | 
|      }
 | 
|  
 | 
|      this->setIndexSourceToBuffer(this->getContext()->getQuadIndexBuffer());
 | 
| -    this->drawIndexedInstances(ds, gp, kTriangles_GrPrimitiveType, 1, 4, 6, &devBounds);
 | 
| +    this->drawIndexedInstances(pipelineBuilder, gp, kTriangles_GrPrimitiveType, 1, 4, 6,
 | 
| +                               &devBounds);
 | 
|  }
 | 
|  
 | 
| -int GrInOrderDrawBuffer::concatInstancedDraw(const GrDrawState& ds, const DrawInfo& info) {
 | 
| +int GrInOrderDrawBuffer::concatInstancedDraw(const GrPipelineBuilder& pipelineBuilder,
 | 
| +                                             const DrawInfo& info) {
 | 
|      SkASSERT(!fCmdBuffer.empty());
 | 
|      SkASSERT(info.isInstanced());
 | 
|  
 | 
| @@ -238,20 +240,20 @@ int GrInOrderDrawBuffer::concatInstancedDraw(const GrDrawState& ds, const DrawIn
 | 
|      return instancesToConcat;
 | 
|  }
 | 
|  
 | 
| -void GrInOrderDrawBuffer::onDraw(const GrDrawState& ds,
 | 
| +void GrInOrderDrawBuffer::onDraw(const GrPipelineBuilder& pipelineBuilder,
 | 
|                                   const GrGeometryProcessor* gp,
 | 
|                                   const DrawInfo& info,
 | 
|                                   const GrScissorState& scissorState,
 | 
|                                   const GrDeviceCoordTexture* dstCopy) {
 | 
|      SkASSERT(info.vertexBuffer() && (!info.isIndexed() || info.indexBuffer()));
 | 
|  
 | 
| -    if (!this->recordStateAndShouldDraw(ds, gp, scissorState, dstCopy)) {
 | 
| +    if (!this->recordStateAndShouldDraw(pipelineBuilder, gp, scissorState, dstCopy)) {
 | 
|          return;
 | 
|      }
 | 
|  
 | 
|      Draw* draw;
 | 
|      if (info.isInstanced()) {
 | 
| -        int instancesConcated = this->concatInstancedDraw(ds, info);
 | 
| +        int instancesConcated = this->concatInstancedDraw(pipelineBuilder, info);
 | 
|          if (info.instanceCount() > instancesConcated) {
 | 
|              draw = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, Draw, (info));
 | 
|              draw->fInfo.adjustInstanceCount(-instancesConcated);
 | 
| @@ -264,28 +266,28 @@ void GrInOrderDrawBuffer::onDraw(const GrDrawState& ds,
 | 
|      this->recordTraceMarkersIfNecessary();
 | 
|  }
 | 
|  
 | 
| -void GrInOrderDrawBuffer::onStencilPath(const GrDrawState& ds,
 | 
| +void GrInOrderDrawBuffer::onStencilPath(const GrPipelineBuilder& pipelineBuilder,
 | 
|                                          const GrPathProcessor* pathProc,
 | 
|                                          const GrPath* path,
 | 
|                                          const GrScissorState& scissorState,
 | 
|                                          const GrStencilSettings& stencilSettings) {
 | 
|      StencilPath* sp = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, StencilPath,
 | 
| -                                               (path, ds.getRenderTarget()));
 | 
| +                                               (path, pipelineBuilder.getRenderTarget()));
 | 
|      sp->fScissor = scissorState;
 | 
| -    sp->fUseHWAA = ds.isHWAntialias();
 | 
| +    sp->fUseHWAA = pipelineBuilder.isHWAntialias();
 | 
|      sp->fViewMatrix = pathProc->viewMatrix();
 | 
|      sp->fStencil = stencilSettings;
 | 
|      this->recordTraceMarkersIfNecessary();
 | 
|  }
 | 
|  
 | 
| -void GrInOrderDrawBuffer::onDrawPath(const GrDrawState& ds,
 | 
| +void GrInOrderDrawBuffer::onDrawPath(const GrPipelineBuilder& pipelineBuilder,
 | 
|                                       const GrPathProcessor* pathProc,
 | 
|                                       const GrPath* path,
 | 
|                                       const GrScissorState& scissorState,
 | 
|                                       const GrStencilSettings& stencilSettings,
 | 
|                                       const GrDeviceCoordTexture* dstCopy) {
 | 
| -    // TODO: Only compare the subset of GrDrawState relevant to path covering?
 | 
| -    if (!this->recordStateAndShouldDraw(ds, pathProc, scissorState, dstCopy)) {
 | 
| +    // TODO: Only compare the subset of GrPipelineBuilder relevant to path covering?
 | 
| +    if (!this->recordStateAndShouldDraw(pipelineBuilder, pathProc, scissorState, dstCopy)) {
 | 
|          return;
 | 
|      }
 | 
|      DrawPath* dp = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, DrawPath, (path));
 | 
| @@ -293,7 +295,7 @@ void GrInOrderDrawBuffer::onDrawPath(const GrDrawState& ds,
 | 
|      this->recordTraceMarkersIfNecessary();
 | 
|  }
 | 
|  
 | 
| -void GrInOrderDrawBuffer::onDrawPaths(const GrDrawState& ds,
 | 
| +void GrInOrderDrawBuffer::onDrawPaths(const GrPipelineBuilder& pipelineBuilder,
 | 
|                                        const GrPathProcessor* pathProc,
 | 
|                                        const GrPathRange* pathRange,
 | 
|                                        const void* indices,
 | 
| @@ -308,7 +310,7 @@ void GrInOrderDrawBuffer::onDrawPaths(const GrDrawState& ds,
 | 
|      SkASSERT(indices);
 | 
|      SkASSERT(transformValues);
 | 
|  
 | 
| -    if (!this->recordStateAndShouldDraw(ds, pathProc, scissorState, dstCopy)) {
 | 
| +    if (!this->recordStateAndShouldDraw(pipelineBuilder, pathProc, scissorState, dstCopy)) {
 | 
|          return;
 | 
|      }
 | 
|  
 | 
| @@ -338,7 +340,7 @@ void GrInOrderDrawBuffer::onDrawPaths(const GrDrawState& ds,
 | 
|              transformType == previous->fTransformType &&
 | 
|              stencilSettings == previous->fStencilSettings &&
 | 
|              path_fill_type_is_winding(stencilSettings) &&
 | 
| -            !ds.willBlendWithDst(pathProc)) {
 | 
| +            !pipelineBuilder.willBlendWithDst(pathProc)) {
 | 
|              // Fold this DrawPaths call into the one previous.
 | 
|              previous->fCount += count;
 | 
|              return;
 | 
| @@ -430,8 +432,8 @@ void GrInOrderDrawBuffer::onFlush() {
 | 
|          if (kSetState_Cmd == strip_trace_bit(iter->fType)) {
 | 
|              SetState* ss = reinterpret_cast<SetState*>(iter.get());
 | 
|  
 | 
| -            this->getGpu()->buildProgramDesc(&ss->fDesc, *ss->fPrimitiveProcessor, ss->fState,
 | 
| -                                             ss->fState.descInfo(), ss->fBatchTracker);
 | 
| +            this->getGpu()->buildProgramDesc(&ss->fDesc, *ss->fPrimitiveProcessor, ss->fPipeline,
 | 
| +                                             ss->fPipeline.descInfo(), ss->fBatchTracker);
 | 
|              currentState = ss;
 | 
|  
 | 
|          } else {
 | 
| @@ -449,7 +451,7 @@ void GrInOrderDrawBuffer::onFlush() {
 | 
|  
 | 
|  void GrInOrderDrawBuffer::Draw::execute(GrInOrderDrawBuffer* buf, const SetState* state) {
 | 
|      SkASSERT(state);
 | 
| -    DrawArgs args(state->fPrimitiveProcessor.get(), &state->fState, &state->fDesc,
 | 
| +    DrawArgs args(state->fPrimitiveProcessor.get(), &state->fPipeline, &state->fDesc,
 | 
|                    &state->fBatchTracker);
 | 
|      buf->getGpu()->draw(args, fInfo);
 | 
|  }
 | 
| @@ -467,14 +469,14 @@ void GrInOrderDrawBuffer::StencilPath::execute(GrInOrderDrawBuffer* buf, const S
 | 
|  
 | 
|  void GrInOrderDrawBuffer::DrawPath::execute(GrInOrderDrawBuffer* buf, const SetState* state) {
 | 
|      SkASSERT(state);
 | 
| -    DrawArgs args(state->fPrimitiveProcessor.get(), &state->fState, &state->fDesc,
 | 
| +    DrawArgs args(state->fPrimitiveProcessor.get(), &state->fPipeline, &state->fDesc,
 | 
|                    &state->fBatchTracker);
 | 
|      buf->getGpu()->drawPath(args, this->path(), fStencilSettings);
 | 
|  }
 | 
|  
 | 
|  void GrInOrderDrawBuffer::DrawPaths::execute(GrInOrderDrawBuffer* buf, const SetState* state) {
 | 
|      SkASSERT(state);
 | 
| -    DrawArgs args(state->fPrimitiveProcessor.get(), &state->fState, &state->fDesc,
 | 
| +    DrawArgs args(state->fPrimitiveProcessor.get(), &state->fPipeline, &state->fDesc,
 | 
|                    &state->fBatchTracker);
 | 
|      buf->getGpu()->drawPaths(args, this->pathRange(),
 | 
|                              &buf->fPathIndexBuffer[fIndicesLocation], fIndexType,
 | 
| @@ -514,26 +516,26 @@ bool GrInOrderDrawBuffer::onCopySurface(GrSurface* dst,
 | 
|      return false;
 | 
|  }
 | 
|  
 | 
| -bool GrInOrderDrawBuffer::recordStateAndShouldDraw(const GrDrawState& ds,
 | 
| +bool GrInOrderDrawBuffer::recordStateAndShouldDraw(const GrPipelineBuilder& pipelineBuilder,
 | 
|                                                     const GrPrimitiveProcessor* primProc,
 | 
|                                                     const GrScissorState& scissor,
 | 
|                                                     const GrDeviceCoordTexture* dstCopy) {
 | 
|      SetState* ss = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, SetState,
 | 
| -                                            (ds, primProc, *this->getGpu()->caps(), scissor,
 | 
| -                                             dstCopy));
 | 
| -    if (ss->fState.mustSkip()) {
 | 
| +                                            (pipelineBuilder, primProc, *this->getGpu()->caps(),
 | 
| +                                             scissor, dstCopy));
 | 
| +    if (ss->fPipeline.mustSkip()) {
 | 
|          fCmdBuffer.pop_back();
 | 
|          return false;
 | 
|      }
 | 
|  
 | 
|      ss->fPrimitiveProcessor->initBatchTracker(&ss->fBatchTracker,
 | 
| -                                              ss->fState.getInitBatchTracker());
 | 
| +                                              ss->fPipeline.getInitBatchTracker());
 | 
|  
 | 
|      if (fPrevState &&
 | 
|          fPrevState->fPrimitiveProcessor->canMakeEqual(fPrevState->fBatchTracker,
 | 
|                                                        *ss->fPrimitiveProcessor,
 | 
|                                                        ss->fBatchTracker) &&
 | 
| -        fPrevState->fState.isEqual(ss->fState)) {
 | 
| +        fPrevState->fPipeline.isEqual(ss->fPipeline)) {
 | 
|          fCmdBuffer.pop_back();
 | 
|      } else {
 | 
|          fPrevState = ss;
 | 
| 
 |