diff options
Diffstat (limited to 'src/gpu/GrRenderTargetOpList.cpp')
-rw-r--r-- | src/gpu/GrRenderTargetOpList.cpp | 38 |
1 files changed, 15 insertions, 23 deletions
diff --git a/src/gpu/GrRenderTargetOpList.cpp b/src/gpu/GrRenderTargetOpList.cpp index 4c4e2ad5d3..0bc6708f3a 100644 --- a/src/gpu/GrRenderTargetOpList.cpp +++ b/src/gpu/GrRenderTargetOpList.cpp @@ -87,7 +87,7 @@ void GrRenderTargetOpList::validateTargetsSingleRenderTarget() const { #endif void GrRenderTargetOpList::prepareOps(GrOpFlushState* flushState) { - SkASSERT(this->isClosed()); + // MDB TODO: add SkASSERT(this->isClosed()); // Loop over the ops that haven't yet been prepared. for (int i = 0; i < fRecordedOps.count(); ++i) { @@ -140,34 +140,34 @@ bool GrRenderTargetOpList::executeOps(GrOpFlushState* flushState) { if (0 == fRecordedOps.count()) { return false; } - -#ifdef SK_DEBUG - GrSurface* target = fTarget->instantiate(flushState->resourceProvider()); - if (!target) { - return false; - } - const GrRenderTarget* currentRenderTarget = target->asRenderTarget(); + // Draw all the generated geometry. + const GrRenderTarget* currentRenderTarget = fRecordedOps[0].fRenderTarget.get(); SkASSERT(currentRenderTarget); -#endif + std::unique_ptr<GrGpuCommandBuffer> commandBuffer; - std::unique_ptr<GrGpuCommandBuffer> commandBuffer = create_command_buffer(fGpu); - flushState->setCommandBuffer(commandBuffer.get()); - - // Draw all the generated geometry. for (int i = 0; i < fRecordedOps.count(); ++i) { if (!fRecordedOps[i].fOp) { continue; } - SkASSERT(fRecordedOps[i].fRenderTarget.get() == currentRenderTarget); + SkASSERT(fRecordedOps[i].fRenderTarget.get()); if (fRecordedOps[i].fOp->needsCommandBufferIsolation()) { // This op is a special snowflake and must occur between command buffers // TODO: make this go through the command buffer finish_command_buffer(commandBuffer.get()); + currentRenderTarget = fRecordedOps[i].fRenderTarget.get(); commandBuffer.reset(); flushState->setCommandBuffer(commandBuffer.get()); + } else if (fRecordedOps[i].fRenderTarget.get() != currentRenderTarget) { + // Changing renderTarget + // MDB TODO: this code path goes away + finish_command_buffer(commandBuffer.get()); + currentRenderTarget = fRecordedOps[i].fRenderTarget.get(); + + commandBuffer = create_command_buffer(fGpu); + flushState->setCommandBuffer(commandBuffer.get()); } else if (!commandBuffer) { commandBuffer = create_command_buffer(fGpu); flushState->setCommandBuffer(commandBuffer.get()); @@ -255,7 +255,6 @@ void GrRenderTargetOpList::fullClear(GrRenderTargetContext* renderTargetContext, //////////////////////////////////////////////////////////////////////////////// -// MDB TODO: fuse with GrTextureOpList::copySurface bool GrRenderTargetOpList::copySurface(GrResourceProvider* resourceProvider, GrRenderTargetContext* dst, GrSurfaceProxy* src, @@ -312,13 +311,6 @@ GrOp* GrRenderTargetOpList::recordOp(std::unique_ptr<GrOp> op, return nullptr; } -#ifdef SK_DEBUG - if (!fRecordedOps.empty()) { - GrRenderTargetOpList::RecordedOp& back = fRecordedOps.back(); - SkASSERT(back.fRenderTarget == renderTarget); - } -#endif - // A closed GrOpList should never receive new/more ops SkASSERT(!this->isClosed()); @@ -418,7 +410,7 @@ void GrRenderTargetOpList::forwardCombine() { fRecordedOps[j].fOp = std::move(fRecordedOps[i].fOp); break; } - // Stop traversing if we would cause a painter's order violation. + // Stop going traversing if we would cause a painter's order violation. if (!can_reorder(fRecordedOps[j].fOp->bounds(), op->bounds())) { GrOP_INFO("\t\tForward: Intersects with (%s, opID: %u)\n", candidate.fOp->name(), candidate.fOp->uniqueID()); |