Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #include "GrInOrderDrawBuffer.h" | 8 #include "GrInOrderDrawBuffer.h" |
| 9 | 9 |
| 10 #include "GrBufferAllocPool.h" | 10 #include "GrBufferAllocPool.h" |
| (...skipping 417 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 428 } | 428 } |
| 429 } | 429 } |
| 430 } | 430 } |
| 431 | 431 |
| 432 void GrInOrderDrawBuffer::reset() { | 432 void GrInOrderDrawBuffer::reset() { |
| 433 SkASSERT(1 == fGeoPoolStateStack.count()); | 433 SkASSERT(1 == fGeoPoolStateStack.count()); |
| 434 this->resetVertexSource(); | 434 this->resetVertexSource(); |
| 435 this->resetIndexSource(); | 435 this->resetIndexSource(); |
| 436 | 436 |
| 437 fCmdBuffer.reset(); | 437 fCmdBuffer.reset(); |
| 438 fLastState.reset(NULL); | 438 fLastState = NULL; |
| 439 fVertexPool.reset(); | 439 fVertexPool.reset(); |
| 440 fIndexPool.reset(); | 440 fIndexPool.reset(); |
| 441 reset_data_buffer(&fPathIndexBuffer, kPathIdxBufferMinReserve); | 441 reset_data_buffer(&fPathIndexBuffer, kPathIdxBufferMinReserve); |
| 442 reset_data_buffer(&fPathTransformBuffer, kPathXformBufferMinReserve); | 442 reset_data_buffer(&fPathTransformBuffer, kPathXformBufferMinReserve); |
| 443 fGpuCmdMarkers.reset(); | 443 fGpuCmdMarkers.reset(); |
| 444 } | 444 } |
| 445 | 445 |
| 446 void GrInOrderDrawBuffer::flush() { | 446 void GrInOrderDrawBuffer::flush() { |
| 447 if (fFlushing) { | 447 if (fFlushing) { |
| 448 return; | 448 return; |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 463 fVertexPool.unmap(); | 463 fVertexPool.unmap(); |
| 464 fIndexPool.unmap(); | 464 fIndexPool.unmap(); |
| 465 | 465 |
| 466 CmdBuffer::Iter iter(fCmdBuffer); | 466 CmdBuffer::Iter iter(fCmdBuffer); |
| 467 | 467 |
| 468 int currCmdMarker = 0; | 468 int currCmdMarker = 0; |
| 469 fDstGpu->saveActiveTraceMarkers(); | 469 fDstGpu->saveActiveTraceMarkers(); |
| 470 | 470 |
| 471 // Updated every time we find a set state cmd to reflect the current state i n the playback | 471 // Updated every time we find a set state cmd to reflect the current state i n the playback |
| 472 // stream. | 472 // stream. |
| 473 SkAutoTUnref<const GrOptDrawState> currentOptState; | 473 const GrOptDrawState* currentOptState = NULL; |
| 474 | 474 |
| 475 while (iter.next()) { | 475 while (iter.next()) { |
| 476 GrGpuTraceMarker newMarker("", -1); | 476 GrGpuTraceMarker newMarker("", -1); |
| 477 SkString traceString; | 477 SkString traceString; |
| 478 if (cmd_has_trace_marker(iter->fType)) { | 478 if (cmd_has_trace_marker(iter->fType)) { |
| 479 traceString = fGpuCmdMarkers[currCmdMarker].toString(); | 479 traceString = fGpuCmdMarkers[currCmdMarker].toString(); |
| 480 newMarker.fMarker = traceString.c_str(); | 480 newMarker.fMarker = traceString.c_str(); |
| 481 fDstGpu->addGpuTraceMarker(&newMarker); | 481 fDstGpu->addGpuTraceMarker(&newMarker); |
| 482 ++currCmdMarker; | 482 ++currCmdMarker; |
| 483 } | 483 } |
| 484 | 484 |
| 485 if (kSetState_Cmd == strip_trace_bit(iter->fType)) { | 485 if (kSetState_Cmd == strip_trace_bit(iter->fType)) { |
| 486 SetState* ss = reinterpret_cast<SetState*>(iter.get()); | 486 SetState* ss = reinterpret_cast<SetState*>(iter.get()); |
| 487 currentOptState.reset(SkRef(ss->fState.get())); | 487 currentOptState = &ss->fState; |
| 488 } else { | 488 } else { |
| 489 iter->execute(this, currentOptState.get()); | 489 iter->execute(this, currentOptState); |
| 490 } | 490 } |
| 491 | 491 |
| 492 if (cmd_has_trace_marker(iter->fType)) { | 492 if (cmd_has_trace_marker(iter->fType)) { |
| 493 fDstGpu->removeGpuTraceMarker(&newMarker); | 493 fDstGpu->removeGpuTraceMarker(&newMarker); |
| 494 } | 494 } |
| 495 } | 495 } |
| 496 | 496 |
| 497 fDstGpu->restoreActiveTraceMarkers(); | 497 fDstGpu->restoreActiveTraceMarkers(); |
| 498 SkASSERT(fGpuCmdMarkers.count() == currCmdMarker); | 498 SkASSERT(fGpuCmdMarkers.count() == currCmdMarker); |
| 499 | 499 |
| 500 this->reset(); | 500 this->reset(); |
| 501 ++fDrawID; | 501 ++fDrawID; |
| 502 } | 502 } |
| 503 | 503 |
| 504 void GrInOrderDrawBuffer::Draw::execute(GrInOrderDrawBuffer* buf, const GrOptDra wState* optState) { | 504 void GrInOrderDrawBuffer::Draw::execute(GrInOrderDrawBuffer* buf, const GrOptDra wState* optState) { |
| 505 SkASSERT(optState); | |
| 505 buf->fDstGpu->draw(*optState, fInfo); | 506 buf->fDstGpu->draw(*optState, fInfo); |
| 506 } | 507 } |
| 507 | 508 |
| 508 void GrInOrderDrawBuffer::StencilPath::execute(GrInOrderDrawBuffer* buf, | 509 void GrInOrderDrawBuffer::StencilPath::execute(GrInOrderDrawBuffer* buf, |
| 509 const GrOptDrawState* optState) { | 510 const GrOptDrawState* optState) { |
| 511 SkASSERT(optState); | |
| 510 buf->fDstGpu->stencilPath(*optState, this->path(), fStencilSettings); | 512 buf->fDstGpu->stencilPath(*optState, this->path(), fStencilSettings); |
| 511 } | 513 } |
| 512 | 514 |
| 513 void GrInOrderDrawBuffer::DrawPath::execute(GrInOrderDrawBuffer* buf, | 515 void GrInOrderDrawBuffer::DrawPath::execute(GrInOrderDrawBuffer* buf, |
| 514 const GrOptDrawState* optState) { | 516 const GrOptDrawState* optState) { |
| 517 SkASSERT(optState); | |
| 515 buf->fDstGpu->drawPath(*optState, this->path(), fStencilSettings); | 518 buf->fDstGpu->drawPath(*optState, this->path(), fStencilSettings); |
| 516 } | 519 } |
| 517 | 520 |
| 518 void GrInOrderDrawBuffer::DrawPaths::execute(GrInOrderDrawBuffer* buf, | 521 void GrInOrderDrawBuffer::DrawPaths::execute(GrInOrderDrawBuffer* buf, |
| 519 const GrOptDrawState* optState) { | 522 const GrOptDrawState* optState) { |
| 523 SkASSERT(optState); | |
| 520 buf->fDstGpu->drawPaths(*optState, this->pathRange(), | 524 buf->fDstGpu->drawPaths(*optState, this->pathRange(), |
| 521 &buf->fPathIndexBuffer[fIndicesLocation], fCount, | 525 &buf->fPathIndexBuffer[fIndicesLocation], fCount, |
| 522 &buf->fPathTransformBuffer[fTransformsLocation], fTr ansformsType, | 526 &buf->fPathTransformBuffer[fTransformsLocation], fTr ansformsType, |
| 523 fStencilSettings); | 527 fStencilSettings); |
| 524 } | 528 } |
| 525 | 529 |
| 526 void GrInOrderDrawBuffer::SetState::execute(GrInOrderDrawBuffer*, const GrOptDra wState*) { | 530 void GrInOrderDrawBuffer::SetState::execute(GrInOrderDrawBuffer*, const GrOptDra wState*) { } |
|
egdaniel
2014/11/21 22:26:24
extra space in { }
bsalomon
2014/11/24 14:36:57
Done.
| |
| 527 } | |
| 528 | 531 |
| 529 void GrInOrderDrawBuffer::Clear::execute(GrInOrderDrawBuffer* buf, const GrOptDr awState*) { | 532 void GrInOrderDrawBuffer::Clear::execute(GrInOrderDrawBuffer* buf, const GrOptDr awState*) { |
| 530 if (GrColor_ILLEGAL == fColor) { | 533 if (GrColor_ILLEGAL == fColor) { |
| 531 buf->fDstGpu->discard(this->renderTarget()); | 534 buf->fDstGpu->discard(this->renderTarget()); |
| 532 } else { | 535 } else { |
| 533 buf->fDstGpu->clear(&fRect, fColor, fCanIgnoreRect, this->renderTarget() ); | 536 buf->fDstGpu->clear(&fRect, fColor, fCanIgnoreRect, this->renderTarget() ); |
| 534 } | 537 } |
| 535 } | 538 } |
| 536 | 539 |
| 537 void GrInOrderDrawBuffer::ClearStencilClip::execute(GrInOrderDrawBuffer* buf, | 540 void GrInOrderDrawBuffer::ClearStencilClip::execute(GrInOrderDrawBuffer* buf, |
| (...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 720 } | 723 } |
| 721 if (kReserved_GeometrySrcType == restoredState.fIndexSrc) { | 724 if (kReserved_GeometrySrcType == restoredState.fIndexSrc) { |
| 722 poolState.fUsedPoolIndexBytes = sizeof(uint16_t) * restoredState.fIndexC ount; | 725 poolState.fUsedPoolIndexBytes = sizeof(uint16_t) * restoredState.fIndexC ount; |
| 723 } | 726 } |
| 724 } | 727 } |
| 725 | 728 |
| 726 bool GrInOrderDrawBuffer::recordStateAndShouldDraw(const GrDrawState& ds, | 729 bool GrInOrderDrawBuffer::recordStateAndShouldDraw(const GrDrawState& ds, |
| 727 GrGpu::DrawType drawType, | 730 GrGpu::DrawType drawType, |
| 728 const GrClipMaskManager::Scis sorState& scissor, | 731 const GrClipMaskManager::Scis sorState& scissor, |
| 729 const GrDeviceCoordTexture* d stCopy) { | 732 const GrDeviceCoordTexture* d stCopy) { |
| 730 SkAutoTUnref<GrOptDrawState> optState( | 733 SetState* ss = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, SetState, |
| 731 SkNEW_ARGS(GrOptDrawState, (ds, fDstGpu, scissor, dstCopy, drawType))); | 734 (ds, fDstGpu, scissor, dstCopy, draw Type)); |
| 732 if (optState->mustSkip()) { | 735 if (ss->fState.mustSkip()) { |
| 736 fCmdBuffer.pop_back(); | |
| 733 return false; | 737 return false; |
| 734 } | 738 } |
| 735 if (!fLastState || *optState != *fLastState) { | 739 if (fLastState && *fLastState == ss->fState) { |
| 736 SetState* ss = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, SetState, (optState) ); | 740 fCmdBuffer.pop_back(); |
| 737 fLastState.reset(SkRef(optState.get())); | 741 } else { |
| 738 ss->fDrawType = drawType; | 742 fLastState = &ss->fState; |
| 739 this->recordTraceMarkersIfNecessary(); | 743 this->recordTraceMarkersIfNecessary(); |
| 740 } | 744 } |
| 741 return true; | 745 return true; |
| 742 } | 746 } |
| 743 | 747 |
| 744 void GrInOrderDrawBuffer::recordTraceMarkersIfNecessary() { | 748 void GrInOrderDrawBuffer::recordTraceMarkersIfNecessary() { |
| 745 SkASSERT(!fCmdBuffer.empty()); | 749 SkASSERT(!fCmdBuffer.empty()); |
| 746 SkASSERT(!cmd_has_trace_marker(fCmdBuffer.back().fType)); | 750 SkASSERT(!cmd_has_trace_marker(fCmdBuffer.back().fType)); |
| 747 const GrTraceMarkerSet& activeTraceMarkers = this->getActiveTraceMarkers(); | 751 const GrTraceMarkerSet& activeTraceMarkers = this->getActiveTraceMarkers(); |
| 748 if (activeTraceMarkers.count() > 0) { | 752 if (activeTraceMarkers.count() > 0) { |
| 749 fCmdBuffer.back().fType = add_trace_bit(fCmdBuffer.back().fType); | 753 fCmdBuffer.back().fType = add_trace_bit(fCmdBuffer.back().fType); |
| 750 fGpuCmdMarkers.push_back(activeTraceMarkers); | 754 fGpuCmdMarkers.push_back(activeTraceMarkers); |
| 751 } | 755 } |
| 752 } | 756 } |
| OLD | NEW |