| Index: src/gpu/GrInOrderDrawBuffer.cpp
|
| diff --git a/src/gpu/GrInOrderDrawBuffer.cpp b/src/gpu/GrInOrderDrawBuffer.cpp
|
| index 7fc201fb0bcabda18c6f9c899151f000ef539d9b..624c77476367c113d88900bf63720d41aaf4395a 100644
|
| --- a/src/gpu/GrInOrderDrawBuffer.cpp
|
| +++ b/src/gpu/GrInOrderDrawBuffer.cpp
|
| @@ -324,24 +324,33 @@ void GrInOrderDrawBuffer::onDrawPath(const GrDrawState& ds,
|
|
|
| void GrInOrderDrawBuffer::onDrawPaths(const GrDrawState& ds,
|
| const GrPathRange* pathRange,
|
| - const uint32_t indices[],
|
| + const void* indices,
|
| + PathIndexType indexType,
|
| + const float transformValues[],
|
| + PathTransformType transformType,
|
| int count,
|
| - const float transforms[],
|
| - PathTransformType transformsType,
|
| const GrClipMaskManager::ScissorState& scissorState,
|
| const GrStencilSettings& stencilSettings,
|
| const GrDeviceCoordTexture* dstCopy) {
|
| SkASSERT(pathRange);
|
| SkASSERT(indices);
|
| - SkASSERT(transforms);
|
| + SkASSERT(transformValues);
|
|
|
| if (!this->recordStateAndShouldDraw(ds, GrGpu::kDrawPath_DrawType, scissorState, dstCopy)) {
|
| return;
|
| }
|
|
|
| - uint32_t* savedIndices = fPathIndexBuffer.append(count, indices);
|
| - float* savedTransforms = fPathTransformBuffer.append(count *
|
| - GrPathRendering::PathTransformSize(transformsType), transforms);
|
| + int indexBytes = GrPathRange::PathIndexSizeInBytes(indexType);
|
| + if (int misalign = fPathIndexBuffer.count() % indexBytes) {
|
| + // Add padding to the index buffer so the indices are aligned properly.
|
| + fPathIndexBuffer.append(indexBytes - misalign);
|
| + }
|
| +
|
| + char* savedIndices = fPathIndexBuffer.append(count * indexBytes,
|
| + reinterpret_cast<const char*>(indices));
|
| + float* savedTransforms = fPathTransformBuffer.append(
|
| + count * GrPathRendering::PathTransformSize(transformType),
|
| + transformValues);
|
|
|
| if (kDrawPaths_Cmd == strip_trace_bit(fCmdBuffer.back().fType)) {
|
| // The previous command was also DrawPaths. Try to collapse this call into the one
|
| @@ -353,7 +362,8 @@ void GrInOrderDrawBuffer::onDrawPaths(const GrDrawState& ds,
|
| // font tend to all wind in the same direction.
|
| DrawPaths* previous = static_cast<DrawPaths*>(&fCmdBuffer.back());
|
| if (pathRange == previous->pathRange() &&
|
| - transformsType == previous->fTransformsType &&
|
| + indexType == previous->fIndexType &&
|
| + transformType == previous->fTransformType &&
|
| stencilSettings == previous->fStencilSettings &&
|
| path_fill_type_is_winding(stencilSettings) &&
|
| !ds.willBlendWithDst()) {
|
| @@ -365,9 +375,10 @@ void GrInOrderDrawBuffer::onDrawPaths(const GrDrawState& ds,
|
|
|
| DrawPaths* dp = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, DrawPaths, (pathRange));
|
| dp->fIndicesLocation = savedIndices - fPathIndexBuffer.begin();
|
| - dp->fCount = count;
|
| + dp->fIndexType = indexType;
|
| dp->fTransformsLocation = savedTransforms - fPathTransformBuffer.begin();
|
| - dp->fTransformsType = transformsType;
|
| + dp->fTransformType = transformType;
|
| + dp->fCount = count;
|
| dp->fStencilSettings = stencilSettings;
|
|
|
| this->recordTraceMarkersIfNecessary();
|
| @@ -522,9 +533,9 @@ void GrInOrderDrawBuffer::DrawPaths::execute(GrInOrderDrawBuffer* buf,
|
| const GrOptDrawState* optState) {
|
| SkASSERT(optState);
|
| buf->fDstGpu->drawPaths(*optState, this->pathRange(),
|
| - &buf->fPathIndexBuffer[fIndicesLocation], fCount,
|
| - &buf->fPathTransformBuffer[fTransformsLocation], fTransformsType,
|
| - fStencilSettings);
|
| + &buf->fPathIndexBuffer[fIndicesLocation], fIndexType,
|
| + &buf->fPathTransformBuffer[fTransformsLocation], fTransformType,
|
| + fCount, fStencilSettings);
|
| }
|
|
|
| void GrInOrderDrawBuffer::SetState::execute(GrInOrderDrawBuffer*, const GrOptDrawState*) {}
|
|
|