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

Unified Diff: src/gpu/GrBatchAtlas.cpp

Issue 1286043004: Make GrVertexBatch objects hold their own draws during GrDrawTarget flush (Closed) Base URL: https://skia.googlesource.com/skia.git@m
Patch Set: forward decl Created 5 years, 4 months 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/gpu/GrBatchAtlas.h ('k') | src/gpu/GrBatchFlushState.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/gpu/GrBatchAtlas.cpp
diff --git a/src/gpu/GrBatchAtlas.cpp b/src/gpu/GrBatchAtlas.cpp
index 3ce157c710a7bb869585fadb8adfa07d0b4d384b..f75df8bf126df38fe57be9c5b1f8ba6b153d1363 100644
--- a/src/gpu/GrBatchAtlas.cpp
+++ b/src/gpu/GrBatchAtlas.cpp
@@ -6,8 +6,7 @@
*/
#include "GrBatchAtlas.h"
-#include "GrBatchTarget.h"
-#include "GrGpu.h"
+#include "GrBatchFlushState.h"
#include "GrRectanizer.h"
#include "GrTracing.h"
#include "GrVertexBuffer.h"
@@ -32,8 +31,6 @@ static GrBatchAtlas::AtlasID create_id(uint32_t index, uint64_t generation) {
class BatchPlot : public SkRefCnt {
public:
- typedef GrBatchAtlas::BatchToken BatchToken;
-
SK_DECLARE_INTERNAL_LLIST_INTERFACE(BatchPlot);
// index() refers to the index of the plot in the owning GrAtlas's plot array. genID() is a
@@ -82,18 +79,18 @@ public:
// to issue a new upload even if we update the cpu backing store. We use lastref to determine
// when we can evict a plot from the cache, ie if the last ref has already flushed through
// the gpu then we can reuse the plot
- BatchToken lastUploadToken() const { return fLastUpload; }
- BatchToken lastUseToken() const { return fLastUse; }
- void setLastUploadToken(BatchToken batchToken) {
+ GrBatchToken lastUploadToken() const { return fLastUpload; }
+ GrBatchToken lastUseToken() const { return fLastUse; }
+ void setLastUploadToken(GrBatchToken batchToken) {
SkASSERT(batchToken >= fLastUpload);
fLastUpload = batchToken;
}
- void setLastUseToken(BatchToken batchToken) {
+ void setLastUseToken(GrBatchToken batchToken) {
SkASSERT(batchToken >= fLastUse);
fLastUse = batchToken;
}
- void uploadToTexture(GrBatchTarget::TextureUploader uploader) {
+ void uploadToTexture(GrBatchUploader::TextureUploader* uploader) {
// We should only be issuing uploads if we are in fact dirty
SkASSERT(fDirty && fData && fTexture);
TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("skia.gpu"), "GrBatchPlot::uploadToTexture");
@@ -101,10 +98,10 @@ public:
const unsigned char* dataPtr = fData;
dataPtr += rowBytes * fDirtyRect.fTop;
dataPtr += fBytesPerPixel * fDirtyRect.fLeft;
- uploader.writeTexturePixels(fTexture,
- fOffset.fX + fDirtyRect.fLeft, fOffset.fY + fDirtyRect.fTop,
- fDirtyRect.width(), fDirtyRect.height(),
- fTexture->config(), dataPtr, rowBytes);
+ uploader->writeTexturePixels(fTexture,
+ fOffset.fX + fDirtyRect.fLeft, fOffset.fY + fDirtyRect.fTop,
+ fDirtyRect.width(), fDirtyRect.height(),
+ fTexture->config(), dataPtr, rowBytes);
fDirtyRect.setEmpty();
SkDEBUGCODE(fDirty = false;)
}
@@ -175,8 +172,8 @@ private:
fTexture = texture;
}
- BatchToken fLastUpload;
- BatchToken fLastUse;
+ GrBatchToken fLastUpload;
+ GrBatchToken fLastUse;
uint32_t fIndex;
uint64_t fGenID;
@@ -201,7 +198,7 @@ private:
////////////////////////////////////////////////////////////////////////////////
-class GrPlotUploader : public GrBatchTarget::Uploader {
+class GrPlotUploader : public GrBatchUploader {
public:
GrPlotUploader(BatchPlot* plot)
: INHERITED(plot->lastUploadToken())
@@ -209,14 +206,14 @@ public:
SkASSERT(plot);
}
- void upload(GrBatchTarget::TextureUploader uploader) override {
+ void upload(TextureUploader* uploader) override {
fPlot->uploadToTexture(uploader);
}
private:
SkAutoTUnref<BatchPlot> fPlot;
- typedef GrBatchTarget::Uploader INHERITED;
+ typedef GrBatchUploader INHERITED;
};
///////////////////////////////////////////////////////////////////////////////
@@ -273,21 +270,21 @@ void GrBatchAtlas::makeMRU(BatchPlot* plot) {
fPlotList.addToHead(plot);
}
-inline void GrBatchAtlas::updatePlot(GrBatchTarget* batchTarget, AtlasID* id, BatchPlot* plot) {
+inline void GrBatchAtlas::updatePlot(GrDrawBatch::Target* target, AtlasID* id, BatchPlot* plot) {
this->makeMRU(plot);
// If our most recent upload has already occurred then we have to insert a new
// upload. Otherwise, we already have a scheduled upload that hasn't yet ocurred.
// This new update will piggy back on that previously scheduled update.
- if (batchTarget->isIssued(plot->lastUploadToken())) {
- plot->setLastUploadToken(batchTarget->asapToken());
+ if (target->hasTokenBeenFlushed(plot->lastUploadToken())) {
+ plot->setLastUploadToken(target->asapToken());
SkAutoTUnref<GrPlotUploader> uploader(SkNEW_ARGS(GrPlotUploader, (plot)));
- batchTarget->upload(uploader);
+ target->upload(uploader);
}
*id = plot->id();
}
-bool GrBatchAtlas::addToAtlas(AtlasID* id, GrBatchTarget* batchTarget,
+bool GrBatchAtlas::addToAtlas(AtlasID* id, GrDrawBatch::Target* batchTarget,
int width, int height, const void* image, SkIPoint16* loc) {
// We should already have a texture, TODO clean this up
SkASSERT(fTexture &&
@@ -311,7 +308,7 @@ bool GrBatchAtlas::addToAtlas(AtlasID* id, GrBatchTarget* batchTarget,
plotIter.init(fPlotList, GrBatchPlotList::Iter::kTail_IterStart);
plot = plotIter.get();
SkASSERT(plot);
- if (batchTarget->isIssued(plot->lastUseToken())) {
+ if (batchTarget->hasTokenBeenFlushed(plot->lastUseToken())) {
this->processEviction(plot->id());
plot->resetRects();
SkDEBUGCODE(bool verify = )plot->addSubImage(width, height, image, loc, fBPP * width);
@@ -362,7 +359,7 @@ bool GrBatchAtlas::hasID(AtlasID id) {
return fPlotArray[index]->genID() == GetGenerationFromID(id);
}
-void GrBatchAtlas::setLastUseToken(AtlasID id, BatchToken batchToken) {
+void GrBatchAtlas::setLastUseToken(AtlasID id, GrBatchToken batchToken) {
SkASSERT(this->hasID(id));
uint32_t index = GetIndexFromID(id);
SkASSERT(index < fNumPlotsX * fNumPlotsY);
@@ -370,7 +367,8 @@ void GrBatchAtlas::setLastUseToken(AtlasID id, BatchToken batchToken) {
fPlotArray[index]->setLastUseToken(batchToken);
}
-void GrBatchAtlas::setLastUseTokenBulk(const BulkUseTokenUpdater& updater, BatchToken batchToken) {
+void GrBatchAtlas::setLastUseTokenBulk(const BulkUseTokenUpdater& updater,
+ GrBatchToken batchToken) {
int count = updater.fPlotsToUpdate.count();
for (int i = 0; i < count; i++) {
BatchPlot* plot = fPlotArray[updater.fPlotsToUpdate[i]];
« no previous file with comments | « src/gpu/GrBatchAtlas.h ('k') | src/gpu/GrBatchFlushState.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698