Revert "Move atlas manager creation to GrContext derived classes"
This reverts commit e5b7ceeac865fb8a3bab82a73d65752c78682718.
Reason for revert: Breaking Mus/Viz tests in Chrome roll
Original change's description:
> Move atlas manager creation to GrContext derived classes
>
> This CL relies on: https://skia-review.googlesource.com/c/skia/+/108001 (Fission GrAtlasGlyphCache in two)
>
> TBR=bsalomon@google.com
> Change-Id: Ic3f91cea2238221b970f8ebbda99b10202925cd8
> Reviewed-on: https://skia-review.googlesource.com/110621
> Commit-Queue: Robert Phillips <robertphillips@google.com>
> Reviewed-by: Greg Daniel <egdaniel@google.com>
TBR=egdaniel@google.com,jvanverth@google.com,bsalomon@google.com,robertphillips@google.com
Change-Id: I3973463b7b837145d9732171a91d82f0f0cea148
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://skia-review.googlesource.com/110821
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
diff --git a/src/gpu/GrContext.cpp b/src/gpu/GrContext.cpp
index c61a6c1..6fbc4fe0 100644
--- a/src/gpu/GrContext.cpp
+++ b/src/gpu/GrContext.cpp
@@ -64,123 +64,22 @@
class SK_API GrDirectContext : public GrContext {
public:
- GrDirectContext(GrBackend backend)
- : INHERITED(backend)
- , fFullAtlasManager(nullptr) {
- }
-
- ~GrDirectContext() override {
- this->flush();
-
- delete fFullAtlasManager;
- }
-
- void abandonContext() override {
- INHERITED::abandonContext();
- fFullAtlasManager->freeAll();
- }
-
- void releaseResourcesAndAbandonContext() override {
- INHERITED::releaseResourcesAndAbandonContext();
- fFullAtlasManager->freeAll();
- }
-
- void freeGpuResources() override {
- this->flush();
- fFullAtlasManager->freeAll();
-
- INHERITED::freeGpuResources();
- }
+ GrDirectContext(GrBackend backend) : INHERITED(backend) { }
protected:
- bool init(const GrContextOptions& options) override {
- if (!INHERITED::init(options)) {
- return false;
- }
-
- GrDrawOpAtlas::AllowMultitexturing allowMultitexturing;
- if (GrContextOptions::Enable::kNo == options.fAllowMultipleGlyphCacheTextures ||
- // multitexturing supported only if range can represent the index + texcoords fully
- !(fCaps->shaderCaps()->floatIs32Bits() || fCaps->shaderCaps()->integerSupport())) {
- allowMultitexturing = GrDrawOpAtlas::AllowMultitexturing::kNo;
- } else {
- allowMultitexturing = GrDrawOpAtlas::AllowMultitexturing::kYes;
- }
-
- GrGlyphCache* glyphCache = this->contextPriv().getGlyphCache();
- GrProxyProvider* proxyProvider = this->contextPriv().proxyProvider();
-
- fFullAtlasManager = new GrAtlasManager(proxyProvider, glyphCache,
- options.fGlyphCacheTextureMaximumBytes,
- allowMultitexturing);
- this->contextPriv().addOnFlushCallbackObject(fFullAtlasManager);
-
- glyphCache->setGlyphSizeLimit(fFullAtlasManager->getGlyphSizeLimit());
- return true;
- }
-
- GrRestrictedAtlasManager* onGetRestrictedAtlasManager() override { return fFullAtlasManager; }
- GrAtlasManager* onGetFullAtlasManager() override { return fFullAtlasManager; }
private:
- GrAtlasManager* fFullAtlasManager;
-
typedef GrContext INHERITED;
};
-/**
- * The DDL Context is the one in effect during DDL Recording. It isn't backed by a GrGPU and
- * cannot allocate any GPU resources.
- */
class SK_API GrDDLContext : public GrContext {
public:
- GrDDLContext(GrContextThreadSafeProxy* proxy)
- : INHERITED(proxy)
- , fRestrictedAtlasManager(nullptr) {
- }
-
- ~GrDDLContext() override {
- // The GrDDLContext doesn't actually own the fRestrictedAtlasManager so don't delete it
- }
-
- void abandonContext() override {
- SkASSERT(0); // abandoning in a DDL Recorder doesn't make a whole lot of sense
- INHERITED::abandonContext();
- }
-
- void releaseResourcesAndAbandonContext() override {
- SkASSERT(0); // abandoning in a DDL Recorder doesn't make a whole lot of sense
- INHERITED::releaseResourcesAndAbandonContext();
- }
-
- void freeGpuResources() override {
- SkASSERT(0); // freeing resources in a DDL Recorder doesn't make a whole lot of sense
- INHERITED::freeGpuResources();
- }
+ GrDDLContext(GrContextThreadSafeProxy* proxy) : INHERITED(proxy) {}
protected:
- bool init(const GrContextOptions& options) override {
- if (!INHERITED::init(options)) {
- return false;
- }
-
- // DDL TODO: in DDL-mode grab a GrRestrictedAtlasManager from the thread-proxy and
- // do not add an onFlushCB
- return true;
- }
-
- GrRestrictedAtlasManager* onGetRestrictedAtlasManager() override {
- return fRestrictedAtlasManager;
- }
-
- GrAtlasManager* onGetFullAtlasManager() override {
- SkASSERT(0); // the DDL Recorders should never invoke this
- return nullptr;
- }
+ // DDL TODO: grab a GrRestrictedAtlasManager from the proxy
private:
- GrRestrictedAtlasManager* fRestrictedAtlasManager;
-
typedef GrContext INHERITED;
};
@@ -281,7 +180,7 @@
}
sk_sp<GrContext> GrContext::MakeMetal(void* device, void* queue, const GrContextOptions& options) {
- sk_sp<GrContext> context(new GrDirectContext(kMetal_GrBackend));
+ sk_sp<GrContext> context(new GrContext(kMetal_GrBackend));
context->fGpu = GrMtlTrampoline::MakeGpu(context.get(), options, device, queue);
if (!context->fGpu) {
@@ -321,6 +220,7 @@
fResourceProvider = nullptr;
fProxyProvider = nullptr;
fGlyphCache = nullptr;
+ fFullAtlasManager = nullptr;
}
GrContext::GrContext(GrContextThreadSafeProxy* proxy)
@@ -331,6 +231,7 @@
fResourceProvider = nullptr;
fProxyProvider = nullptr;
fGlyphCache = nullptr;
+ fFullAtlasManager = nullptr;
}
bool GrContext::init(const GrContextOptions& options) {
@@ -387,8 +288,26 @@
fDrawingManager.reset(new GrDrawingManager(this, prcOptions, atlasTextContextOptions,
&fSingleOwner, options.fSortRenderTargets));
+ GrDrawOpAtlas::AllowMultitexturing allowMultitexturing;
+ if (GrContextOptions::Enable::kNo == options.fAllowMultipleGlyphCacheTextures ||
+ // multitexturing supported only if range can represent the index + texcoords fully
+ !(fCaps->shaderCaps()->floatIs32Bits() || fCaps->shaderCaps()->integerSupport())) {
+ allowMultitexturing = GrDrawOpAtlas::AllowMultitexturing::kNo;
+ } else {
+ allowMultitexturing = GrDrawOpAtlas::AllowMultitexturing::kYes;
+ }
+
fGlyphCache = new GrGlyphCache;
+ // DDL TODO: in DDL-mode grab a GrRestrictedAtlasManager from the thread-proxy and
+ // do not add an onFlushCB
+ fFullAtlasManager = new GrAtlasManager(fProxyProvider, fGlyphCache,
+ options.fGlyphCacheTextureMaximumBytes,
+ allowMultitexturing);
+ this->contextPriv().addOnFlushCallbackObject(fFullAtlasManager);
+
+ fGlyphCache->setGlyphSizeLimit(fFullAtlasManager->getGlyphSizeLimit());
+
fTextBlobCache.reset(new GrTextBlobCache(TextBlobCacheOverBudgetCB,
this, this->uniqueID(), SkToBool(fGpu)));
@@ -404,6 +323,10 @@
GrContext::~GrContext() {
ASSERT_SINGLE_OWNER
+ if (fGpu) {
+ this->flush();
+ }
+
if (fDrawingManager) {
fDrawingManager->cleanup();
}
@@ -416,6 +339,7 @@
delete fResourceCache;
delete fProxyProvider;
delete fGlyphCache;
+ delete fFullAtlasManager;
}
sk_sp<GrContextThreadSafeProxy> GrContext::threadSafeProxy() {
@@ -475,6 +399,7 @@
fGpu->disconnect(GrGpu::DisconnectType::kAbandon);
fGlyphCache->freeAll();
+ fFullAtlasManager->freeAll();
fTextBlobCache->freeAll();
}
@@ -494,6 +419,7 @@
fGpu->disconnect(GrGpu::DisconnectType::kCleanup);
fGlyphCache->freeAll();
+ fFullAtlasManager->freeAll();
fTextBlobCache->freeAll();
}
@@ -505,7 +431,10 @@
void GrContext::freeGpuResources() {
ASSERT_SINGLE_OWNER
+ this->flush();
+
fGlyphCache->freeAll();
+ fFullAtlasManager->freeAll();
fDrawingManager->freeGpuResources();