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