| /* | |
| * Copyright 2012 Google Inc. | |
| * | |
| * Use of this source code is governed by a BSD-style license that can be | |
| * found in the LICENSE file. | |
| */ | |
| #ifndef GrProcessor_DEFINED | |
| #define GrProcessor_DEFINED | |
| #include "include/core/SkString.h" | |
| #include <cstddef> | |
| #include <new> | |
| /** Provides custom shader code to the Ganesh shading pipeline. GrProcessor objects *must* be | |
| immutable: after being constructed, their fields may not change. | |
| Dynamically allocated GrProcessors are managed by a per-thread memory pool. The ref count of an | |
| processor must reach 0 before the thread terminates and the pool is destroyed. | |
| */ | |
| class GrProcessor { | |
| public: | |
| enum ClassID { | |
| kNull_ClassID, // Reserved ID for missing (null) processors | |
| kAttributeTestProcessor_ClassID, | |
| kBigKeyProcessor_ClassID, | |
| kBlendFragmentProcessor_ClassID, | |
| kBlockInputFragmentProcessor_ClassID, | |
| kButtCapStrokedCircleGeometryProcessor_ClassID, | |
| kCircleGeometryProcessor_ClassID, | |
| kCircularRRectEffect_ClassID, | |
| kClockwiseTestProcessor_ClassID, | |
| kColorTableEffect_ClassID, | |
| kCoverageSetOpXP_ClassID, | |
| kCustomXP_ClassID, | |
| kDashingCircleEffect_ClassID, | |
| kDashingLineEffect_ClassID, | |
| kDefaultGeoProc_ClassID, | |
| kDeviceSpace_ClassID, | |
| kDIEllipseGeometryProcessor_ClassID, | |
| kDisableColorXP_ClassID, | |
| kDrawAtlasPathShader_ClassID, | |
| kEllipseGeometryProcessor_ClassID, | |
| kEllipticalRRectEffect_ClassID, | |
| kFwidthSquircleTestProcessor_ClassID, | |
| kGP_ClassID, | |
| kGrBicubicEffect_ClassID, | |
| kGrBitmapTextGeoProc_ClassID, | |
| kGrColorSpaceXformEffect_ClassID, | |
| kGrConicEffect_ClassID, | |
| kGrConvexPolyEffect_ClassID, | |
| kGrDiffuseLightingEffect_ClassID, | |
| kGrDisplacementMapEffect_ClassID, | |
| kGrDistanceFieldA8TextGeoProc_ClassID, | |
| kGrDistanceFieldLCDTextGeoProc_ClassID, | |
| kGrDistanceFieldPathGeoProc_ClassID, | |
| kGrFillRRectOp_Processor_ClassID, | |
| kGrGaussianConvolutionFragmentProcessor_ClassID, | |
| kGrMatrixConvolutionEffect_ClassID, | |
| kGrMatrixEffect_ClassID, | |
| kGrMeshTestProcessor_ClassID, | |
| kGrMorphologyEffect_ClassID, | |
| kGrPerlinNoise2Effect_ClassID, | |
| kGrPipelineDynamicStateTestProcessor_ClassID, | |
| kGrQuadEffect_ClassID, | |
| kGrRRectShadowGeoProc_ClassID, | |
| kGrSkSLFP_ClassID, | |
| kGrSpecularLightingEffect_ClassID, | |
| kGrTextureEffect_ClassID, | |
| kGrUnrolledBinaryGradientColorizer_ClassID, | |
| kGrYUVtoRGBEffect_ClassID, | |
| kHighPrecisionFragmentProcessor_ClassID, | |
| kLatticeGP_ClassID, | |
| kPDLCDXferProcessor_ClassID, | |
| kPorterDuffXferProcessor_ClassID, | |
| kPremulFragmentProcessor_ClassID, | |
| kQuadEdgeEffect_ClassID, | |
| kQuadPerEdgeAAGeometryProcessor_ClassID, | |
| kSeriesFragmentProcessor_ClassID, | |
| kShaderPDXferProcessor_ClassID, | |
| kSurfaceColorProcessor_ClassID, | |
| kSwizzleFragmentProcessor_ClassID, | |
| kTessellate_BoundingBoxShader_ClassID, | |
| kTessellate_GrModulateAtlasCoverageEffect_ClassID, | |
| kTessellate_GrStrokeTessellationShader_ClassID, | |
| kTessellate_HullShader_ClassID, | |
| kTessellate_MiddleOutShader_ClassID, | |
| kTessellate_SimpleTriangleShader_ClassID, | |
| kTessellationTestTriShader_ClassID, | |
| kTestFP_ClassID, | |
| kTestRectOp_ClassID, | |
| kVertexColorSpaceBenchGP_ClassID, | |
| kVerticesGP_ClassID, | |
| }; | |
| virtual ~GrProcessor() = default; | |
| /** Human-meaningful string to identify this processor; may be embedded in generated shader | |
| code and must be a legal SkSL identifier prefix. */ | |
| virtual const char* name() const = 0; | |
| /** Human-readable dump of all information */ | |
| #if defined(GPU_TEST_UTILS) | |
| virtual SkString onDumpInfo() const { return SkString(); } | |
| SkString dumpInfo() const { | |
| SkString info(name()); | |
| info.append(this->onDumpInfo()); | |
| return info; | |
| } | |
| #endif | |
| void* operator new(size_t size); | |
| void* operator new(size_t object_size, size_t footer_size); | |
| void operator delete(void* target); | |
| void* operator new(size_t size, void* placement) { | |
| return ::operator new(size, placement); | |
| } | |
| void operator delete(void* target, void* placement) { | |
| ::operator delete(target, placement); | |
| } | |
| /** Helper for down-casting to a GrProcessor subclass */ | |
| template <typename T> const T& cast() const { return *static_cast<const T*>(this); } | |
| ClassID classID() const { return fClassID; } | |
| protected: | |
| GrProcessor(ClassID classID) : fClassID(classID) {} | |
| GrProcessor(const GrProcessor&) = delete; | |
| GrProcessor& operator=(const GrProcessor&) = delete; | |
| const ClassID fClassID; | |
| }; | |
| #endif |