From fdafc0cbe4f81193dde96475c6c431e57db532ee Mon Sep 17 00:00:00 2001 From: Robert Phillips Date: Wed, 25 Aug 2021 16:39:14 -0400 Subject: [PATCH] Move GrAtlasRenderTask to gpu/ops and skgpu::v1 namespace Bug: skia:11837 Change-Id: I29352c0e2c9e987b28be983c3d519a88b589baf1 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/442022 Reviewed-by: Chris Dalton Commit-Queue: Robert Phillips --- gn/gpu.gni | 6 ++-- src/gpu/ops/AtlasPathRenderer.cpp | 20 ++++++------ src/gpu/ops/AtlasPathRenderer.h | 5 +-- .../AtlasRenderTask.cpp} | 32 +++++++++++-------- .../AtlasRenderTask.h} | 18 +++++++---- 5 files changed, 44 insertions(+), 37 deletions(-) rename src/gpu/{tessellate/GrAtlasRenderTask.cpp => ops/AtlasRenderTask.cpp} (86%) rename src/gpu/{tessellate/GrAtlasRenderTask.h => ops/AtlasRenderTask.h} (91%) diff --git a/gn/gpu.gni b/gn/gpu.gni index 7360e8a132..039b45b247 100644 --- a/gn/gpu.gni +++ b/gn/gpu.gni @@ -503,6 +503,8 @@ skia_skgpu_v1_sources = [ "$_src/gpu/ops/AALinearizingConvexPathRenderer.h", "$_src/gpu/ops/AtlasPathRenderer.cpp", "$_src/gpu/ops/AtlasPathRenderer.h", + "$_src/gpu/ops/AtlasRenderTask.cpp", + "$_src/gpu/ops/AtlasRenderTask.h", "$_src/gpu/ops/DashLinePathRenderer.cpp", "$_src/gpu/ops/DashLinePathRenderer.h", "$_src/gpu/ops/DefaultPathRenderer.cpp", @@ -573,10 +575,6 @@ skia_skgpu_v1_sources = [ "$_src/gpu/ops/TriangulatingPathRenderer.cpp", "$_src/gpu/ops/TriangulatingPathRenderer.h", - # tessellate - "$_src/gpu/tessellate/GrAtlasRenderTask.cpp", - "$_src/gpu/tessellate/GrAtlasRenderTask.h", - # v1 "$_src/gpu/v1/ClipStack.cpp", "$_src/gpu/v1/ClipStack.h", diff --git a/src/gpu/ops/AtlasPathRenderer.cpp b/src/gpu/ops/AtlasPathRenderer.cpp index a6b6187224..328389669a 100644 --- a/src/gpu/ops/AtlasPathRenderer.cpp +++ b/src/gpu/ops/AtlasPathRenderer.cpp @@ -14,9 +14,9 @@ #include "src/gpu/GrVx.h" #include "src/gpu/effects/GrModulateAtlasCoverageEffect.h" #include "src/gpu/geometry/GrStyledShape.h" +#include "src/gpu/ops/AtlasRenderTask.h" #include "src/gpu/ops/GrDrawAtlasPathOp.h" #include "src/gpu/ops/TessellationPathRenderer.h" -#include "src/gpu/tessellate/GrAtlasRenderTask.h" #include "src/gpu/tessellate/shaders/GrTessellationShader.h" #include "src/gpu/v1/SurfaceDrawContext_v1.h" @@ -63,10 +63,10 @@ bool is_visible(const SkRect& pathDevBounds, const SkIRect& clipBounds) { // Ensures the atlas dependencies are set up such that each atlas will be totally out of service // before we render the next one in line. This means there will only ever be one atlas active at a // time and that they can all share the same texture. -void validate_atlas_dependencies(const SkTArray>& atlasTasks) { +void validate_atlas_dependencies(const SkTArray>& atlasTasks) { for (int i = atlasTasks.count() - 1; i >= 1; --i) { - GrAtlasRenderTask* atlasTask = atlasTasks[i].get(); - GrAtlasRenderTask* previousAtlasTask = atlasTasks[i - 1].get(); + auto atlasTask = atlasTasks[i].get(); + auto previousAtlasTask = atlasTasks[i - 1].get(); // Double check that atlasTask depends on every dependent of its previous atlas. If this // fires it might mean previousAtlasTask gained a new dependent after atlasTask came into // service (maybe by an op that hadn't yet been added to an opsTask when we registered the @@ -223,8 +223,8 @@ bool AtlasPathRenderer::addPathToAtlas(GrRecordingContext* rContext, !fAtlasRenderTasks.back()->addPath(viewMatrix, path, devIBounds->topLeft(), widthInAtlas, heightInAtlas, *transposedInAtlas, locationInAtlas)) { // We either don't have an atlas yet or the current one is full. Try to replace it. - GrAtlasRenderTask* currentAtlasTask = (!fAtlasRenderTasks.empty()) - ? fAtlasRenderTasks.back().get() : nullptr; + auto currentAtlasTask = (!fAtlasRenderTasks.empty()) ? fAtlasRenderTasks.back().get() + : nullptr; if (currentAtlasTask && drawRefsAtlasCallback && drawRefsAtlasCallback(currentAtlasTask->atlasProxy())) { @@ -237,9 +237,9 @@ bool AtlasPathRenderer::addPathToAtlas(GrRecordingContext* rContext, kAtlasAlpha8Type, GrDynamicAtlas::InternalMultisample::kYes, SkISize{fAtlasInitialSize, fAtlasInitialSize}, fAtlasMaxSize, *rContext->priv().caps(), kAtlasAlgorithm); - auto newAtlasTask = sk_make_sp(rContext, - sk_make_sp(), - std::move(dynamicAtlas)); + auto newAtlasTask = sk_make_sp(rContext, + sk_make_sp(), + std::move(dynamicAtlas)); rContext->priv().drawingManager()->addAtlasTask(newAtlasTask, currentAtlasTask); SkAssertResult(newAtlasTask->addPath(viewMatrix, path, devIBounds->topLeft(), widthInAtlas, heightInAtlas, *transposedInAtlas, locationInAtlas)); @@ -403,7 +403,7 @@ void AtlasPathRenderer::preFlush(GrOnFlushResourceProvider* onFlushRP, GrTexture* firstAtlasTexture = fAtlasRenderTasks[0]->atlasProxy()->peekTexture(); SkASSERT(firstAtlasTexture); for (int i = 1; i < fAtlasRenderTasks.count(); ++i) { - GrAtlasRenderTask* atlasTask = fAtlasRenderTasks[i].get(); + auto atlasTask = fAtlasRenderTasks[i].get(); if (atlasTask->atlasProxy()->backingStoreDimensions() == firstAtlasTexture->dimensions()) { atlasTask->instantiate(onFlushRP, sk_ref_sp(firstAtlasTexture)); } else { diff --git a/src/gpu/ops/AtlasPathRenderer.h b/src/gpu/ops/AtlasPathRenderer.h index 026b7b19aa..2cf48adfd4 100644 --- a/src/gpu/ops/AtlasPathRenderer.h +++ b/src/gpu/ops/AtlasPathRenderer.h @@ -16,12 +16,13 @@ #include "src/gpu/GrOnFlushResourceProvider.h" #include "src/gpu/v1/PathRenderer.h" -class GrAtlasRenderTask; class GrOp; class GrRecordingContext; namespace skgpu::v1 { +class AtlasRenderTask; + // Draws paths by first rendering their coverage mask into an offscreen atlas. class AtlasPathRenderer final : public PathRenderer, public GrOnFlushCallbackObject { public: @@ -94,7 +95,7 @@ private: // A collection of all atlases we've created and used since the last flush. We instantiate these // at flush time during preFlush(). - SkSTArray<4, sk_sp> fAtlasRenderTasks; + SkSTArray<4, sk_sp> fAtlasRenderTasks; // This simple cache remembers the locations of cacheable path masks in the most recent atlas. // Its main motivation is for clip paths. diff --git a/src/gpu/tessellate/GrAtlasRenderTask.cpp b/src/gpu/ops/AtlasRenderTask.cpp similarity index 86% rename from src/gpu/tessellate/GrAtlasRenderTask.cpp rename to src/gpu/ops/AtlasRenderTask.cpp index 569e665e80..5e50eb902f 100644 --- a/src/gpu/tessellate/GrAtlasRenderTask.cpp +++ b/src/gpu/ops/AtlasRenderTask.cpp @@ -5,7 +5,7 @@ * found in the LICENSE file. */ -#include "src/gpu/tessellate/GrAtlasRenderTask.h" +#include "src/gpu/ops/AtlasRenderTask.h" #include "src/core/SkBlendModePriv.h" #include "src/core/SkIPoint16.h" @@ -15,9 +15,11 @@ #include "src/gpu/ops/GrFillRectOp.h" #include "src/gpu/ops/PathStencilCoverOp.h" -GrAtlasRenderTask::GrAtlasRenderTask(GrRecordingContext* rContext, - sk_sp arenas, - std::unique_ptr dynamicAtlas) +namespace skgpu::v1 { + +AtlasRenderTask::AtlasRenderTask(GrRecordingContext* rContext, + sk_sp arenas, + std::unique_ptr dynamicAtlas) : OpsTask(rContext->priv().drawingManager(), dynamicAtlas->writeView(*rContext->priv().caps()), rContext->priv().auditTrail(), @@ -25,9 +27,9 @@ GrAtlasRenderTask::GrAtlasRenderTask(GrRecordingContext* rContext, , fDynamicAtlas(std::move(dynamicAtlas)) { } -bool GrAtlasRenderTask::addPath(const SkMatrix& viewMatrix, const SkPath& path, - SkIPoint pathDevTopLeft, int widthInAtlas, int heightInAtlas, - bool transposedInAtlas, SkIPoint16* locationInAtlas) { +bool AtlasRenderTask::addPath(const SkMatrix& viewMatrix, const SkPath& path, + SkIPoint pathDevTopLeft, int widthInAtlas, int heightInAtlas, + bool transposedInAtlas, SkIPoint16* locationInAtlas) { SkASSERT(!this->isClosed()); SkASSERT(this->isEmpty()); SkASSERT(!fDynamicAtlas->isInstantiated()); // Paths can't be added after instantiate(). @@ -56,8 +58,8 @@ bool GrAtlasRenderTask::addPath(const SkMatrix& viewMatrix, const SkPath& path, return true; } -GrRenderTask::ExpectedOutcome GrAtlasRenderTask::onMakeClosed(GrRecordingContext* rContext, - SkIRect* targetUpdateBounds) { +GrRenderTask::ExpectedOutcome AtlasRenderTask::onMakeClosed(GrRecordingContext* rContext, + SkIRect* targetUpdateBounds) { // We don't add our ops until now, at which point we know the atlas is done being built. SkASSERT(this->isEmpty()); SkASSERT(!fDynamicAtlas->isInstantiated()); // Instantiation happens after makeClosed(). @@ -144,9 +146,9 @@ GrRenderTask::ExpectedOutcome GrAtlasRenderTask::onMakeClosed(GrRecordingContext return ExpectedOutcome::kTargetUnchanged; } -void GrAtlasRenderTask::stencilAtlasRect(GrRecordingContext* rContext, const SkRect& rect, - const SkPMColor4f& color, - const GrUserStencilSettings* stencil) { +void AtlasRenderTask::stencilAtlasRect(GrRecordingContext* rContext, const SkRect& rect, + const SkPMColor4f& color, + const GrUserStencilSettings* stencil) { GrPaint paint; paint.setColor4f(color); paint.setXPFactory(SkBlendMode_AsXPFactory(SkBlendMode::kSrc)); @@ -156,7 +158,7 @@ void GrAtlasRenderTask::stencilAtlasRect(GrRecordingContext* rContext, const SkR this->addAtlasDrawOp(std::move(op), *rContext->priv().caps()); } -void GrAtlasRenderTask::addAtlasDrawOp(GrOp::Owner op, const GrCaps& caps) { +void AtlasRenderTask::addAtlasDrawOp(GrOp::Owner op, const GrCaps& caps) { SkASSERT(!this->isClosed()); auto drawOp = static_cast(op.get()); @@ -171,7 +173,7 @@ void GrAtlasRenderTask::addAtlasDrawOp(GrOp::Owner op, const GrCaps& caps) { this->recordOp(std::move(op), true/*usesMSAA*/, processorAnalysis, nullptr, nullptr, caps); } -bool GrAtlasRenderTask::onExecute(GrOpFlushState* flushState) { +bool AtlasRenderTask::onExecute(GrOpFlushState* flushState) { if (!this->OpsTask::onExecute(flushState)) { return false; } @@ -186,3 +188,5 @@ bool GrAtlasRenderTask::onExecute(GrOpFlushState* flushState) { } return true; } + +} // namespace skgpu::v1 diff --git a/src/gpu/tessellate/GrAtlasRenderTask.h b/src/gpu/ops/AtlasRenderTask.h similarity index 91% rename from src/gpu/tessellate/GrAtlasRenderTask.h rename to src/gpu/ops/AtlasRenderTask.h index 57fb26c538..78469667bf 100644 --- a/src/gpu/tessellate/GrAtlasRenderTask.h +++ b/src/gpu/ops/AtlasRenderTask.h @@ -5,8 +5,8 @@ * found in the LICENSE file. */ -#ifndef GrAtlasRenderTask_DEFINED -#define GrAtlasRenderTask_DEFINED +#ifndef AtlasRenderTask_DEFINED +#define AtlasRenderTask_DEFINED #include "include/core/SkPath.h" #include "src/core/SkTBlockList.h" @@ -16,17 +16,19 @@ struct SkIPoint16; +namespace skgpu::v1 { + // Represents a GrRenderTask that draws paths into an atlas. This task gets added the DAG and left // open, lays out its atlas while future tasks call addPath(), and finally adds its internal draw // ops during onMakeClosed(). // // The atlas texture does not get instantiated automatically. It is the creator's responsibility to // call instantiate() at flush time. -class GrAtlasRenderTask : public skgpu::v1::OpsTask { +class AtlasRenderTask : public OpsTask { public: - GrAtlasRenderTask(GrRecordingContext*, - sk_sp, - std::unique_ptr); + AtlasRenderTask(GrRecordingContext*, + sk_sp, + std::unique_ptr); const GrTextureProxy* atlasProxy() const { return fDynamicAtlas->textureProxy(); } GrSurfaceProxyView readView(const GrCaps& caps) const { return fDynamicAtlas->readView(caps); } @@ -87,4 +89,6 @@ private: AtlasPathList fEvenOddPathList; }; -#endif +} // namespace skgpu::v1 + +#endif // AtlasRenderTask_DEFINED