| OLD | NEW |
| 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 |
| 11 #include "GrAuditTrail.h" |
| 11 #include "GrCaps.h" | 12 #include "GrCaps.h" |
| 12 #include "GrGpu.h" | 13 #include "GrGpu.h" |
| 13 #include "GrPath.h" | 14 #include "GrPath.h" |
| 14 #include "GrPipeline.h" | 15 #include "GrPipeline.h" |
| 15 #include "GrMemoryPool.h" | 16 #include "GrMemoryPool.h" |
| 16 #include "GrRenderTarget.h" | 17 #include "GrRenderTarget.h" |
| 17 #include "GrResourceProvider.h" | 18 #include "GrResourceProvider.h" |
| 18 #include "GrRenderTargetPriv.h" | 19 #include "GrRenderTargetPriv.h" |
| 19 #include "GrSurfacePriv.h" | 20 #include "GrSurfacePriv.h" |
| 20 #include "GrTexture.h" | 21 #include "GrTexture.h" |
| 21 #include "GrVertexBuffer.h" | 22 #include "GrVertexBuffer.h" |
| 22 | 23 |
| 24 #include "SkStrokeRec.h" |
| 25 |
| 23 #include "batches/GrClearBatch.h" | 26 #include "batches/GrClearBatch.h" |
| 24 #include "batches/GrCopySurfaceBatch.h" | 27 #include "batches/GrCopySurfaceBatch.h" |
| 25 #include "batches/GrDiscardBatch.h" | 28 #include "batches/GrDiscardBatch.h" |
| 26 #include "batches/GrDrawBatch.h" | 29 #include "batches/GrDrawBatch.h" |
| 27 #include "batches/GrDrawPathBatch.h" | 30 #include "batches/GrDrawPathBatch.h" |
| 28 #include "batches/GrRectBatchFactory.h" | 31 #include "batches/GrRectBatchFactory.h" |
| 29 #include "batches/GrStencilPathBatch.h" | 32 #include "batches/GrStencilPathBatch.h" |
| 30 | 33 |
| 31 #include "SkStrokeRec.h" | |
| 32 | |
| 33 //////////////////////////////////////////////////////////////////////////////// | 34 //////////////////////////////////////////////////////////////////////////////// |
| 34 | 35 |
| 35 // Experimentally we have found that most batching occurs within the first 10 co
mparisons. | 36 // Experimentally we have found that most batching occurs within the first 10 co
mparisons. |
| 36 static const int kDefaultMaxBatchLookback = 10; | 37 static const int kDefaultMaxBatchLookback = 10; |
| 37 | 38 |
| 38 GrDrawTarget::GrDrawTarget(GrRenderTarget* rt, GrGpu* gpu, GrResourceProvider* r
esourceProvider, | 39 GrDrawTarget::GrDrawTarget(GrRenderTarget* rt, GrGpu* gpu, GrResourceProvider* r
esourceProvider, |
| 39 const Options& options) | 40 GrAuditTrail* auditTrail, const Options& options) |
| 40 : fGpu(SkRef(gpu)) | 41 : fGpu(SkRef(gpu)) |
| 41 , fResourceProvider(resourceProvider) | 42 , fResourceProvider(resourceProvider) |
| 43 , fAuditTrail(auditTrail) |
| 42 , fFlags(0) | 44 , fFlags(0) |
| 43 , fRenderTarget(rt) { | 45 , fRenderTarget(rt) { |
| 44 // TODO: Stop extracting the context (currently needed by GrClipMaskManager) | 46 // TODO: Stop extracting the context (currently needed by GrClipMaskManager) |
| 45 fContext = fGpu->getContext(); | 47 fContext = fGpu->getContext(); |
| 46 fClipMaskManager.reset(new GrClipMaskManager(this, options.fClipBatchToBound
s)); | 48 fClipMaskManager.reset(new GrClipMaskManager(this, options.fClipBatchToBound
s)); |
| 47 | 49 |
| 48 fDrawBatchBounds = options.fDrawBatchBounds; | 50 fDrawBatchBounds = options.fDrawBatchBounds; |
| 49 fMaxBatchLookback = (options.fMaxBatchLookback < 0) ? kDefaultMaxBatchLookba
ck : | 51 fMaxBatchLookback = (options.fMaxBatchLookback < 0) ? kDefaultMaxBatchLookba
ck : |
| 50 options.fMaxBatchLookb
ack; | 52 options.fMaxBatchLookb
ack; |
| 51 | 53 |
| (...skipping 407 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 459 } | 461 } |
| 460 | 462 |
| 461 void GrDrawTarget::recordBatch(GrBatch* batch) { | 463 void GrDrawTarget::recordBatch(GrBatch* batch) { |
| 462 // A closed drawTarget should never receive new/more batches | 464 // A closed drawTarget should never receive new/more batches |
| 463 SkASSERT(!this->isClosed()); | 465 SkASSERT(!this->isClosed()); |
| 464 | 466 |
| 465 // Check if there is a Batch Draw we can batch with by linearly searching ba
ck until we either | 467 // Check if there is a Batch Draw we can batch with by linearly searching ba
ck until we either |
| 466 // 1) check every draw | 468 // 1) check every draw |
| 467 // 2) intersect with something | 469 // 2) intersect with something |
| 468 // 3) find a 'blocker' | 470 // 3) find a 'blocker' |
| 469 | 471 GR_AUDIT_TRAIL_ADDBATCH(fAuditTrail, batch->name(), batch->bounds()); |
| 470 GrBATCH_INFO("Re-Recording (%s, B%u)\n" | 472 GrBATCH_INFO("Re-Recording (%s, B%u)\n" |
| 471 "\tBounds LRTB (%f, %f, %f, %f)\n", | 473 "\tBounds LRTB (%f, %f, %f, %f)\n", |
| 472 batch->name(), | 474 batch->name(), |
| 473 batch->uniqueID(), | 475 batch->uniqueID(), |
| 474 batch->bounds().fLeft, batch->bounds().fRight, | 476 batch->bounds().fLeft, batch->bounds().fRight, |
| 475 batch->bounds().fTop, batch->bounds().fBottom); | 477 batch->bounds().fTop, batch->bounds().fBottom); |
| 476 GrBATCH_INFO(SkTabString(batch->dumpInfo(), 1).c_str()); | 478 GrBATCH_INFO(SkTabString(batch->dumpInfo(), 1).c_str()); |
| 477 GrBATCH_INFO("\tOutcome:\n"); | 479 GrBATCH_INFO("\tOutcome:\n"); |
| 478 int maxCandidates = SkTMin(fMaxBatchLookback, fBatches.count()); | 480 int maxCandidates = SkTMin(fMaxBatchLookback, fBatches.count()); |
| 479 if (maxCandidates) { | 481 if (maxCandidates) { |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 536 } | 538 } |
| 537 | 539 |
| 538 return true; | 540 return true; |
| 539 } | 541 } |
| 540 | 542 |
| 541 void GrDrawTarget::clearStencilClip(const SkIRect& rect, bool insideClip, GrRend
erTarget* rt) { | 543 void GrDrawTarget::clearStencilClip(const SkIRect& rect, bool insideClip, GrRend
erTarget* rt) { |
| 542 GrBatch* batch = new GrClearStencilClipBatch(rect, insideClip, rt); | 544 GrBatch* batch = new GrClearStencilClipBatch(rect, insideClip, rt); |
| 543 this->recordBatch(batch); | 545 this->recordBatch(batch); |
| 544 batch->unref(); | 546 batch->unref(); |
| 545 } | 547 } |
| OLD | NEW |