/* * Copyright 2021 Google LLC * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef skgpu_graphite_Renderer_DEFINED #define skgpu_graphite_Renderer_DEFINED #include "include/core/SkSpan.h" #include "include/core/SkString.h" #include "include/core/SkTypes.h" #include "include/gpu/graphite/GraphiteTypes.h" #include "src/base/SkEnumBitMask.h" #include "src/base/SkVx.h" #include "src/gpu/graphite/Attribute.h" #include "src/gpu/graphite/DrawTypes.h" #include "src/gpu/graphite/ResourceTypes.h" #include "src/gpu/graphite/Uniform.h" #include <array> #include <initializer_list> #include <string> #include <string_view> #include <vector> enum class SkPathFillType; namespace skgpu { enum class MaskFormat; } namespace skgpu::graphite { class DrawWriter; class DrawParams; class PipelineDataGatherer; class Rect; class ResourceProvider; class TextureDataBlock; class Transform; struct ResourceBindingRequirements; enum class Coverage { … }; /** * The actual technique for rasterizing a high-level draw recorded in a DrawList is handled by a * specific Renderer. Each technique has an associated singleton Renderer that decomposes the * technique into a series of RenderSteps that must be executed in the specified order for the draw. * However, the RenderStep executions for multiple draws can be re-arranged so batches of each * step can be performed in a larger GPU operation. This re-arranging relies on accurate * determination of the DisjointStencilIndex for each draw so that stencil steps are not corrupted * by another draw before its cover step is executed. It also relies on the CompressedPaintersOrder * for each draw to ensure steps are not re-arranged in a way that violates the original draw order. * * Renderer itself is non-virtual since it simply has to point to a list of RenderSteps. RenderSteps * on the other hand are virtual implement the technique specific functionality. It is entirely * possible for certain types of steps, e.g. a bounding box cover, to be re-used across different * Renderers even if the preceeding steps were different. * * All Renderers are accessed through the SharedContext's RendererProvider. */ class RenderStep { … }; SK_MAKE_BITMASK_OPS(…) class Renderer { … }; } // namespace skgpu::graphite #endif // skgpu_graphite_Renderer_DEFINED