| Index: src/gpu/GrInOrderDrawBuffer.cpp
 | 
| diff --git a/src/gpu/GrInOrderDrawBuffer.cpp b/src/gpu/GrInOrderDrawBuffer.cpp
 | 
| index 7535a8d0617cb4d4211acce6313846db167bd7e5..e5d67952147866cfe221b3cfb4ca20263daa7ac5 100644
 | 
| --- a/src/gpu/GrInOrderDrawBuffer.cpp
 | 
| +++ b/src/gpu/GrInOrderDrawBuffer.cpp
 | 
| @@ -190,9 +190,7 @@ void GrInOrderDrawBuffer::onDrawRect(GrDrawState* ds,
 | 
|      this->drawIndexedInstances(ds, kTriangles_GrPrimitiveType, 1, 4, 6, &devBounds);
 | 
|  }
 | 
|  
 | 
| -int GrInOrderDrawBuffer::concatInstancedDraw(const GrDrawState& ds,
 | 
| -                                             const DrawInfo& info,
 | 
| -                                             const GrClipMaskManager::ScissorState& scissorState) {
 | 
| +int GrInOrderDrawBuffer::concatInstancedDraw(const GrDrawState& ds, const DrawInfo& info) {
 | 
|      SkASSERT(!fCmdBuffer.empty());
 | 
|      SkASSERT(info.isInstanced());
 | 
|  
 | 
| @@ -219,8 +217,7 @@ int GrInOrderDrawBuffer::concatInstancedDraw(const GrDrawState& ds,
 | 
|          draw->fInfo.verticesPerInstance() != info.verticesPerInstance() ||
 | 
|          draw->fInfo.indicesPerInstance() != info.indicesPerInstance() ||
 | 
|          draw->fInfo.vertexBuffer() != vertexBuffer ||
 | 
| -        draw->fInfo.indexBuffer() != geomSrc.fIndexBuffer ||
 | 
| -        draw->fScissorState != scissorState) {
 | 
| +        draw->fInfo.indexBuffer() != geomSrc.fIndexBuffer) {
 | 
|          return 0;
 | 
|      }
 | 
|      // info does not yet account for the offset from the start of the pool's VB while the previous
 | 
| @@ -258,27 +255,27 @@ int GrInOrderDrawBuffer::concatInstancedDraw(const GrDrawState& ds,
 | 
|  
 | 
|  void GrInOrderDrawBuffer::onDraw(const GrDrawState& ds,
 | 
|                                   const DrawInfo& info,
 | 
| -                                 const GrClipMaskManager::ScissorState& scissorState) {
 | 
| +                                 const ScissorState& scissorState) {
 | 
|      SkASSERT(info.vertexBuffer() && (!info.isIndexed() || info.indexBuffer()));
 | 
|  
 | 
|      GeometryPoolState& poolState = fGeoPoolStateStack.back();
 | 
|  
 | 
|      if (!this->recordStateAndShouldDraw(ds, GrGpu::PrimTypeToDrawType(info.primitiveType()),
 | 
| -                                        info.getDstCopy())) {
 | 
| +                                        scissorState, info.getDstCopy())) {
 | 
|          return;
 | 
|      }
 | 
|  
 | 
|      Draw* draw;
 | 
|      if (info.isInstanced()) {
 | 
| -        int instancesConcated = this->concatInstancedDraw(ds, info, scissorState);
 | 
| +        int instancesConcated = this->concatInstancedDraw(ds, info);
 | 
|          if (info.instanceCount() > instancesConcated) {
 | 
| -            draw = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, Draw, (info, scissorState));
 | 
| +            draw = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, Draw, (info));
 | 
|              draw->fInfo.adjustInstanceCount(-instancesConcated);
 | 
|          } else {
 | 
|              return;
 | 
|          }
 | 
|      } else {
 | 
| -        draw = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, Draw, (info, scissorState));
 | 
| +        draw = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, Draw, (info));
 | 
|      }
 | 
|      this->recordTraceMarkersIfNecessary();
 | 
|  
 | 
| @@ -302,11 +299,10 @@ void GrInOrderDrawBuffer::onStencilPath(const GrDrawState& ds,
 | 
|                                          const GrClipMaskManager::ScissorState& scissorState,
 | 
|                                          const GrStencilSettings& stencilSettings) {
 | 
|      // Only compare the subset of GrDrawState relevant to path stenciling?
 | 
| -    if (!this->recordStateAndShouldDraw(ds, GrGpu::kStencilPath_DrawType, NULL)) {
 | 
| +    if (!this->recordStateAndShouldDraw(ds, GrGpu::kStencilPath_DrawType, scissorState, NULL)) {
 | 
|          return;
 | 
|      }
 | 
|      StencilPath* sp = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, StencilPath, (path));
 | 
| -    sp->fScissorState = scissorState;
 | 
|      sp->fStencilSettings = stencilSettings;
 | 
|      this->recordTraceMarkersIfNecessary();
 | 
|  }
 | 
| @@ -317,14 +313,13 @@ void GrInOrderDrawBuffer::onDrawPath(const GrDrawState& ds,
 | 
|                                       const GrStencilSettings& stencilSettings,
 | 
|                                       const GrDeviceCoordTexture* dstCopy) {
 | 
|      // TODO: Only compare the subset of GrDrawState relevant to path covering?
 | 
| -    if (!this->recordStateAndShouldDraw(ds, GrGpu::kDrawPath_DrawType, dstCopy)) {
 | 
| +    if (!this->recordStateAndShouldDraw(ds, GrGpu::kDrawPath_DrawType, scissorState, dstCopy)) {
 | 
|          return;
 | 
|      }
 | 
|      DrawPath* dp = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, DrawPath, (path));
 | 
|      if (dstCopy) {
 | 
|          dp->fDstCopy = *dstCopy;
 | 
|      }
 | 
| -    dp->fScissorState = scissorState;
 | 
|      dp->fStencilSettings = stencilSettings;
 | 
|      this->recordTraceMarkersIfNecessary();
 | 
|  }
 | 
| @@ -342,7 +337,7 @@ void GrInOrderDrawBuffer::onDrawPaths(const GrDrawState& ds,
 | 
|      SkASSERT(indices);
 | 
|      SkASSERT(transforms);
 | 
|  
 | 
| -    if (!this->recordStateAndShouldDraw(ds, GrGpu::kDrawPath_DrawType, dstCopy)) {
 | 
| +    if (!this->recordStateAndShouldDraw(ds, GrGpu::kDrawPath_DrawType, scissorState, dstCopy)) {
 | 
|          return;
 | 
|      }
 | 
|  
 | 
| @@ -361,7 +356,6 @@ void GrInOrderDrawBuffer::onDrawPaths(const GrDrawState& ds,
 | 
|          DrawPaths* previous = static_cast<DrawPaths*>(&fCmdBuffer.back());
 | 
|          if (pathRange == previous->pathRange() &&
 | 
|              transformsType == previous->fTransformsType &&
 | 
| -            scissorState == previous->fScissorState &&
 | 
|              stencilSettings == previous->fStencilSettings &&
 | 
|              path_fill_type_is_winding(stencilSettings) &&
 | 
|              !ds.willBlendWithDst()) {
 | 
| @@ -376,7 +370,6 @@ void GrInOrderDrawBuffer::onDrawPaths(const GrDrawState& ds,
 | 
|      dp->fCount = count;
 | 
|      dp->fTransformsLocation = savedTransforms - fPathTransformBuffer.begin();
 | 
|      dp->fTransformsType = transformsType;
 | 
| -    dp->fScissorState = scissorState;
 | 
|      dp->fStencilSettings = stencilSettings;
 | 
|      if (dstCopy) {
 | 
|          dp->fDstCopy = *dstCopy;
 | 
| @@ -514,17 +507,17 @@ void GrInOrderDrawBuffer::flush() {
 | 
|  }
 | 
|  
 | 
|  void GrInOrderDrawBuffer::Draw::execute(GrInOrderDrawBuffer* buf, const GrOptDrawState* optState) {
 | 
| -    buf->fDstGpu->draw(*optState, fInfo, fScissorState);
 | 
| +    buf->fDstGpu->draw(*optState, fInfo);
 | 
|  }
 | 
|  
 | 
|  void GrInOrderDrawBuffer::StencilPath::execute(GrInOrderDrawBuffer* buf,
 | 
|                                                 const GrOptDrawState* optState) {
 | 
| -    buf->fDstGpu->stencilPath(*optState, this->path(), fScissorState, fStencilSettings);
 | 
| +    buf->fDstGpu->stencilPath(*optState, this->path(), fStencilSettings);
 | 
|  }
 | 
|  
 | 
|  void GrInOrderDrawBuffer::DrawPath::execute(GrInOrderDrawBuffer* buf,
 | 
|                                              const GrOptDrawState* optState) {
 | 
| -    buf->fDstGpu->drawPath(*optState, this->path(), fScissorState, fStencilSettings,
 | 
| +    buf->fDstGpu->drawPath(*optState, this->path(), fStencilSettings,
 | 
|                             fDstCopy.texture() ? &fDstCopy : NULL);
 | 
|  }
 | 
|  
 | 
| @@ -533,7 +526,7 @@ void GrInOrderDrawBuffer::DrawPaths::execute(GrInOrderDrawBuffer* buf,
 | 
|      buf->fDstGpu->drawPaths(*optState, this->pathRange(),
 | 
|                              &buf->fPathIndexBuffer[fIndicesLocation], fCount,
 | 
|                              &buf->fPathTransformBuffer[fTransformsLocation], fTransformsType,
 | 
| -                            fScissorState, fStencilSettings, fDstCopy.texture() ? &fDstCopy : NULL);
 | 
| +                            fStencilSettings, fDstCopy.texture() ? &fDstCopy : NULL);
 | 
|  }
 | 
|  
 | 
|  void GrInOrderDrawBuffer::SetState::execute(GrInOrderDrawBuffer*, const GrOptDrawState*) {
 | 
| @@ -738,8 +731,10 @@ void GrInOrderDrawBuffer::geometrySourceWillPop(const GeometrySrcState& restored
 | 
|  
 | 
|  bool GrInOrderDrawBuffer::recordStateAndShouldDraw(const GrDrawState& ds,
 | 
|                                                     GrGpu::DrawType drawType,
 | 
| +                                                   const GrClipMaskManager::ScissorState& scissor,
 | 
|                                                     const GrDeviceCoordTexture* dstCopy) {
 | 
| -    SkAutoTUnref<GrOptDrawState> optState(GrOptDrawState::Create(ds, fDstGpu, dstCopy, drawType));
 | 
| +    SkAutoTUnref<GrOptDrawState> optState(GrOptDrawState::Create(ds, fDstGpu, scissor, dstCopy,
 | 
| +                                                                 drawType));
 | 
|      if (!optState) {
 | 
|          return false;
 | 
|      }
 | 
| 
 |