aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/GrRenderTargetOpList.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gpu/GrRenderTargetOpList.cpp')
-rw-r--r--src/gpu/GrRenderTargetOpList.cpp38
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());