xref: /aosp_15_r20/external/skia/src/gpu/ganesh/GrProcessor.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1 /*
2  * Copyright 2012 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #ifndef GrProcessor_DEFINED
9 #define GrProcessor_DEFINED
10 
11 #include "include/core/SkString.h"
12 
13 #include <cstddef>
14 #include <new>
15 
16 /** Provides custom shader code to the Ganesh shading pipeline. GrProcessor objects *must* be
17     immutable: after being constructed, their fields may not change.
18 
19     Dynamically allocated GrProcessors are managed by a per-thread memory pool. The ref count of an
20     processor must reach 0 before the thread terminates and the pool is destroyed.
21  */
22 class GrProcessor {
23 public:
24     enum ClassID {
25         kNull_ClassID,  // Reserved ID for missing (null) processors
26 
27         kAttributeTestProcessor_ClassID,
28         kBigKeyProcessor_ClassID,
29         kBlendFragmentProcessor_ClassID,
30         kBlockInputFragmentProcessor_ClassID,
31         kButtCapStrokedCircleGeometryProcessor_ClassID,
32         kCircleGeometryProcessor_ClassID,
33         kCircularRRectEffect_ClassID,
34         kClockwiseTestProcessor_ClassID,
35         kColorTableEffect_ClassID,
36         kCoverageSetOpXP_ClassID,
37         kCustomXP_ClassID,
38         kDashingCircleEffect_ClassID,
39         kDashingLineEffect_ClassID,
40         kDefaultGeoProc_ClassID,
41         kDeviceSpace_ClassID,
42         kDIEllipseGeometryProcessor_ClassID,
43         kDisableColorXP_ClassID,
44         kDrawAtlasPathShader_ClassID,
45         kEllipseGeometryProcessor_ClassID,
46         kEllipticalRRectEffect_ClassID,
47         kFwidthSquircleTestProcessor_ClassID,
48         kGP_ClassID,
49         kGrBicubicEffect_ClassID,
50         kGrBitmapTextGeoProc_ClassID,
51         kGrColorSpaceXformEffect_ClassID,
52         kGrConicEffect_ClassID,
53         kGrConvexPolyEffect_ClassID,
54         kGrDiffuseLightingEffect_ClassID,
55         kGrDisplacementMapEffect_ClassID,
56         kGrDistanceFieldA8TextGeoProc_ClassID,
57         kGrDistanceFieldLCDTextGeoProc_ClassID,
58         kGrDistanceFieldPathGeoProc_ClassID,
59         kGrFillRRectOp_Processor_ClassID,
60         kGrGaussianConvolutionFragmentProcessor_ClassID,
61         kGrMatrixConvolutionEffect_ClassID,
62         kGrMatrixEffect_ClassID,
63         kGrMeshTestProcessor_ClassID,
64         kGrMorphologyEffect_ClassID,
65         kGrPerlinNoise2Effect_ClassID,
66         kGrPipelineDynamicStateTestProcessor_ClassID,
67         kGrQuadEffect_ClassID,
68         kGrRRectShadowGeoProc_ClassID,
69         kGrSkSLFP_ClassID,
70         kGrSpecularLightingEffect_ClassID,
71         kGrTextureEffect_ClassID,
72         kGrUnrolledBinaryGradientColorizer_ClassID,
73         kGrYUVtoRGBEffect_ClassID,
74         kHighPrecisionFragmentProcessor_ClassID,
75         kLatticeGP_ClassID,
76         kPDLCDXferProcessor_ClassID,
77         kPorterDuffXferProcessor_ClassID,
78         kPremulFragmentProcessor_ClassID,
79         kQuadEdgeEffect_ClassID,
80         kQuadPerEdgeAAGeometryProcessor_ClassID,
81         kSeriesFragmentProcessor_ClassID,
82         kShaderPDXferProcessor_ClassID,
83         kSurfaceColorProcessor_ClassID,
84         kSwizzleFragmentProcessor_ClassID,
85         kTessellate_BoundingBoxShader_ClassID,
86         kTessellate_GrModulateAtlasCoverageEffect_ClassID,
87         kTessellate_GrStrokeTessellationShader_ClassID,
88         kTessellate_HullShader_ClassID,
89         kTessellate_MiddleOutShader_ClassID,
90         kTessellate_SimpleTriangleShader_ClassID,
91         kTessellationTestTriShader_ClassID,
92         kTestFP_ClassID,
93         kTestRectOp_ClassID,
94         kVertexColorSpaceBenchGP_ClassID,
95         kVerticesGP_ClassID,
96     };
97 
98     virtual ~GrProcessor() = default;
99 
100     /** Human-meaningful string to identify this processor; may be embedded in generated shader
101         code and must be a legal SkSL identifier prefix. */
102     virtual const char* name() const = 0;
103 
104     /** Human-readable dump of all information */
105 #if defined(GPU_TEST_UTILS)
onDumpInfo()106     virtual SkString onDumpInfo() const { return SkString(); }
107 
dumpInfo()108     SkString dumpInfo() const {
109         SkString info(name());
110         info.append(this->onDumpInfo());
111         return info;
112     }
113 #endif
114 
115     void* operator new(size_t size);
116     void* operator new(size_t object_size, size_t footer_size);
117     void operator delete(void* target);
118 
new(size_t size,void * placement)119     void* operator new(size_t size, void* placement) {
120         return ::operator new(size, placement);
121     }
delete(void * target,void * placement)122     void operator delete(void* target, void* placement) {
123         ::operator delete(target, placement);
124     }
125 
126     /** Helper for down-casting to a GrProcessor subclass */
cast()127     template <typename T> const T& cast() const { return *static_cast<const T*>(this); }
128 
classID()129     ClassID classID() const { return fClassID; }
130 
131 protected:
GrProcessor(ClassID classID)132     GrProcessor(ClassID classID) : fClassID(classID) {}
133     GrProcessor(const GrProcessor&) = delete;
134     GrProcessor& operator=(const GrProcessor&) = delete;
135 
136     const ClassID fClassID;
137 };
138 
139 #endif
140