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