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

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

Issue 956363003: Cleanup in GrPipelineBuilder (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: fix 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/GrDrawTarget.h ('k') | src/gpu/GrOvalRenderer.cpp » ('j') | 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 /* 2 /*
3 * Copyright 2010 Google Inc. 3 * Copyright 2010 Google Inc.
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 8
9 #include "GrDrawTarget.h" 9 #include "GrDrawTarget.h"
10 10
(...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after
346 SkASSERT(pipelineBuilder.getRenderTarget()); 346 SkASSERT(pipelineBuilder.getRenderTarget());
347 347
348 if (gp) { 348 if (gp) {
349 int numTextures = gp->numTextures(); 349 int numTextures = gp->numTextures();
350 for (int t = 0; t < numTextures; ++t) { 350 for (int t = 0; t < numTextures; ++t) {
351 GrTexture* texture = gp->texture(t); 351 GrTexture* texture = gp->texture(t);
352 SkASSERT(texture->asRenderTarget() != pipelineBuilder.getRenderTarge t()); 352 SkASSERT(texture->asRenderTarget() != pipelineBuilder.getRenderTarge t());
353 } 353 }
354 } 354 }
355 355
356 for (int s = 0; s < pipelineBuilder.numColorStages(); ++s) { 356 for (int s = 0; s < pipelineBuilder.numColorFragmentStages(); ++s) {
357 const GrProcessor* effect = pipelineBuilder.getColorStage(s).processor() ; 357 const GrProcessor* effect = pipelineBuilder.getColorFragmentStage(s).pro cessor();
358 int numTextures = effect->numTextures(); 358 int numTextures = effect->numTextures();
359 for (int t = 0; t < numTextures; ++t) { 359 for (int t = 0; t < numTextures; ++t) {
360 GrTexture* texture = effect->texture(t); 360 GrTexture* texture = effect->texture(t);
361 SkASSERT(texture->asRenderTarget() != pipelineBuilder.getRenderTarge t()); 361 SkASSERT(texture->asRenderTarget() != pipelineBuilder.getRenderTarge t());
362 } 362 }
363 } 363 }
364 for (int s = 0; s < pipelineBuilder.numCoverageStages(); ++s) { 364 for (int s = 0; s < pipelineBuilder.numCoverageFragmentStages(); ++s) {
365 const GrProcessor* effect = pipelineBuilder.getCoverageStage(s).processo r(); 365 const GrProcessor* effect = pipelineBuilder.getCoverageFragmentStage(s). processor();
366 int numTextures = effect->numTextures(); 366 int numTextures = effect->numTextures();
367 for (int t = 0; t < numTextures; ++t) { 367 for (int t = 0; t < numTextures; ++t) {
368 GrTexture* texture = effect->texture(t); 368 GrTexture* texture = effect->texture(t);
369 SkASSERT(texture->asRenderTarget() != pipelineBuilder.getRenderTarge t()); 369 SkASSERT(texture->asRenderTarget() != pipelineBuilder.getRenderTarge t());
370 } 370 }
371 } 371 }
372 372
373 #endif 373 #endif
374 if (NULL == pipelineBuilder.getRenderTarget()) { 374 if (NULL == pipelineBuilder.getRenderTarget()) {
375 return false; 375 return false;
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
436 int vertexCount, 436 int vertexCount,
437 int indexCount, 437 int indexCount,
438 const SkRect* devBounds) { 438 const SkRect* devBounds) {
439 SkASSERT(pipelineBuilder); 439 SkASSERT(pipelineBuilder);
440 if (indexCount > 0 && 440 if (indexCount > 0 &&
441 this->checkDraw(*pipelineBuilder, gp, type, startVertex, startIndex, ver texCount, 441 this->checkDraw(*pipelineBuilder, gp, type, startVertex, startIndex, ver texCount,
442 indexCount)) { 442 indexCount)) {
443 443
444 // Setup clip 444 // Setup clip
445 GrScissorState scissorState; 445 GrScissorState scissorState;
446 GrPipelineBuilder::AutoRestoreEffects are; 446 GrPipelineBuilder::AutoRestoreFragmentProcessors arfp;
447 GrPipelineBuilder::AutoRestoreStencil ars; 447 GrPipelineBuilder::AutoRestoreStencil ars;
448 if (!this->setupClip(pipelineBuilder, &are, &ars, &scissorState, devBoun ds)) { 448 if (!this->setupClip(pipelineBuilder, &arfp, &ars, &scissorState, devBou nds)) {
449 return; 449 return;
450 } 450 }
451 451
452 DrawInfo info; 452 DrawInfo info;
453 info.fPrimitiveType = type; 453 info.fPrimitiveType = type;
454 info.fStartVertex = startVertex; 454 info.fStartVertex = startVertex;
455 info.fStartIndex = startIndex; 455 info.fStartIndex = startIndex;
456 info.fVertexCount = vertexCount; 456 info.fVertexCount = vertexCount;
457 info.fIndexCount = indexCount; 457 info.fIndexCount = indexCount;
458 458
(...skipping 22 matching lines...) Expand all
481 GrPrimitiveType type, 481 GrPrimitiveType type,
482 int startVertex, 482 int startVertex,
483 int vertexCount, 483 int vertexCount,
484 const SkRect* devBounds) { 484 const SkRect* devBounds) {
485 SkASSERT(pipelineBuilder); 485 SkASSERT(pipelineBuilder);
486 if (vertexCount > 0 && this->checkDraw(*pipelineBuilder, gp, type, startVert ex, -1, vertexCount, 486 if (vertexCount > 0 && this->checkDraw(*pipelineBuilder, gp, type, startVert ex, -1, vertexCount,
487 -1)) { 487 -1)) {
488 488
489 // Setup clip 489 // Setup clip
490 GrScissorState scissorState; 490 GrScissorState scissorState;
491 GrPipelineBuilder::AutoRestoreEffects are; 491 GrPipelineBuilder::AutoRestoreFragmentProcessors arfp;
492 GrPipelineBuilder::AutoRestoreStencil ars; 492 GrPipelineBuilder::AutoRestoreStencil ars;
493 if (!this->setupClip(pipelineBuilder, &are, &ars, &scissorState, devBoun ds)) { 493 if (!this->setupClip(pipelineBuilder, &arfp, &ars, &scissorState, devBou nds)) {
494 return; 494 return;
495 } 495 }
496 496
497 DrawInfo info; 497 DrawInfo info;
498 info.fPrimitiveType = type; 498 info.fPrimitiveType = type;
499 info.fStartVertex = startVertex; 499 info.fStartVertex = startVertex;
500 info.fStartIndex = 0; 500 info.fStartIndex = 0;
501 info.fVertexCount = vertexCount; 501 info.fVertexCount = vertexCount;
502 info.fIndexCount = 0; 502 info.fIndexCount = 0;
503 503
(...skipping 19 matching lines...) Expand all
523 523
524 524
525 void GrDrawTarget::drawBatch(GrPipelineBuilder* pipelineBuilder, 525 void GrDrawTarget::drawBatch(GrPipelineBuilder* pipelineBuilder,
526 GrBatch* batch, 526 GrBatch* batch,
527 const SkRect* devBounds) { 527 const SkRect* devBounds) {
528 SkASSERT(pipelineBuilder); 528 SkASSERT(pipelineBuilder);
529 // TODO some kind of checkdraw, but not at this level 529 // TODO some kind of checkdraw, but not at this level
530 530
531 // Setup clip 531 // Setup clip
532 GrScissorState scissorState; 532 GrScissorState scissorState;
533 GrPipelineBuilder::AutoRestoreEffects are; 533 GrPipelineBuilder::AutoRestoreFragmentProcessors arfp;
534 GrPipelineBuilder::AutoRestoreStencil ars; 534 GrPipelineBuilder::AutoRestoreStencil ars;
535 if (!this->setupClip(pipelineBuilder, &are, &ars, &scissorState, devBounds)) { 535 if (!this->setupClip(pipelineBuilder, &arfp, &ars, &scissorState, devBounds) ) {
536 return; 536 return;
537 } 537 }
538 538
539 GrDrawTarget::PipelineInfo pipelineInfo(pipelineBuilder, &scissorState, batc h, devBounds, this); 539 GrDrawTarget::PipelineInfo pipelineInfo(pipelineBuilder, &scissorState, batc h, devBounds, this);
540 if (pipelineInfo.mustSkipDraw()) { 540 if (pipelineInfo.mustSkipDraw()) {
541 return; 541 return;
542 } 542 }
543 543
544 this->onDrawBatch(batch, pipelineInfo); 544 this->onDrawBatch(batch, pipelineInfo);
545 } 545 }
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
583 const GrPathProcessor* pathProc, 583 const GrPathProcessor* pathProc,
584 const GrPath* path, 584 const GrPath* path,
585 GrPathRendering::FillType fill) { 585 GrPathRendering::FillType fill) {
586 // TODO: extract portions of checkDraw that are relevant to path stenciling. 586 // TODO: extract portions of checkDraw that are relevant to path stenciling.
587 SkASSERT(path); 587 SkASSERT(path);
588 SkASSERT(this->caps()->pathRenderingSupport()); 588 SkASSERT(this->caps()->pathRenderingSupport());
589 SkASSERT(pipelineBuilder); 589 SkASSERT(pipelineBuilder);
590 590
591 // Setup clip 591 // Setup clip
592 GrScissorState scissorState; 592 GrScissorState scissorState;
593 GrPipelineBuilder::AutoRestoreEffects are; 593 GrPipelineBuilder::AutoRestoreFragmentProcessors arfp;
594 GrPipelineBuilder::AutoRestoreStencil ars; 594 GrPipelineBuilder::AutoRestoreStencil ars;
595 if (!this->setupClip(pipelineBuilder, &are, &ars, &scissorState, NULL)) { 595 if (!this->setupClip(pipelineBuilder, &arfp, &ars, &scissorState, NULL)) {
596 return; 596 return;
597 } 597 }
598 598
599 // set stencil settings for path 599 // set stencil settings for path
600 GrStencilSettings stencilSettings; 600 GrStencilSettings stencilSettings;
601 GrRenderTarget* rt = pipelineBuilder->getRenderTarget(); 601 GrRenderTarget* rt = pipelineBuilder->getRenderTarget();
602 GrStencilBuffer* sb = rt->renderTargetPriv().attachStencilBuffer(); 602 GrStencilBuffer* sb = rt->renderTargetPriv().attachStencilBuffer();
603 this->getPathStencilSettingsForFilltype(fill, sb, &stencilSettings); 603 this->getPathStencilSettingsForFilltype(fill, sb, &stencilSettings);
604 604
605 this->onStencilPath(*pipelineBuilder, pathProc, path, scissorState, stencilS ettings); 605 this->onStencilPath(*pipelineBuilder, pathProc, path, scissorState, stencilS ettings);
606 } 606 }
607 607
608 void GrDrawTarget::drawPath(GrPipelineBuilder* pipelineBuilder, 608 void GrDrawTarget::drawPath(GrPipelineBuilder* pipelineBuilder,
609 const GrPathProcessor* pathProc, 609 const GrPathProcessor* pathProc,
610 const GrPath* path, 610 const GrPath* path,
611 GrPathRendering::FillType fill) { 611 GrPathRendering::FillType fill) {
612 // TODO: extract portions of checkDraw that are relevant to path rendering. 612 // TODO: extract portions of checkDraw that are relevant to path rendering.
613 SkASSERT(path); 613 SkASSERT(path);
614 SkASSERT(this->caps()->pathRenderingSupport()); 614 SkASSERT(this->caps()->pathRenderingSupport());
615 SkASSERT(pipelineBuilder); 615 SkASSERT(pipelineBuilder);
616 616
617 SkRect devBounds = path->getBounds(); 617 SkRect devBounds = path->getBounds();
618 pathProc->viewMatrix().mapRect(&devBounds); 618 pathProc->viewMatrix().mapRect(&devBounds);
619 619
620 // Setup clip 620 // Setup clip
621 GrScissorState scissorState; 621 GrScissorState scissorState;
622 GrPipelineBuilder::AutoRestoreEffects are; 622 GrPipelineBuilder::AutoRestoreFragmentProcessors arfp;
623 GrPipelineBuilder::AutoRestoreStencil ars; 623 GrPipelineBuilder::AutoRestoreStencil ars;
624 if (!this->setupClip(pipelineBuilder, &are, &ars, &scissorState, &devBounds) ) { 624 if (!this->setupClip(pipelineBuilder, &arfp, &ars, &scissorState, &devBounds )) {
625 return; 625 return;
626 } 626 }
627 627
628 // set stencil settings for path 628 // set stencil settings for path
629 GrStencilSettings stencilSettings; 629 GrStencilSettings stencilSettings;
630 GrRenderTarget* rt = pipelineBuilder->getRenderTarget(); 630 GrRenderTarget* rt = pipelineBuilder->getRenderTarget();
631 GrStencilBuffer* sb = rt->renderTargetPriv().attachStencilBuffer(); 631 GrStencilBuffer* sb = rt->renderTargetPriv().attachStencilBuffer();
632 this->getPathStencilSettingsForFilltype(fill, sb, &stencilSettings); 632 this->getPathStencilSettingsForFilltype(fill, sb, &stencilSettings);
633 633
634 GrDrawTarget::PipelineInfo pipelineInfo(pipelineBuilder, &scissorState, path Proc, &devBounds, 634 GrDrawTarget::PipelineInfo pipelineInfo(pipelineBuilder, &scissorState, path Proc, &devBounds,
(...skipping 16 matching lines...) Expand all
651 GrPathRendering::FillType fill) { 651 GrPathRendering::FillType fill) {
652 SkASSERT(this->caps()->pathRenderingSupport()); 652 SkASSERT(this->caps()->pathRenderingSupport());
653 SkASSERT(pathRange); 653 SkASSERT(pathRange);
654 SkASSERT(indices); 654 SkASSERT(indices);
655 SkASSERT(0 == reinterpret_cast<long>(indices) % GrPathRange::PathIndexSizeIn Bytes(indexType)); 655 SkASSERT(0 == reinterpret_cast<long>(indices) % GrPathRange::PathIndexSizeIn Bytes(indexType));
656 SkASSERT(transformValues); 656 SkASSERT(transformValues);
657 SkASSERT(pipelineBuilder); 657 SkASSERT(pipelineBuilder);
658 658
659 // Setup clip 659 // Setup clip
660 GrScissorState scissorState; 660 GrScissorState scissorState;
661 GrPipelineBuilder::AutoRestoreEffects are; 661 GrPipelineBuilder::AutoRestoreFragmentProcessors arfp;
662 GrPipelineBuilder::AutoRestoreStencil ars; 662 GrPipelineBuilder::AutoRestoreStencil ars;
663 663
664 if (!this->setupClip(pipelineBuilder, &are, &ars, &scissorState, NULL)) { 664 if (!this->setupClip(pipelineBuilder, &arfp, &ars, &scissorState, NULL)) {
665 return; 665 return;
666 } 666 }
667 667
668 // set stencil settings for path 668 // set stencil settings for path
669 GrStencilSettings stencilSettings; 669 GrStencilSettings stencilSettings;
670 GrRenderTarget* rt = pipelineBuilder->getRenderTarget(); 670 GrRenderTarget* rt = pipelineBuilder->getRenderTarget();
671 GrStencilBuffer* sb = rt->renderTargetPriv().attachStencilBuffer(); 671 GrStencilBuffer* sb = rt->renderTargetPriv().attachStencilBuffer();
672 this->getPathStencilSettingsForFilltype(fill, sb, &stencilSettings); 672 this->getPathStencilSettingsForFilltype(fill, sb, &stencilSettings);
673 673
674 // Don't compute a bounding box for dst copy texture, we'll opt 674 // Don't compute a bounding box for dst copy texture, we'll opt
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
762 return; 762 return;
763 } 763 }
764 764
765 int maxInstancesPerDraw = this->indexCountInCurrentSource() / indicesPerInst ance; 765 int maxInstancesPerDraw = this->indexCountInCurrentSource() / indicesPerInst ance;
766 if (!maxInstancesPerDraw) { 766 if (!maxInstancesPerDraw) {
767 return; 767 return;
768 } 768 }
769 769
770 // Setup clip 770 // Setup clip
771 GrScissorState scissorState; 771 GrScissorState scissorState;
772 GrPipelineBuilder::AutoRestoreEffects are; 772 GrPipelineBuilder::AutoRestoreFragmentProcessors arfp;
773 GrPipelineBuilder::AutoRestoreStencil ars; 773 GrPipelineBuilder::AutoRestoreStencil ars;
774 if (!this->setupClip(pipelineBuilder, &are, &ars, &scissorState, devBounds)) { 774 if (!this->setupClip(pipelineBuilder, &arfp, &ars, &scissorState, devBounds) ) {
775 return; 775 return;
776 } 776 }
777 777
778 DrawInfo info; 778 DrawInfo info;
779 info.fPrimitiveType = type; 779 info.fPrimitiveType = type;
780 info.fStartIndex = 0; 780 info.fStartIndex = 0;
781 info.fStartVertex = 0; 781 info.fStartVertex = 0;
782 info.fIndicesPerInstance = indicesPerInstance; 782 info.fIndicesPerInstance = indicesPerInstance;
783 info.fVerticesPerInstance = verticesPerInstance; 783 info.fVerticesPerInstance = verticesPerInstance;
784 784
(...skipping 476 matching lines...) Expand 10 before | Expand all | Expand 10 after
1261 uint32_t id; 1261 uint32_t id;
1262 do { 1262 do {
1263 id = static_cast<uint32_t>(sk_atomic_inc(&gUniqueID) + 1); 1263 id = static_cast<uint32_t>(sk_atomic_inc(&gUniqueID) + 1);
1264 } while (id == SK_InvalidUniqueID); 1264 } while (id == SK_InvalidUniqueID);
1265 return id; 1265 return id;
1266 } 1266 }
1267 1267
1268 //////////////////////////////////////////////////////////////////////////////// /////////////////// 1268 //////////////////////////////////////////////////////////////////////////////// ///////////////////
1269 1269
1270 bool GrClipTarget::setupClip(GrPipelineBuilder* pipelineBuilder, 1270 bool GrClipTarget::setupClip(GrPipelineBuilder* pipelineBuilder,
1271 GrPipelineBuilder::AutoRestoreEffects* are, 1271 GrPipelineBuilder::AutoRestoreFragmentProcessors* a rfp,
1272 GrPipelineBuilder::AutoRestoreStencil* ars, 1272 GrPipelineBuilder::AutoRestoreStencil* ars,
1273 GrScissorState* scissorState, 1273 GrScissorState* scissorState,
1274 const SkRect* devBounds) { 1274 const SkRect* devBounds) {
1275 return fClipMaskManager.setupClipping(pipelineBuilder, 1275 return fClipMaskManager.setupClipping(pipelineBuilder,
1276 are, 1276 arfp,
1277 ars, 1277 ars,
1278 scissorState, 1278 scissorState,
1279 devBounds); 1279 devBounds);
1280 } 1280 }
OLDNEW
« no previous file with comments | « src/gpu/GrDrawTarget.h ('k') | src/gpu/GrOvalRenderer.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698