During flush store GrOp draw and upload records on GrOpFlushState instead of on the ops themselves.
Bug: skia:
Change-Id: Id99267d9e7762829a3f9bebce0e92e7b97a092f8
Reviewed-on: https://skia-review.googlesource.com/66680
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
diff --git a/src/gpu/ops/GrMeshDrawOp.cpp b/src/gpu/ops/GrMeshDrawOp.cpp
index a00af15..0bc782c 100644
--- a/src/gpu/ops/GrMeshDrawOp.cpp
+++ b/src/gpu/ops/GrMeshDrawOp.cpp
@@ -10,8 +10,7 @@
#include "GrOpFlushState.h"
#include "GrResourceProvider.h"
-GrMeshDrawOp::GrMeshDrawOp(uint32_t classID)
- : INHERITED(classID), fBaseDrawToken(GrDeferredUploadToken::AlreadyFlushedToken()) {}
+GrMeshDrawOp::GrMeshDrawOp(uint32_t classID) : INHERITED(classID) {}
void GrMeshDrawOp::onPrepare(GrOpFlushState* state) { this->onPrepareDraws(state); }
@@ -57,28 +56,5 @@
}
void GrMeshDrawOp::onExecute(GrOpFlushState* state) {
- int currUploadIdx = 0;
- int currMeshIdx = 0;
-
- SkASSERT(fQueuedDraws.empty() || fBaseDrawToken == state->nextTokenToFlush());
- SkASSERT(state->rtCommandBuffer());
-
- for (int currDrawIdx = 0; currDrawIdx < fQueuedDraws.count(); ++currDrawIdx) {
- GrDeferredUploadToken drawToken = state->nextTokenToFlush();
- while (currUploadIdx < fInlineUploads.count() &&
- fInlineUploads[currUploadIdx].fUploadBeforeToken == drawToken) {
- state->rtCommandBuffer()->inlineUpload(state, fInlineUploads[currUploadIdx++].fUpload);
- }
- const QueuedDraw& draw = fQueuedDraws[currDrawIdx];
- SkASSERT(draw.fPipeline->proxy() == state->drawOpArgs().fProxy);
- state->rtCommandBuffer()->draw(*draw.fPipeline, *draw.fGeometryProcessor.get(),
- fMeshes.begin() + currMeshIdx, nullptr, draw.fMeshCnt,
- this->bounds());
- currMeshIdx += draw.fMeshCnt;
- state->flushToken();
- }
- SkASSERT(currUploadIdx == fInlineUploads.count());
- SkASSERT(currMeshIdx == fMeshes.count());
- fQueuedDraws.reset();
- fInlineUploads.reset();
+ state->executeDrawsAndUploadsForMeshDrawOp(this->uniqueID(), this->bounds());
}