Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(888)

Side by Side Diff: src/gpu/GrInOrderDrawBuffer.cpp

Issue 963183002: Increase GrInOrderDrawBuffer's encapsulation of trace markers (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Fix constness Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/gpu/GrInOrderDrawBuffer.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 17 matching lines...) Expand all
28 , fDrawBatch(NULL) { 28 , fDrawBatch(NULL) {
29 29
30 SkASSERT(vertexPool); 30 SkASSERT(vertexPool);
31 SkASSERT(indexPool); 31 SkASSERT(indexPool);
32 } 32 }
33 33
34 GrInOrderDrawBuffer::~GrInOrderDrawBuffer() { 34 GrInOrderDrawBuffer::~GrInOrderDrawBuffer() {
35 this->reset(); 35 this->reset();
36 } 36 }
37 37
38 void GrInOrderDrawBuffer::closeBatch() {
39 if (fDrawBatch) {
40 fBatchTarget.resetNumberOfDraws();
41 fDrawBatch->execute(this->getGpu(), fPrevState);
42 fDrawBatch->fBatch->setNumberOfDraws(fBatchTarget.numberOfDraws());
43 fDrawBatch = NULL;
44 }
45 }
46
38 //////////////////////////////////////////////////////////////////////////////// 47 ////////////////////////////////////////////////////////////////////////////////
39 48
40 /** We always use per-vertex colors so that rects can be batched across color ch anges. Sometimes we 49 /** We always use per-vertex colors so that rects can be batched across color ch anges. Sometimes we
41 have explicit local coords and sometimes not. We *could* always provide expl icit local coords 50 have explicit local coords and sometimes not. We *could* always provide expl icit local coords
42 and just duplicate the positions when the caller hasn't provided a local coo rd rect, but we 51 and just duplicate the positions when the caller hasn't provided a local coo rd rect, but we
43 haven't seen a use case which frequently switches between local rect and no local rect draws. 52 haven't seen a use case which frequently switches between local rect and no local rect draws.
44 53
45 The color param is used to determine whether the opaque hint can be set on t he draw state. 54 The color param is used to determine whether the opaque hint can be set on t he draw state.
46 The caller must populate the vertex colors itself. 55 The caller must populate the vertex colors itself.
47 56
(...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after
347 } 356 }
348 357
349 // how many instances can be concat'ed onto draw given the size of the index buffer 358 // how many instances can be concat'ed onto draw given the size of the index buffer
350 int instancesToConcat = this->indexCountInCurrentSource() / info.indicesPerI nstance(); 359 int instancesToConcat = this->indexCountInCurrentSource() / info.indicesPerI nstance();
351 instancesToConcat -= draw->fInfo.instanceCount(); 360 instancesToConcat -= draw->fInfo.instanceCount();
352 instancesToConcat = SkTMin(instancesToConcat, info.instanceCount()); 361 instancesToConcat = SkTMin(instancesToConcat, info.instanceCount());
353 362
354 draw->fInfo.adjustInstanceCount(instancesToConcat); 363 draw->fInfo.adjustInstanceCount(instancesToConcat);
355 364
356 // update last fGpuCmdMarkers to include any additional trace markers that h ave been added 365 // update last fGpuCmdMarkers to include any additional trace markers that h ave been added
357 if (this->getActiveTraceMarkers().count() > 0) { 366 this->recordTraceMarkersIfNecessary(draw);
358 if (draw->isTraced()) {
359 fGpuCmdMarkers.back().addSet(this->getActiveTraceMarkers());
360 } else {
361 fGpuCmdMarkers.push_back(this->getActiveTraceMarkers());
362 draw->makeTraced();
363 }
364 }
365
366 return instancesToConcat; 367 return instancesToConcat;
367 } 368 }
368 369
369 void GrInOrderDrawBuffer::onDraw(const GrGeometryProcessor* gp, 370 void GrInOrderDrawBuffer::onDraw(const GrGeometryProcessor* gp,
370 const DrawInfo& info, 371 const DrawInfo& info,
371 const PipelineInfo& pipelineInfo) { 372 const PipelineInfo& pipelineInfo) {
372 SkASSERT(info.vertexBuffer() && (!info.isIndexed() || info.indexBuffer())); 373 SkASSERT(info.vertexBuffer() && (!info.isIndexed() || info.indexBuffer()));
373 this->closeBatch(); 374 this->closeBatch();
374 375
375 if (!this->setupPipelineAndShouldDraw(gp, pipelineInfo)) { 376 if (!this->setupPipelineAndShouldDraw(gp, pipelineInfo)) {
376 return; 377 return;
377 } 378 }
378 379
379 Draw* draw; 380 Draw* draw;
380 if (info.isInstanced()) { 381 if (info.isInstanced()) {
381 int instancesConcated = this->concatInstancedDraw(info); 382 int instancesConcated = this->concatInstancedDraw(info);
382 if (info.instanceCount() > instancesConcated) { 383 if (info.instanceCount() > instancesConcated) {
383 draw = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, Draw, (info)); 384 draw = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, Draw, (info));
384 draw->fInfo.adjustInstanceCount(-instancesConcated); 385 draw->fInfo.adjustInstanceCount(-instancesConcated);
385 } else { 386 } else {
386 return; 387 return;
387 } 388 }
388 } else { 389 } else {
389 draw = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, Draw, (info)); 390 draw = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, Draw, (info));
390 } 391 }
391 this->recordTraceMarkersIfNecessary(); 392 this->recordTraceMarkersIfNecessary(draw);
392 } 393 }
393 394
394 void GrInOrderDrawBuffer::onDrawBatch(GrBatch* batch, 395 void GrInOrderDrawBuffer::onDrawBatch(GrBatch* batch,
395 const PipelineInfo& pipelineInfo) { 396 const PipelineInfo& pipelineInfo) {
396 if (!this->setupPipelineAndShouldDraw(batch, pipelineInfo)) { 397 if (!this->setupPipelineAndShouldDraw(batch, pipelineInfo)) {
397 return; 398 return;
398 } 399 }
399 400
400 // Check if there is a Batch Draw we can batch with 401 // Check if there is a Batch Draw we can batch with
401 if (Cmd::kDrawBatch_Cmd != fCmdBuffer.back().type()) { 402 if (Cmd::kDrawBatch_Cmd != fCmdBuffer.back().type()) {
403 this->closeBatch();
joshualitt 2015/02/27 19:43:24 I should have been paying more attention. This cl
robertphillips 2015/02/27 20:52:39 Done.
402 fDrawBatch = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, DrawBatch, (batch, &fB atchTarget)); 404 fDrawBatch = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, DrawBatch, (batch, &fB atchTarget));
405 this->recordTraceMarkersIfNecessary(fDrawBatch);
403 return; 406 return;
404 } 407 }
405 408
406 DrawBatch* draw = static_cast<DrawBatch*>(&fCmdBuffer.back()); 409 DrawBatch* draw = static_cast<DrawBatch*>(&fCmdBuffer.back());
egdaniel 2015/02/27 20:09:36 I'm pretty sure this draw is fDrawBatch so we can
robertphillips 2015/02/27 20:52:39 Done.
robertphillips 2015/02/27 21:06:16 Done.
407 if (draw->fBatch->combineIfPossible(batch)) { 410 if (draw->fBatch->combineIfPossible(batch)) {
408 return; 411 return;
409 } else { 412 } else {
410 this->closeBatch(); 413 this->closeBatch();
411 fDrawBatch = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, DrawBatch, (batch, &fB atchTarget)); 414 fDrawBatch = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, DrawBatch, (batch, &fB atchTarget));
412 } 415 }
413 this->recordTraceMarkersIfNecessary(); 416 this->recordTraceMarkersIfNecessary(fDrawBatch);
414 } 417 }
415 418
416 void GrInOrderDrawBuffer::onStencilPath(const GrPipelineBuilder& pipelineBuilder , 419 void GrInOrderDrawBuffer::onStencilPath(const GrPipelineBuilder& pipelineBuilder ,
417 const GrPathProcessor* pathProc, 420 const GrPathProcessor* pathProc,
418 const GrPath* path, 421 const GrPath* path,
419 const GrScissorState& scissorState, 422 const GrScissorState& scissorState,
420 const GrStencilSettings& stencilSettings ) { 423 const GrStencilSettings& stencilSettings ) {
421 this->closeBatch(); 424 this->closeBatch();
422 425
423 StencilPath* sp = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, StencilPath, 426 StencilPath* sp = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, StencilPath,
424 (path, pipelineBuilder.getRenderT arget())); 427 (path, pipelineBuilder.getRenderT arget()));
425 428
426 sp->fScissor = scissorState; 429 sp->fScissor = scissorState;
427 sp->fUseHWAA = pipelineBuilder.isHWAntialias(); 430 sp->fUseHWAA = pipelineBuilder.isHWAntialias();
428 sp->fViewMatrix = pathProc->viewMatrix(); 431 sp->fViewMatrix = pathProc->viewMatrix();
429 sp->fStencil = stencilSettings; 432 sp->fStencil = stencilSettings;
430 this->recordTraceMarkersIfNecessary(); 433 this->recordTraceMarkersIfNecessary(sp);
431 } 434 }
432 435
433 void GrInOrderDrawBuffer::onDrawPath(const GrPathProcessor* pathProc, 436 void GrInOrderDrawBuffer::onDrawPath(const GrPathProcessor* pathProc,
434 const GrPath* path, 437 const GrPath* path,
435 const GrStencilSettings& stencilSettings, 438 const GrStencilSettings& stencilSettings,
436 const PipelineInfo& pipelineInfo) { 439 const PipelineInfo& pipelineInfo) {
437 this->closeBatch(); 440 this->closeBatch();
438 441
439 // TODO: Only compare the subset of GrPipelineBuilder relevant to path cover ing? 442 // TODO: Only compare the subset of GrPipelineBuilder relevant to path cover ing?
440 if (!this->setupPipelineAndShouldDraw(pathProc, pipelineInfo)) { 443 if (!this->setupPipelineAndShouldDraw(pathProc, pipelineInfo)) {
441 return; 444 return;
442 } 445 }
443 DrawPath* dp = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, DrawPath, (path)); 446 DrawPath* dp = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, DrawPath, (path));
444 dp->fStencilSettings = stencilSettings; 447 dp->fStencilSettings = stencilSettings;
445 this->recordTraceMarkersIfNecessary(); 448 this->recordTraceMarkersIfNecessary(dp);
446 } 449 }
447 450
448 void GrInOrderDrawBuffer::onDrawPaths(const GrPathProcessor* pathProc, 451 void GrInOrderDrawBuffer::onDrawPaths(const GrPathProcessor* pathProc,
449 const GrPathRange* pathRange, 452 const GrPathRange* pathRange,
450 const void* indices, 453 const void* indices,
451 PathIndexType indexType, 454 PathIndexType indexType,
452 const float transformValues[], 455 const float transformValues[],
453 PathTransformType transformType, 456 PathTransformType transformType,
454 int count, 457 int count,
455 const GrStencilSettings& stencilSettings, 458 const GrStencilSettings& stencilSettings,
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
505 } 508 }
506 509
507 DrawPaths* dp = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, DrawPaths, (pathRange)) ; 510 DrawPaths* dp = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, DrawPaths, (pathRange)) ;
508 dp->fIndices = savedIndices; 511 dp->fIndices = savedIndices;
509 dp->fIndexType = indexType; 512 dp->fIndexType = indexType;
510 dp->fTransforms = savedTransforms; 513 dp->fTransforms = savedTransforms;
511 dp->fTransformType = transformType; 514 dp->fTransformType = transformType;
512 dp->fCount = count; 515 dp->fCount = count;
513 dp->fStencilSettings = stencilSettings; 516 dp->fStencilSettings = stencilSettings;
514 517
515 this->recordTraceMarkersIfNecessary(); 518 this->recordTraceMarkersIfNecessary(dp);
516 } 519 }
517 520
518 void GrInOrderDrawBuffer::onClear(const SkIRect* rect, GrColor color, 521 void GrInOrderDrawBuffer::onClear(const SkIRect* rect, GrColor color,
519 bool canIgnoreRect, GrRenderTarget* renderTarg et) { 522 bool canIgnoreRect, GrRenderTarget* renderTarg et) {
520 SkASSERT(renderTarget); 523 SkASSERT(renderTarget);
521 this->closeBatch(); 524 this->closeBatch();
522 525
523 SkIRect r; 526 SkIRect r;
524 if (NULL == rect) { 527 if (NULL == rect) {
525 // We could do something smart and remove previous draws and clears to 528 // We could do something smart and remove previous draws and clears to
526 // the current render target. If we get that smart we have to make sure 529 // the current render target. If we get that smart we have to make sure
527 // those draws aren't read before this clear (render-to-texture). 530 // those draws aren't read before this clear (render-to-texture).
528 r.setLTRB(0, 0, renderTarget->width(), renderTarget->height()); 531 r.setLTRB(0, 0, renderTarget->width(), renderTarget->height());
529 rect = &r; 532 rect = &r;
530 } 533 }
531 Clear* clr = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, Clear, (renderTarget)); 534 Clear* clr = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, Clear, (renderTarget));
532 GrColorIsPMAssert(color); 535 GrColorIsPMAssert(color);
533 clr->fColor = color; 536 clr->fColor = color;
534 clr->fRect = *rect; 537 clr->fRect = *rect;
535 clr->fCanIgnoreRect = canIgnoreRect; 538 clr->fCanIgnoreRect = canIgnoreRect;
536 this->recordTraceMarkersIfNecessary(); 539 this->recordTraceMarkersIfNecessary(clr);
537 } 540 }
538 541
539 void GrInOrderDrawBuffer::clearStencilClip(const SkIRect& rect, 542 void GrInOrderDrawBuffer::clearStencilClip(const SkIRect& rect,
540 bool insideClip, 543 bool insideClip,
541 GrRenderTarget* renderTarget) { 544 GrRenderTarget* renderTarget) {
542 SkASSERT(renderTarget); 545 SkASSERT(renderTarget);
543 this->closeBatch(); 546 this->closeBatch();
544 547
545 ClearStencilClip* clr = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, ClearStencilCli p, (renderTarget)); 548 ClearStencilClip* clr = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, ClearStencilCli p, (renderTarget));
546 clr->fRect = rect; 549 clr->fRect = rect;
547 clr->fInsideClip = insideClip; 550 clr->fInsideClip = insideClip;
548 this->recordTraceMarkersIfNecessary(); 551 this->recordTraceMarkersIfNecessary(clr);
549 } 552 }
550 553
551 void GrInOrderDrawBuffer::discard(GrRenderTarget* renderTarget) { 554 void GrInOrderDrawBuffer::discard(GrRenderTarget* renderTarget) {
552 SkASSERT(renderTarget); 555 SkASSERT(renderTarget);
553 this->closeBatch(); 556 this->closeBatch();
554 557
555 if (!this->caps()->discardRenderTargetSupport()) { 558 if (!this->caps()->discardRenderTargetSupport()) {
556 return; 559 return;
557 } 560 }
558 Clear* clr = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, Clear, (renderTarget)); 561 Clear* clr = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, Clear, (renderTarget));
559 clr->fColor = GrColor_ILLEGAL; 562 clr->fColor = GrColor_ILLEGAL;
560 this->recordTraceMarkersIfNecessary(); 563 this->recordTraceMarkersIfNecessary(clr);
561 } 564 }
562 565
563 void GrInOrderDrawBuffer::onReset() { 566 void GrInOrderDrawBuffer::onReset() {
564 fCmdBuffer.reset(); 567 fCmdBuffer.reset();
565 fPrevState = NULL; 568 fPrevState = NULL;
566 fPathIndexBuffer.rewind(); 569 fPathIndexBuffer.rewind();
567 fPathTransformBuffer.rewind(); 570 fPathTransformBuffer.rewind();
568 fGpuCmdMarkers.reset(); 571 fGpuCmdMarkers.reset();
569 fDrawBatch = NULL; 572 fDrawBatch = NULL;
570 } 573 }
(...skipping 17 matching lines...) Expand all
588 CmdBuffer::Iter iter(fCmdBuffer); 591 CmdBuffer::Iter iter(fCmdBuffer);
589 592
590 int currCmdMarker = 0; 593 int currCmdMarker = 0;
591 594
592 int i = 0; 595 int i = 0;
593 while (iter.next()) { 596 while (iter.next()) {
594 i++; 597 i++;
595 GrGpuTraceMarker newMarker("", -1); 598 GrGpuTraceMarker newMarker("", -1);
596 SkString traceString; 599 SkString traceString;
597 if (iter->isTraced()) { 600 if (iter->isTraced()) {
598 traceString = fGpuCmdMarkers[currCmdMarker].toString(); 601 traceString = this->getCmdString(currCmdMarker);
599 newMarker.fMarker = traceString.c_str(); 602 newMarker.fMarker = traceString.c_str();
600 this->getGpu()->addGpuTraceMarker(&newMarker); 603 this->getGpu()->addGpuTraceMarker(&newMarker);
601 ++currCmdMarker; 604 ++currCmdMarker;
602 } 605 }
603 606
604 // TODO temporary hack 607 // TODO temporary hack
605 if (Cmd::kDrawBatch_Cmd == iter->type()) { 608 if (Cmd::kDrawBatch_Cmd == iter->type()) {
606 DrawBatch* db = reinterpret_cast<DrawBatch*>(iter.get()); 609 DrawBatch* db = reinterpret_cast<DrawBatch*>(iter.get());
607 fBatchTarget.flushNext(db->fBatch->numberOfDraws()); 610 fBatchTarget.flushNext(db->fBatch->numberOfDraws());
608 continue; 611 continue;
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
695 698
696 bool GrInOrderDrawBuffer::onCopySurface(GrSurface* dst, 699 bool GrInOrderDrawBuffer::onCopySurface(GrSurface* dst,
697 GrSurface* src, 700 GrSurface* src,
698 const SkIRect& srcRect, 701 const SkIRect& srcRect,
699 const SkIPoint& dstPoint) { 702 const SkIPoint& dstPoint) {
700 if (getGpu()->canCopySurface(dst, src, srcRect, dstPoint)) { 703 if (getGpu()->canCopySurface(dst, src, srcRect, dstPoint)) {
701 this->closeBatch(); 704 this->closeBatch();
702 CopySurface* cs = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, CopySurface, (dst , src)); 705 CopySurface* cs = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, CopySurface, (dst , src));
703 cs->fSrcRect = srcRect; 706 cs->fSrcRect = srcRect;
704 cs->fDstPoint = dstPoint; 707 cs->fDstPoint = dstPoint;
705 this->recordTraceMarkersIfNecessary(); 708 this->recordTraceMarkersIfNecessary(cs);
706 return true; 709 return true;
707 } 710 }
708 return false; 711 return false;
709 } 712 }
710 713
711 bool GrInOrderDrawBuffer::setupPipelineAndShouldDraw(const GrPrimitiveProcessor* primProc, 714 bool GrInOrderDrawBuffer::setupPipelineAndShouldDraw(const GrPrimitiveProcessor* primProc,
712 const PipelineInfo& pipelin eInfo) { 715 const PipelineInfo& pipelin eInfo) {
713 SetState* ss = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, SetState, (primProc)); 716 SetState* ss = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, SetState, (primProc));
714 this->setupPipeline(pipelineInfo, ss->pipelineLocation()); 717 this->setupPipeline(pipelineInfo, ss->pipelineLocation());
715 718
716 if (ss->getPipeline()->mustSkip()) { 719 if (ss->getPipeline()->mustSkip()) {
717 fCmdBuffer.pop_back(); 720 fCmdBuffer.pop_back();
718 return false; 721 return false;
719 } 722 }
720 723
721 ss->fPrimitiveProcessor->initBatchTracker(&ss->fBatchTracker, 724 ss->fPrimitiveProcessor->initBatchTracker(&ss->fBatchTracker,
722 ss->getPipeline()->getInitBatchTra cker()); 725 ss->getPipeline()->getInitBatchTra cker());
723 726
724 if (fPrevState && fPrevState->fPrimitiveProcessor.get() && 727 if (fPrevState && fPrevState->fPrimitiveProcessor.get() &&
725 fPrevState->fPrimitiveProcessor->canMakeEqual(fPrevState->fBatchTracker, 728 fPrevState->fPrimitiveProcessor->canMakeEqual(fPrevState->fBatchTracker,
726 *ss->fPrimitiveProcessor, 729 *ss->fPrimitiveProcessor,
727 ss->fBatchTracker) && 730 ss->fBatchTracker) &&
728 fPrevState->getPipeline()->isEqual(*ss->getPipeline())) { 731 fPrevState->getPipeline()->isEqual(*ss->getPipeline())) {
729 fCmdBuffer.pop_back(); 732 fCmdBuffer.pop_back();
730 } else { 733 } else {
731 fPrevState = ss; 734 fPrevState = ss;
732 this->recordTraceMarkersIfNecessary(); 735 this->recordTraceMarkersIfNecessary(ss);
733 } 736 }
734 return true; 737 return true;
735 } 738 }
736 739
737 bool GrInOrderDrawBuffer::setupPipelineAndShouldDraw(GrBatch* batch, 740 bool GrInOrderDrawBuffer::setupPipelineAndShouldDraw(GrBatch* batch,
738 const PipelineInfo& pipelin eInfo) { 741 const PipelineInfo& pipelin eInfo) {
739 SetState* ss = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, SetState, ()); 742 SetState* ss = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, SetState, ());
740 this->setupPipeline(pipelineInfo, ss->pipelineLocation()); 743 this->setupPipeline(pipelineInfo, ss->pipelineLocation());
741 744
742 if (ss->getPipeline()->mustSkip()) { 745 if (ss->getPipeline()->mustSkip()) {
743 fCmdBuffer.pop_back(); 746 fCmdBuffer.pop_back();
744 return false; 747 return false;
745 } 748 }
746 749
747 batch->initBatchTracker(ss->getPipeline()->getInitBatchTracker()); 750 batch->initBatchTracker(ss->getPipeline()->getInitBatchTracker());
748 751
749 if (fPrevState && !fPrevState->fPrimitiveProcessor.get() && 752 if (fPrevState && !fPrevState->fPrimitiveProcessor.get() &&
750 fPrevState->getPipeline()->isEqual(*ss->getPipeline())) { 753 fPrevState->getPipeline()->isEqual(*ss->getPipeline())) {
751 fCmdBuffer.pop_back(); 754 fCmdBuffer.pop_back();
752 } else { 755 } else {
753 this->closeBatch(); 756 this->closeBatch();
754 fPrevState = ss; 757 fPrevState = ss;
755 this->recordTraceMarkersIfNecessary(); 758 this->recordTraceMarkersIfNecessary(ss);
756 } 759 }
757 return true; 760 return true;
758 } 761 }
759 762
760 void GrInOrderDrawBuffer::recordTraceMarkersIfNecessary() { 763 void GrInOrderDrawBuffer::recordTraceMarkersIfNecessary(Cmd* cmd) {
761 SkASSERT(!fCmdBuffer.empty()); 764 if (!cmd) {
762 SkASSERT(!fCmdBuffer.back().isTraced()); 765 return;
766 }
763 const GrTraceMarkerSet& activeTraceMarkers = this->getActiveTraceMarkers(); 767 const GrTraceMarkerSet& activeTraceMarkers = this->getActiveTraceMarkers();
764 if (activeTraceMarkers.count() > 0) { 768 if (activeTraceMarkers.count() > 0) {
765 fCmdBuffer.back().makeTraced(); 769 if (cmd->isTraced()) {
766 fGpuCmdMarkers.push_back(activeTraceMarkers); 770 fGpuCmdMarkers.back().addSet(activeTraceMarkers);
771 } else {
772 cmd->makeTraced();
773 fGpuCmdMarkers.push_back(activeTraceMarkers);
774 }
767 } 775 }
768 } 776 }
769 777
770 void GrInOrderDrawBuffer::willReserveVertexAndIndexSpace(int vertexCount, 778 void GrInOrderDrawBuffer::willReserveVertexAndIndexSpace(int vertexCount,
771 size_t vertexStride, 779 size_t vertexStride,
772 int indexCount) { 780 int indexCount) {
773 this->closeBatch(); 781 this->closeBatch();
774 782
775 this->INHERITED::willReserveVertexAndIndexSpace(vertexCount, vertexStride, i ndexCount); 783 this->INHERITED::willReserveVertexAndIndexSpace(vertexCount, vertexStride, i ndexCount);
776 } 784 }
OLDNEW
« no previous file with comments | « src/gpu/GrInOrderDrawBuffer.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698