Move DrawingManager to RecordingContext
This CL does make use of a new GrRecordingContextPriv backdoor to break CL deadlocks. This occurs when this CL tries to create GrContext-dependent objects outside its scope.
Change-Id: I278fe9d321f8e0a4f5e9b489b1a5cc01b8974521
Reviewed-on: https://skia-review.googlesource.com/c/191287
Reviewed-by: Greg Daniel <egdaniel@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
diff --git a/src/gpu/GrRecordingContext.cpp b/src/gpu/GrRecordingContext.cpp
index ebd9373..7384e3c 100644
--- a/src/gpu/GrRecordingContext.cpp
+++ b/src/gpu/GrRecordingContext.cpp
@@ -60,6 +60,42 @@
fTextBlobCache.reset(new GrTextBlobCache(textblobcache_overbudget_CB, this,
this->contextID()));
+ GrPathRendererChain::Options prcOptions;
+ prcOptions.fAllowPathMaskCaching = this->options().fAllowPathMaskCaching;
+#if GR_TEST_UTILS
+ prcOptions.fGpuPathRenderers = this->options().fGpuPathRenderers;
+#endif
+ if (this->options().fDisableCoverageCountingPaths) {
+ prcOptions.fGpuPathRenderers &= ~GpuPathRenderers::kCoverageCounting;
+ }
+ if (this->options().fDisableDistanceFieldPaths) {
+ prcOptions.fGpuPathRenderers &= ~GpuPathRenderers::kSmall;
+ }
+
+ if (!this->proxyProvider()->renderingDirectly()) {
+ // DDL TODO: remove this crippling of the path renderer chain
+ // Disable the small path renderer bc of the proxies in the atlas. They need to be
+ // unified when the opLists are added back to the destination drawing manager.
+ prcOptions.fGpuPathRenderers &= ~GpuPathRenderers::kSmall;
+ }
+
+ GrTextContext::Options textContextOptions;
+ textContextOptions.fMaxDistanceFieldFontSize = this->options().fGlyphsAsPathsFontSize;
+ textContextOptions.fMinDistanceFieldFontSize = this->options().fMinDistanceFieldFontSize;
+ textContextOptions.fDistanceFieldVerticesAlwaysHaveW = false;
+#if SK_SUPPORT_ATLAS_TEXT
+ if (GrContextOptions::Enable::kYes == this->options().fDistanceFieldGlyphVerticesAlwaysHaveW) {
+ textContextOptions.fDistanceFieldVerticesAlwaysHaveW = true;
+ }
+#endif
+
+ fDrawingManager.reset(new GrDrawingManager(this,
+ prcOptions,
+ textContextOptions,
+ this->singleOwner(),
+ this->explicitlyAllocateGPUResources(),
+ this->options().fSortRenderTargets,
+ this->options().fReduceOpListSplitting));
return true;
}
@@ -70,6 +106,10 @@
fTextBlobCache->freeAll();
}
+GrDrawingManager* GrRecordingContext::drawingManager() {
+ return fDrawingManager.get();
+}
+
sk_sp<GrOpMemoryPool> GrRecordingContext::refOpMemoryPool() {
if (!fOpMemoryPool) {
// DDL TODO: should the size of the memory pool be decreased in DDL mode? CPU-side memory
@@ -177,7 +217,6 @@
return nullptr;
}
- // CONTEXT TODO: move GrDrawingManager to GrRecordingContext for real
auto drawingManager = this->drawingManager();
sk_sp<GrRenderTargetContext> renderTargetContext =