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

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

Issue 777673003: move program descriptor generation to flush (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: more cleanup Created 6 years 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
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 "GrDefaultGeoProcFactory.h" 10 #include "GrDefaultGeoProcFactory.h"
(...skipping 391 matching lines...) Expand 10 before | Expand all | Expand 10 after
402 if (cmd_has_trace_marker(iter->fType)) { 402 if (cmd_has_trace_marker(iter->fType)) {
403 traceString = fGpuCmdMarkers[currCmdMarker].toString(); 403 traceString = fGpuCmdMarkers[currCmdMarker].toString();
404 newMarker.fMarker = traceString.c_str(); 404 newMarker.fMarker = traceString.c_str();
405 this->getGpu()->addGpuTraceMarker(&newMarker); 405 this->getGpu()->addGpuTraceMarker(&newMarker);
406 ++currCmdMarker; 406 ++currCmdMarker;
407 } 407 }
408 408
409 if (kSetState_Cmd == strip_trace_bit(iter->fType)) { 409 if (kSetState_Cmd == strip_trace_bit(iter->fType)) {
410 SetState* ss = reinterpret_cast<SetState*>(iter.get()); 410 SetState* ss = reinterpret_cast<SetState*>(iter.get());
411 currentOptState = &ss->fState; 411 currentOptState = &ss->fState;
412 this->getGpu()->buildProgramDesc(*currentOptState, ss->fDrawType, &f Desc);
412 } else { 413 } else {
413 iter->execute(this, currentOptState); 414 iter->execute(this, currentOptState, &fDesc);
414 } 415 }
415 416
416 if (cmd_has_trace_marker(iter->fType)) { 417 if (cmd_has_trace_marker(iter->fType)) {
417 this->getGpu()->removeGpuTraceMarker(&newMarker); 418 this->getGpu()->removeGpuTraceMarker(&newMarker);
418 } 419 }
419 } 420 }
420 421
421 SkASSERT(fGpuCmdMarkers.count() == currCmdMarker); 422 SkASSERT(fGpuCmdMarkers.count() == currCmdMarker);
422 ++fDrawID; 423 ++fDrawID;
423 } 424 }
424 425
425 void GrInOrderDrawBuffer::Draw::execute(GrInOrderDrawBuffer* buf, const GrOptDra wState* optState) { 426 void GrInOrderDrawBuffer::Draw::execute(GrInOrderDrawBuffer* buf,
426 SkASSERT(optState); 427 const GrOptDrawState* optState,
427 buf->getGpu()->draw(*optState, fInfo); 428 const GrProgramDesc* desc) {
429 SkASSERT(optState && desc);
430 buf->getGpu()->draw(*optState, *desc, fInfo);
428 } 431 }
429 432
430 void GrInOrderDrawBuffer::StencilPath::execute(GrInOrderDrawBuffer* buf, 433 void GrInOrderDrawBuffer::StencilPath::execute(GrInOrderDrawBuffer* buf,
431 const GrOptDrawState* optState) { 434 const GrOptDrawState* optState,
432 SkASSERT(optState); 435 const GrProgramDesc* desc) {
433 buf->getGpu()->stencilPath(*optState, this->path(), fStencilSettings); 436 SkASSERT(optState && desc);
437 buf->getGpu()->stencilPath(*optState, *desc, this->path(), fStencilSettings) ;
434 } 438 }
435 439
436 void GrInOrderDrawBuffer::DrawPath::execute(GrInOrderDrawBuffer* buf, 440 void GrInOrderDrawBuffer::DrawPath::execute(GrInOrderDrawBuffer* buf,
437 const GrOptDrawState* optState) { 441 const GrOptDrawState* optState,
438 SkASSERT(optState); 442 const GrProgramDesc* desc) {
439 buf->getGpu()->drawPath(*optState, this->path(), fStencilSettings); 443 SkASSERT(optState && desc);
444 buf->getGpu()->drawPath(*optState, *desc, this->path(), fStencilSettings);
440 } 445 }
441 446
442 void GrInOrderDrawBuffer::DrawPaths::execute(GrInOrderDrawBuffer* buf, 447 void GrInOrderDrawBuffer::DrawPaths::execute(GrInOrderDrawBuffer* buf,
443 const GrOptDrawState* optState) { 448 const GrOptDrawState* optState,
444 SkASSERT(optState); 449 const GrProgramDesc* desc) {
445 buf->getGpu()->drawPaths(*optState, this->pathRange(), 450 SkASSERT(optState && desc);
451 buf->getGpu()->drawPaths(*optState, *desc, this->pathRange(),
446 &buf->fPathIndexBuffer[fIndicesLocation], fIndexType , 452 &buf->fPathIndexBuffer[fIndicesLocation], fIndexType ,
447 &buf->fPathTransformBuffer[fTransformsLocation], fTr ansformType, 453 &buf->fPathTransformBuffer[fTransformsLocation], fTr ansformType,
448 fCount, fStencilSettings); 454 fCount, fStencilSettings);
449 } 455 }
450 456
451 void GrInOrderDrawBuffer::SetState::execute(GrInOrderDrawBuffer*, const GrOptDra wState*) {} 457 void GrInOrderDrawBuffer::SetState::execute(GrInOrderDrawBuffer*,
458 const GrOptDrawState*,
459 const GrProgramDesc*) {}
452 460
453 void GrInOrderDrawBuffer::Clear::execute(GrInOrderDrawBuffer* buf, const GrOptDr awState*) { 461 void GrInOrderDrawBuffer::Clear::execute(GrInOrderDrawBuffer* buf,
462 const GrOptDrawState*,
463 const GrProgramDesc*) {
454 if (GrColor_ILLEGAL == fColor) { 464 if (GrColor_ILLEGAL == fColor) {
455 buf->getGpu()->discard(this->renderTarget()); 465 buf->getGpu()->discard(this->renderTarget());
456 } else { 466 } else {
457 buf->getGpu()->clear(&fRect, fColor, fCanIgnoreRect, this->renderTarget( )); 467 buf->getGpu()->clear(&fRect, fColor, fCanIgnoreRect, this->renderTarget( ));
458 } 468 }
459 } 469 }
460 470
461 void GrInOrderDrawBuffer::ClearStencilClip::execute(GrInOrderDrawBuffer* buf, 471 void GrInOrderDrawBuffer::ClearStencilClip::execute(GrInOrderDrawBuffer* buf,
462 const GrOptDrawState*) { 472 const GrOptDrawState*,
473 const GrProgramDesc*) {
463 buf->getGpu()->clearStencilClip(fRect, fInsideClip, this->renderTarget()); 474 buf->getGpu()->clearStencilClip(fRect, fInsideClip, this->renderTarget());
464 } 475 }
465 476
466 void GrInOrderDrawBuffer::CopySurface::execute(GrInOrderDrawBuffer* buf, const G rOptDrawState*) { 477 void GrInOrderDrawBuffer::CopySurface::execute(GrInOrderDrawBuffer* buf,
478 const GrOptDrawState*,
479 const GrProgramDesc*) {
467 buf->getGpu()->copySurface(this->dst(), this->src(), fSrcRect, fDstPoint); 480 buf->getGpu()->copySurface(this->dst(), this->src(), fSrcRect, fDstPoint);
468 } 481 }
469 482
470 bool GrInOrderDrawBuffer::onCopySurface(GrSurface* dst, 483 bool GrInOrderDrawBuffer::onCopySurface(GrSurface* dst,
471 GrSurface* src, 484 GrSurface* src,
472 const SkIRect& srcRect, 485 const SkIRect& srcRect,
473 const SkIPoint& dstPoint) { 486 const SkIPoint& dstPoint) {
474 if (getGpu()->canCopySurface(dst, src, srcRect, dstPoint)) { 487 if (getGpu()->canCopySurface(dst, src, srcRect, dstPoint)) {
475 CopySurface* cs = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, CopySurface, (dst , src)); 488 CopySurface* cs = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, CopySurface, (dst , src));
476 cs->fSrcRect = srcRect; 489 cs->fSrcRect = srcRect;
477 cs->fDstPoint = dstPoint; 490 cs->fDstPoint = dstPoint;
478 this->recordTraceMarkersIfNecessary(); 491 this->recordTraceMarkersIfNecessary();
479 return true; 492 return true;
480 } 493 }
481 return false; 494 return false;
482 } 495 }
483 496
484 bool GrInOrderDrawBuffer::recordStateAndShouldDraw(const GrDrawState& ds, 497 bool GrInOrderDrawBuffer::recordStateAndShouldDraw(const GrDrawState& ds,
485 GrGpu::DrawType drawType, 498 GrGpu::DrawType drawType,
486 const GrClipMaskManager::Scis sorState& scissor, 499 const GrClipMaskManager::Scis sorState& scissor,
487 const GrDeviceCoordTexture* d stCopy) { 500 const GrDeviceCoordTexture* d stCopy) {
488 SetState* ss = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, SetState, 501 SetState* ss = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, SetState,
489 (ds, this->getGpu(), scissor, dstCop y, drawType)); 502 (ds, *this->getGpu()->caps(), scisso r, dstCopy,
503 drawType));
490 if (ss->fState.mustSkip()) { 504 if (ss->fState.mustSkip()) {
491 fCmdBuffer.pop_back(); 505 fCmdBuffer.pop_back();
492 return false; 506 return false;
493 } 507 }
494 if (fPrevState && *fPrevState == ss->fState) { 508 if (fPrevState && *fPrevState == ss->fState) {
495 fCmdBuffer.pop_back(); 509 fCmdBuffer.pop_back();
496 } else { 510 } else {
497 fPrevState = &ss->fState; 511 fPrevState = &ss->fState;
498 this->recordTraceMarkersIfNecessary(); 512 this->recordTraceMarkersIfNecessary();
499 } 513 }
500 return true; 514 return true;
501 } 515 }
502 516
503 void GrInOrderDrawBuffer::recordTraceMarkersIfNecessary() { 517 void GrInOrderDrawBuffer::recordTraceMarkersIfNecessary() {
504 SkASSERT(!fCmdBuffer.empty()); 518 SkASSERT(!fCmdBuffer.empty());
505 SkASSERT(!cmd_has_trace_marker(fCmdBuffer.back().fType)); 519 SkASSERT(!cmd_has_trace_marker(fCmdBuffer.back().fType));
506 const GrTraceMarkerSet& activeTraceMarkers = this->getActiveTraceMarkers(); 520 const GrTraceMarkerSet& activeTraceMarkers = this->getActiveTraceMarkers();
507 if (activeTraceMarkers.count() > 0) { 521 if (activeTraceMarkers.count() > 0) {
508 fCmdBuffer.back().fType = add_trace_bit(fCmdBuffer.back().fType); 522 fCmdBuffer.back().fType = add_trace_bit(fCmdBuffer.back().fType);
509 fGpuCmdMarkers.push_back(activeTraceMarkers); 523 fGpuCmdMarkers.push_back(activeTraceMarkers);
510 } 524 }
511 } 525 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698