diff options
author | Robert Phillips <robertphillips@google.com> | 2018-02-26 16:03:50 +0000 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-02-26 16:03:58 +0000 |
commit | 84d823a5e2a03b09f7db4964218b9e04e821c878 (patch) | |
tree | 1c62ea7e845f100ffcc6cfa71199eeee5a8084c7 /src/gpu/GrDrawOpAtlas.h | |
parent | aad2ec69f32bad4eef0663600d606e4526488f16 (diff) |
Revert "Separate creation time & flush time behavior in GrDrawOpAtlas (take 2)"
This reverts commit 96165ebeaa36a2aae0eedaf12d81f53d3caf999a.
Reason for revert: DFT GMs w/ LCD text are slightly different
Original change's description:
> Separate creation time & flush time behavior in GrDrawOpAtlas (take 2)
>
> This CL clarifies what is going on in the GrDrawOpAtlas and GrAtlasGlyphCache.
>
> For the GrDrawOpAtlas:
> At creation time all the allowed pages are created (with their backing GrTextureProxies) but they aren't instantiated.
>
> The GrDrawOpAtlas::instantiate call is called in preFlushCB and allocates any pages known to be needed at the start of flush
>
> GrDrawOpAtlas::addToAtlas is called at flush time and, if a new page is activated, will instantiated it at that time.
>
> During compaction, an unused page will be deInstantiated but its Plots and backing GrTextureProxy will remain alive.
>
> The GrAtlasGlyphCache reflects the changes to the GrDrawOpAtlas
> It now carries a GrProxyProvider for when it needs to create an atlas
> It passes in a GrResourceProvider* at flush time to allow instantiation.
>
> It does not, yet, allocate that GrDrawOpAtlases it might ever require.
>
> Change-Id: Ie9b64b13e261b01ee14be09fbf7e17841b7781dc
> Reviewed-on: https://skia-review.googlesource.com/109749
> Reviewed-by: Jim Van Verth <jvanverth@google.com>
> Commit-Queue: Robert Phillips <robertphillips@google.com>
TBR=jvanverth@google.com,robertphillips@google.com
Change-Id: I62efc61c8394477e54d6e79fa2f65180c91a4515
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://skia-review.googlesource.com/110220
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
Diffstat (limited to 'src/gpu/GrDrawOpAtlas.h')
-rw-r--r-- | src/gpu/GrDrawOpAtlas.h | 34 |
1 files changed, 14 insertions, 20 deletions
diff --git a/src/gpu/GrDrawOpAtlas.h b/src/gpu/GrDrawOpAtlas.h index b849d9e067..a2c985928d 100644 --- a/src/gpu/GrDrawOpAtlas.h +++ b/src/gpu/GrDrawOpAtlas.h @@ -91,8 +91,7 @@ public: * eviction occurs * @return An initialized GrDrawOpAtlas, or nullptr if creation fails */ - static std::unique_ptr<GrDrawOpAtlas> Make(GrProxyProvider*, GrPixelConfig, - int width, int height, + static std::unique_ptr<GrDrawOpAtlas> Make(GrContext*, GrPixelConfig, int width, int height, int numPlotsX, int numPlotsY, AllowMultitexturing allowMultitexturing, GrDrawOpAtlas::EvictionFunc func, void* data); @@ -109,21 +108,19 @@ public: * 'setUseToken' with the currentToken from the GrDrawOp::Target, otherwise the next call to * addToAtlas might cause the previous data to be overwritten before it has been read. */ - bool addToAtlas(GrResourceProvider*, AtlasID*, GrDeferredUploadTarget*, int width, int height, - const void* image, SkIPoint16* loc); + bool addToAtlas(AtlasID*, GrDeferredUploadTarget*, int width, int height, const void* image, + SkIPoint16* loc); + GrContext* context() const { return fContext; } const sk_sp<GrTextureProxy>* getProxies() const { return fProxies; } uint64_t atlasGeneration() const { return fAtlasGeneration; } inline bool hasID(AtlasID id) { - if (kInvalidAtlasID == id) { - return false; - } uint32_t plot = GetPlotIndexFromID(id); SkASSERT(plot < fNumPlots); uint32_t page = GetPageIndexFromID(id); - SkASSERT(page < fNumActivePages); + SkASSERT(page < fNumPages); return fPages[page].fPlotArray[plot]->genID() == GetGenerationFromID(id); } @@ -133,7 +130,7 @@ public: uint32_t plotIdx = GetPlotIndexFromID(id); SkASSERT(plotIdx < fNumPlots); uint32_t pageIdx = GetPageIndexFromID(id); - SkASSERT(pageIdx < fNumActivePages); + SkASSERT(pageIdx < fNumPages); Plot* plot = fPages[pageIdx].fPlotArray[plotIdx].get(); this->makeMRU(plot, pageIdx); plot->setLastUseToken(token); @@ -145,7 +142,7 @@ public: data->fData = userData; } - uint32_t numActivePages() { return fNumActivePages; } + uint32_t pageCount() { return fNumPages; } /** * A class which can be handed back to GrDrawOpAtlas for updating last use tokens in bulk. The @@ -207,7 +204,7 @@ public: const BulkUseTokenUpdater::PlotData& pd = updater.fPlotsToUpdate[i]; // it's possible we've added a plot to the updater and subsequently the plot's page // was deleted -- so we check to prevent a crash - if (pd.fPageIndex < fNumActivePages) { + if (pd.fPageIndex < fNumPages) { Plot* plot = fPages[pd.fPageIndex].fPlotArray[pd.fPlotIndex].get(); this->makeMRU(plot, pd.fPageIndex); plot->setLastUseToken(token); @@ -228,14 +225,12 @@ public: void instantiate(GrOnFlushResourceProvider*); +private: uint32_t maxPages() const { return AllowMultitexturing::kYes == fAllowMultitexturing ? kMaxMultitexturePages : 1; } - int numAllocated_TestingOnly() const; - -private: - GrDrawOpAtlas(GrProxyProvider*, GrPixelConfig, int width, int height, int numPlotsX, + GrDrawOpAtlas(GrContext*, GrPixelConfig config, int width, int height, int numPlotsX, int numPlotsY, AllowMultitexturing allowMultitexturing); /** @@ -359,9 +354,8 @@ private: // the front and remove from the back there is no need for MRU. } - bool createPages(GrProxyProvider*); - bool activateNewPage(GrResourceProvider*); - void deactivateLastPage(); + bool createNewPage(); + void deleteLastPage(); void processEviction(AtlasID); inline void processEvictionAndResetRects(Plot* plot) { @@ -369,6 +363,7 @@ private: plot->resetRects(); } + GrContext* fContext; GrPixelConfig fPixelConfig; int fTextureWidth; int fTextureHeight; @@ -397,8 +392,7 @@ private: sk_sp<GrTextureProxy> fProxies[kMaxMultitexturePages]; Page fPages[kMaxMultitexturePages]; AllowMultitexturing fAllowMultitexturing; - - uint32_t fNumActivePages; + uint32_t fNumPages; }; #endif |