28#ifdef SK_ENABLE_VELLO_SHADERS
35#ifdef SK_ENABLE_VELLO_SHADERS
52 static constexpr size_t kRendererSize = offsetof(
RendererProvider, fRenderers) -
54 static_assert(kRendererSize %
sizeof(
Renderer) == 0,
"Renderer declarations are not dense");
59 auto makeFromStep = [&](std::unique_ptr<RenderStep> singleStep,
DrawTypeFlags drawTypes) {
60 std::string
name =
"SingleStep[";
61 name += singleStep->name();
63 fRenderSteps.push_back(std::move(singleStep));
64 return Renderer(
name, drawTypes, fRenderSteps.back().get());
67 fConvexTessellatedWedges =
68 makeFromStep(std::make_unique<TessellateWedgesRenderStep>(
71 fTessellatedStrokes = makeFromStep(
74 for (
bool lcd : {
false,
true}) {
75 fBitmapText[lcd] = makeFromStep(std::make_unique<BitmapTextRenderStep>(lcd),
77 fSDFText[lcd] = makeFromStep(std::make_unique<SDFTextRenderStep>(lcd),
80 fAnalyticRRect = makeFromStep(std::make_unique<AnalyticRRectRenderStep>(bufferManager),
82 fPerEdgeAAQuad = makeFromStep(std::make_unique<PerEdgeAAQuadRenderStep>(bufferManager),
84 fAnalyticBlur = makeFromStep(std::make_unique<AnalyticBlurRenderStep>(),
87 for (
bool color : {
false,
true}) {
88 for (
bool texCoords : {
false,
true}) {
90 fVertices[index] = makeFromStep(
91 std::make_unique<VerticesRenderStep>(primType,
color, texCoords),
98 auto coverFill = std::make_unique<CoverBoundsRenderStep>(
false);
99 auto coverInverse = std::make_unique<CoverBoundsRenderStep>(
true);
101 for (
bool evenOdd : {
false,
true}) {
103 auto stencilFan = std::make_unique<MiddleOutFanRenderStep>(evenOdd);
104 auto stencilCurve = std::make_unique<TessellateCurvesRenderStep>(
105 evenOdd, infinitySupport, bufferManager);
107 evenOdd ? std::make_unique<TessellateWedgesRenderStep>(
109 :
std::make_unique<TessellateWedgesRenderStep>(
112 for (
bool inverse : {
false,
true}) {
113 static const char* kTessVariants[4] =
114 {
"[winding]",
"[evenodd]",
"[inverse-winding]",
"[inverse-evenodd]"};
116 int index = 2*inverse + evenOdd;
117 std::string variant = kTessVariants[index];
122 const RenderStep* coverStep = inverse ? coverInverse.get() : coverFill.get();
123 fStencilTessellatedCurves[index] = Renderer(
"StencilTessellatedCurvesAndTris" + variant,
129 fStencilTessellatedWedges[index] = Renderer(
"StencilTessellatedWedges" + variant,
135 fRenderSteps.push_back(std::move(stencilFan));
136 fRenderSteps.push_back(std::move(stencilCurve));
137 fRenderSteps.push_back(std::move(stencilWedge));
140 fRenderSteps.push_back(std::move(coverInverse));
141 fRenderSteps.push_back(std::move(coverFill));
145 SkSpan<Renderer> allRenderers = {fStencilTessellatedCurves, kRendererSize /
sizeof(Renderer)};
146 for (
const Renderer& r : allRenderers) {
147 if (r.numRenderSteps() > 0) {
148 fRenderers.push_back(&r);
152#ifdef SK_ENABLE_VELLO_SHADERS
153 fVelloRenderer = std::make_unique<VelloRenderer>(caps);
158 for (
auto&& rs : fRenderSteps) {
159 if (rs->uniqueID() == uniqueID) {
bool computeSupport() const
const SkSL::ShaderCaps * shaderCaps() const
const RenderStep * lookup(uint32_t uniqueID) const
static bool IsVelloRendererSupported(const Caps *)
constexpr DepthStencilSettings kWindingStencilPass
static constexpr DepthStencilSettings kDirectDepthGreaterPass
constexpr DepthStencilSettings kEvenOddStencilPass