Completely remove graphite #ifdefs from subruncontainer
This threads a RendererData struct through the AtlasDrawDelegate
call so the Graphite Device can choose the right renderer with
one less layer of abstraction.
After this CL, `git grep SK_GRAPHITE` returns 0 hits in
src/text
Change-Id: I2d02ba216c6d5ed60ac42901754da556bd5b0f5a
Bug: skia:14317
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/712862
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Reviewed-by: Herb Derby <herb@google.com>
Reviewed-by: Jim Van Verth <jvanverth@google.com>
diff --git a/src/gpu/ganesh/Device.cpp b/src/gpu/ganesh/Device.cpp
index aa94ad1..8eef9be 100644
--- a/src/gpu/ganesh/Device.cpp
+++ b/src/gpu/ganesh/Device.cpp
@@ -1433,7 +1433,8 @@
auto atlasDelegate = [&](const sktext::gpu::AtlasSubRun* subRun,
SkPoint drawOrigin,
const SkPaint& paint,
- sk_sp<SkRefCnt> subRunStorage) {
+ sk_sp<SkRefCnt> subRunStorage,
+ sktext::gpu::RendererData) {
auto[drawingClip, op] = subRun->makeAtlasTextOp(
this->clip(), matrixProvider.localToDevice(), drawOrigin, paint,
std::move(subRunStorage), fSurfaceDrawContext.get());
diff --git a/src/gpu/ganesh/SurfaceDrawContext.cpp b/src/gpu/ganesh/SurfaceDrawContext.cpp
index d697164..b73cad9 100644
--- a/src/gpu/ganesh/SurfaceDrawContext.cpp
+++ b/src/gpu/ganesh/SurfaceDrawContext.cpp
@@ -351,7 +351,8 @@
auto atlasDelegate = [&](const sktext::gpu::AtlasSubRun* subRun,
SkPoint drawOrigin,
const SkPaint& paint,
- sk_sp<SkRefCnt> subRunStorage) {
+ sk_sp<SkRefCnt> subRunStorage,
+ sktext::gpu::RendererData) {
auto[drawingClip, op] = subRun->makeAtlasTextOp(
clip, viewMatrix.localToDevice(), drawOrigin, paint, std::move(subRunStorage),
this);
diff --git a/src/gpu/graphite/Device.cpp b/src/gpu/graphite/Device.cpp
index 360d15e..3f2a60e 100644
--- a/src/gpu/graphite/Device.cpp
+++ b/src/gpu/graphite/Device.cpp
@@ -824,8 +824,9 @@
return [&](const sktext::gpu::AtlasSubRun* subRun,
SkPoint drawOrigin,
const SkPaint& paint,
- sk_sp<SkRefCnt> subRunStorage) {
- this->drawAtlasSubRun(subRun, drawOrigin, paint, subRunStorage);
+ sk_sp<SkRefCnt> subRunStorage,
+ sktext::gpu::RendererData rendererData) {
+ this->drawAtlasSubRun(subRun, drawOrigin, paint, subRunStorage, rendererData);
};
}
@@ -844,7 +845,8 @@
void Device::drawAtlasSubRun(const sktext::gpu::AtlasSubRun* subRun,
SkPoint drawOrigin,
const SkPaint& paint,
- sk_sp<SkRefCnt> subRunStorage) {
+ sk_sp<SkRefCnt> subRunStorage,
+ sktext::gpu::RendererData rendererData) {
const int subRunEnd = subRun->glyphCount();
auto regenerateDelegate = [&](sktext::gpu::GlyphVector* glyphs,
int begin,
@@ -877,7 +879,8 @@
this->localToDeviceTransform().inverse(),
subRunCursor,
glyphsRegenerated,
- fRecorder)),
+ fRecorder,
+ rendererData)),
subRunPaint,
DefaultFillStyle(),
DrawFlags::kIgnorePathEffect | DrawFlags::kIgnoreMaskFilter);
@@ -1135,11 +1138,16 @@
const SkStrokeRec& style,
bool requireMSAA) const {
const RendererProvider* renderers = fRecorder->priv().rendererProvider();
+ SkASSERT(renderers);
SkStrokeRec::Style type = style.getStyle();
if (geometry.isSubRun()) {
SkASSERT(!requireMSAA);
- return geometry.subRunData().subRun()->renderer(renderers);
+ sktext::gpu::RendererData rendererData = geometry.subRunData().rendererData();
+ if (!rendererData.isSDF) {
+ return renderers->bitmapText();
+ }
+ return renderers->sdfText(rendererData.isLCD);
} else if (geometry.isVertices()) {
SkVerticesPriv info(geometry.vertices()->priv());
return renderers->vertices(info.mode(), info.hasColors(), info.hasTexCoords());
diff --git a/src/gpu/graphite/Device.h b/src/gpu/graphite/Device.h
index 877abcc..abc3c2e5 100644
--- a/src/gpu/graphite/Device.h
+++ b/src/gpu/graphite/Device.h
@@ -213,7 +213,8 @@
void drawAtlasSubRun(const sktext::gpu::AtlasSubRun*,
SkPoint drawOrigin,
const SkPaint& paint,
- sk_sp<SkRefCnt> subRunStorage);
+ sk_sp<SkRefCnt> subRunStorage,
+ sktext::gpu::RendererData);
sk_sp<sktext::gpu::Slug> convertGlyphRunListToSlug(const sktext::GlyphRunList& glyphRunList,
const SkPaint& initialPaint,
diff --git a/src/gpu/graphite/geom/SubRunData.h b/src/gpu/graphite/geom/SubRunData.h
index 74ac30b..5af74f6 100644
--- a/src/gpu/graphite/geom/SubRunData.h
+++ b/src/gpu/graphite/geom/SubRunData.h
@@ -10,6 +10,7 @@
#include "include/core/SkM44.h"
#include "src/gpu/graphite/geom/Rect.h"
+#include "src/text/gpu/SubRunContainer.h"
namespace sktext::gpu { class AtlasSubRun; }
@@ -32,14 +33,16 @@
const SkM44& deviceToLocal,
int startGlyphIndex,
int glyphCount,
- Recorder* recorder)
- : fSubRun(subRun)
- , fSupportDataKeepAlive(std::move(supportDataKeepAlive))
- , fBounds(deviceBounds)
- , fDeviceToLocal(deviceToLocal)
- , fStartGlyphIndex(startGlyphIndex)
- , fGlyphCount(glyphCount)
- , fRecorder(recorder) {}
+ Recorder* recorder,
+ sktext::gpu::RendererData rendererData)
+ : fSubRun(subRun)
+ , fSupportDataKeepAlive(std::move(supportDataKeepAlive))
+ , fBounds(deviceBounds)
+ , fDeviceToLocal(deviceToLocal)
+ , fStartGlyphIndex(startGlyphIndex)
+ , fGlyphCount(glyphCount)
+ , fRecorder(recorder)
+ , fRendererData(rendererData) {}
~SubRunData() = default;
@@ -59,6 +62,7 @@
int startGlyphIndex() const { return fStartGlyphIndex; }
int glyphCount() const { return fGlyphCount; }
Recorder* recorder() const { return fRecorder; }
+ const sktext::gpu::RendererData& rendererData() const { return fRendererData; }
private:
const sktext::gpu::AtlasSubRun* fSubRun;
@@ -70,6 +74,7 @@
int fStartGlyphIndex;
int fGlyphCount;
Recorder* fRecorder; // this SubRun can only be associated with this Recorder's atlas
+ sktext::gpu::RendererData fRendererData;
};
} // namespace skgpu::graphite
diff --git a/src/text/gpu/SubRunContainer.cpp b/src/text/gpu/SubRunContainer.cpp
index 0eddcf5..25ee08f 100644
--- a/src/text/gpu/SubRunContainer.cpp
+++ b/src/text/gpu/SubRunContainer.cpp
@@ -78,13 +78,6 @@
using AtlasTextOp = skgpu::ganesh::AtlasTextOp;
#endif // defined(SK_GANESH)
-#if defined(SK_GRAPHITE)
-#include "src/gpu/graphite/Device.h"
-#include "src/gpu/graphite/DrawWriter.h"
-#include "src/gpu/graphite/Renderer.h"
-#include "src/gpu/graphite/RendererProvider.h"
-#endif
-
using namespace skia_private;
using namespace skglyph;
@@ -120,20 +113,6 @@
using namespace sktext;
using namespace sktext::gpu;
-#if defined(SK_GRAPHITE)
-namespace gr = skgpu::graphite;
-
-using BindBufferInfo = gr::BindBufferInfo;
-using BufferType = gr::BufferType;
-using Device = gr::Device;
-using DrawWriter = gr::DrawWriter;
-using Recorder = gr::Recorder;
-using Renderer = gr::Renderer;
-using RendererProvider = gr::RendererProvider;
-using TextureProxy = gr::TextureProxy;
-using Transform = gr::Transform;
-#endif
-
namespace {
#if defined(SK_GANESH)
SkPMColor4f calculate_colors(skgpu::ganesh::SurfaceDrawContext* sdc,
@@ -746,7 +725,8 @@
const SkPaint& paint,
sk_sp<SkRefCnt> subRunStorage,
AtlasDrawDelegate drawAtlas) const override {
- drawAtlas(this, drawOrigin, paint, std::move(subRunStorage));
+ drawAtlas(this, drawOrigin, paint, std::move(subRunStorage),
+ {/* isSDF = */false, /* isLCD = */false});
}
int unflattenSize() const override {
@@ -871,14 +851,6 @@
const VertexFiller& vertexFiller() const override { return fVertexFiller; }
-#if defined(SK_GRAPHITE)
-
- const Renderer* renderer(const RendererProvider* renderers) const override {
- return renderers->bitmapText();
- }
-
-#endif // defined(SK_GRAPHITE)
-
bool canReuse(const SkPaint& paint, const SkMatrix& positionMatrix) const override {
auto [reuse, _] = fVertexFiller.deviceRectAndCheckTransform(positionMatrix);
return reuse;
@@ -992,7 +964,8 @@
const SkPaint& paint,
sk_sp<SkRefCnt> subRunStorage,
AtlasDrawDelegate drawAtlas) const override {
- drawAtlas(this, drawOrigin, paint, std::move(subRunStorage));
+ drawAtlas(this, drawOrigin, paint, std::move(subRunStorage),
+ {/* isSDF = */false, /* isLCD = */false});
}
#if defined(SK_GANESH)
@@ -1063,14 +1036,6 @@
const VertexFiller& vertexFiller() const override { return fVertexFiller; }
-#if defined(SK_GRAPHITE)
-
- const Renderer* renderer(const RendererProvider* renderers) const override {
- return renderers->bitmapText();
- }
-
-#endif // SK_GRAPHITE
-
protected:
SubRunStreamTag subRunStreamTag() const override {
return SubRunStreamTag::kTransformMaskStreamTag;
@@ -1230,7 +1195,8 @@
const SkPaint& paint,
sk_sp<SkRefCnt> subRunStorage,
AtlasDrawDelegate drawAtlas) const override {
- drawAtlas(this, drawOrigin, paint, std::move(subRunStorage));
+ drawAtlas(this, drawOrigin, paint, std::move(subRunStorage),
+ {/* isSDF = */true, /* isLCD = */fUseLCDText});
}
#if defined(SK_GANESH)
@@ -1308,14 +1274,6 @@
const VertexFiller& vertexFiller() const override { return fVertexFiller; }
-#if defined(SK_GRAPHITE)
-
- const Renderer* renderer(const RendererProvider* renderers) const override {
- return renderers->sdfText(fUseLCDText);
- }
-
-#endif // SK_GRAPHITE
-
protected:
SubRunStreamTag subRunStreamTag() const override { return SubRunStreamTag::kSDFTStreamTag; }
void doFlatten(SkWriteBuffer& buffer) const override {
diff --git a/src/text/gpu/SubRunContainer.h b/src/text/gpu/SubRunContainer.h
index 16c04e5..ac341c2 100644
--- a/src/text/gpu/SubRunContainer.h
+++ b/src/text/gpu/SubRunContainer.h
@@ -50,19 +50,6 @@
}
#endif
-#if defined(SK_GRAPHITE)
-#include "src/gpu/graphite/geom/Rect.h"
-#include "src/gpu/graphite/geom/SubRunData.h"
-#include "src/gpu/graphite/geom/Transform_graphite.h"
-
-namespace skgpu::graphite {
-class DrawWriter;
-class Recorder;
-class Renderer;
-class RendererProvider;
-}
-#endif
-
namespace sktext::gpu {
class GlyphVector;
class Glyph;
@@ -75,6 +62,11 @@
skgpu::MaskFormat,
int padding)>;
+struct RendererData {
+ bool isSDF = false;
+ bool isLCD = false;
+};
+
// -- AtlasSubRun --------------------------------------------------------------------------------
// AtlasSubRun is the API that AtlasTextOp uses to generate vertex data for drawing.
// There are three different ways AtlasSubRun is specialized.
@@ -123,20 +115,14 @@
virtual const VertexFiller& vertexFiller() const = 0;
-#if defined(SK_GRAPHITE)
-
- virtual const skgpu::graphite::Renderer* renderer(
- const skgpu::graphite::RendererProvider*) const = 0;
-
-#endif
-
virtual void testingOnly_packedGlyphIDToGlyph(StrikeCache* cache) const = 0;
};
using AtlasDrawDelegate = std::function<void(const sktext::gpu::AtlasSubRun* subRun,
SkPoint drawOrigin,
const SkPaint& paint,
- sk_sp<SkRefCnt> subRunStorage)>;
+ sk_sp<SkRefCnt> subRunStorage,
+ sktext::gpu::RendererData)>;
// -- SubRun -------------------------------------------------------------------------------------
// SubRun defines the most basic functionality of a SubRun; the ability to draw, and the