Index: src/gpu/gl/builders/GrGLFragmentShaderBuilder.h |
diff --git a/src/gpu/gl/builders/GrGLFragmentShaderBuilder.h b/src/gpu/gl/builders/GrGLFragmentShaderBuilder.h |
deleted file mode 100644 |
index 16cc8cffe3c4c8c62597843df29c17535c24e264..0000000000000000000000000000000000000000 |
--- a/src/gpu/gl/builders/GrGLFragmentShaderBuilder.h |
+++ /dev/null |
@@ -1,201 +0,0 @@ |
-/* |
- * Copyright 2014 Google Inc. |
- * |
- * Use of this source code is governed by a BSD-style license that can be |
- * found in the LICENSE file. |
- */ |
- |
-#ifndef GrGLFragmentShaderBuilder_DEFINED |
-#define GrGLFragmentShaderBuilder_DEFINED |
- |
-#include "GrGLShaderBuilder.h" |
- |
-#include "glsl/GrGLSLProcessorTypes.h" |
- |
-class GrRenderTarget; |
-class GrGLSLVarying; |
- |
-/* |
- * This base class encapsulates the functionality which the GP uses to build fragment shaders |
- */ |
-class GrGLFragmentBuilder : public GrGLShaderBuilder { |
-public: |
- GrGLFragmentBuilder(GrGLSLProgramBuilder* program) |
- : INHERITED(program) |
- , fHasCustomColorOutput(false) |
- , fHasSecondaryOutput(false) { |
- fSubstageIndices.push_back(0); |
- } |
- virtual ~GrGLFragmentBuilder() {} |
- /** |
- * Use of these features may require a GLSL extension to be enabled. Shaders may not compile |
- * if code is added that uses one of these features without calling enableFeature() |
- */ |
- enum GLSLFeature { |
- kStandardDerivatives_GLSLFeature = 0, |
- kLastGLSLFeature = kStandardDerivatives_GLSLFeature |
- }; |
- |
- /** |
- * If the feature is supported then true is returned and any necessary #extension declarations |
- * are added to the shaders. If the feature is not supported then false will be returned. |
- */ |
- virtual bool enableFeature(GLSLFeature) = 0; |
- |
- /** |
- * This returns a variable name to access the 2D, perspective correct version of the coords in |
- * the fragment shader. If the coordinates at index are 3-dimensional, it immediately emits a |
- * perspective divide into the fragment shader (xy / z) to convert them to 2D. |
- */ |
- virtual SkString ensureFSCoords2D(const GrGLSLTransformedCoordsArray& coords, int index) = 0; |
- |
- |
- /** Returns a variable name that represents the position of the fragment in the FS. The position |
- is in device space (e.g. 0,0 is the top left and pixel centers are at half-integers). */ |
- virtual const char* fragmentPosition() = 0; |
- |
- /** |
- * Fragment procs with child procs should call these functions before/after calling emitCode |
- * on a child proc. |
- */ |
- void onBeforeChildProcEmitCode(); |
- void onAfterChildProcEmitCode(); |
- |
- const SkString& getMangleString() const { return fMangleString; } |
- |
- bool hasCustomColorOutput() const { return fHasCustomColorOutput; } |
- bool hasSecondaryOutput() const { return fHasSecondaryOutput; } |
- |
-protected: |
- bool fHasCustomColorOutput; |
- bool fHasSecondaryOutput; |
- |
-private: |
- /* |
- * State that tracks which child proc in the proc tree is currently emitting code. This is |
- * used to update the fMangleString, which is used to mangle the names of uniforms and functions |
- * emitted by the proc. fSubstageIndices is a stack: its count indicates how many levels deep |
- * we are in the tree, and its second-to-last value is the index of the child proc at that |
- * level which is currently emitting code. For example, if fSubstageIndices = [3, 1, 2, 0], that |
- * means we're currently emitting code for the base proc's 3rd child's 1st child's 2nd child. |
- */ |
- SkTArray<int> fSubstageIndices; |
- |
- /* |
- * The mangle string is used to mangle the names of uniforms/functions emitted by the child |
- * procs so no duplicate uniforms/functions appear in the generated shader program. The mangle |
- * string is simply based on fSubstageIndices. For example, if fSubstageIndices = [3, 1, 2, 0], |
- * then the manglestring will be "_c3_c1_c2", and any uniform/function emitted by that proc will |
- * have "_c3_c1_c2" appended to its name, which can be interpreted as "base proc's 3rd child's |
- * 1st child's 2nd child". |
- */ |
- SkString fMangleString; |
- |
- friend class GrGLPathProcessor; |
- |
- typedef GrGLShaderBuilder INHERITED; |
-}; |
- |
-/* |
- * Fragment processor's, in addition to all of the above, may need to use dst color so they use |
- * this builder to create their shader. Because this is the only shader builder the FP sees, we |
- * just call it FPShaderBuilder |
- */ |
-class GrGLXPFragmentBuilder : public GrGLFragmentBuilder { |
-public: |
- GrGLXPFragmentBuilder(GrGLSLProgramBuilder* program) : INHERITED(program) {} |
- |
- /** Returns the variable name that holds the color of the destination pixel. This may be nullptr if |
- no effect advertised that it will read the destination. */ |
- virtual const char* dstColor() = 0; |
- |
- /** Adds any necessary layout qualifiers in order to legalize the supplied blend equation with |
- this shader. It is only legal to call this method with an advanced blend equation, and only |
- if these equations are supported. */ |
- virtual void enableAdvancedBlendEquationIfNeeded(GrBlendEquation) = 0; |
- |
-private: |
- typedef GrGLFragmentBuilder INHERITED; |
-}; |
- |
-// TODO rename to Fragment Builder |
-class GrGLFragmentShaderBuilder : public GrGLXPFragmentBuilder { |
-public: |
- typedef uint8_t FragPosKey; |
- |
- /** Returns a key for reading the fragment location. This should only be called if there is an |
- effect that will requires the fragment position. If the fragment position is not required, |
- the key is 0. */ |
- static FragPosKey KeyForFragmentPosition(const GrRenderTarget* dst); |
- |
- GrGLFragmentShaderBuilder(GrGLSLProgramBuilder* program, uint8_t fragPosKey); |
- |
- // true public interface, defined explicitly in the abstract interfaces above |
- bool enableFeature(GLSLFeature) override; |
- virtual SkString ensureFSCoords2D(const GrGLSLTransformedCoordsArray& coords, |
- int index) override; |
- const char* fragmentPosition() override; |
- const char* dstColor() override; |
- |
- void enableAdvancedBlendEquationIfNeeded(GrBlendEquation) override; |
- |
-private: |
- // Private public interface, used by GrGLProgramBuilder to build a fragment shader |
- void enableCustomOutput(); |
- void enableSecondaryOutput(); |
- const char* getPrimaryColorOutputName() const; |
- const char* getSecondaryColorOutputName() const; |
- |
- // As GLProcessors emit code, there are some conditions we need to verify. We use the below |
- // state to track this. The reset call is called per processor emitted. |
- bool hasReadDstColor() const { return fHasReadDstColor; } |
- bool hasReadFragmentPosition() const { return fHasReadFragmentPosition; } |
- void reset() { |
- fHasReadDstColor = false; |
- fHasReadFragmentPosition = false; |
- } |
- |
- static const char* DeclaredColorOutputName() { return "fsColorOut"; } |
- static const char* DeclaredSecondaryColorOutputName() { return "fsSecondaryColorOut"; } |
- |
- /* |
- * An internal call for GrGLProgramBuilder to use to add varyings to the vertex shader |
- */ |
- void addVarying(GrGLSLVarying*, GrSLPrecision); |
- |
- void onFinalize() override; |
- |
- /** |
- * Features that should only be enabled by GrGLFragmentShaderBuilder itself. |
- */ |
- enum GLSLPrivateFeature { |
- kFragCoordConventions_GLSLPrivateFeature = kLastGLSLFeature + 1, |
- kBlendEquationAdvanced_GLSLPrivateFeature, |
- kBlendFuncExtended_GLSLPrivateFeature, |
- kLastGLSLPrivateFeature = kBlendFuncExtended_GLSLPrivateFeature |
- }; |
- |
- // Interpretation of FragPosKey when generating code |
- enum { |
- kNoFragPosRead_FragPosKey = 0, // The fragment positition will not be needed. |
- kTopLeftFragPosRead_FragPosKey = 0x1,// Read frag pos relative to top-left. |
- kBottomLeftFragPosRead_FragPosKey = 0x2,// Read frag pos relative to bottom-left. |
- }; |
- |
- static const char* kDstTextureColorName; |
- |
- bool fSetupFragPosition; |
- bool fTopLeftFragPosRead; |
- int fCustomColorOutputIndex; |
- |
- // some state to verify shaders and effects are consistent, this is reset between effects by |
- // the program creator |
- bool fHasReadDstColor; |
- bool fHasReadFragmentPosition; |
- |
- friend class GrGLProgramBuilder; |
- |
- typedef GrGLXPFragmentBuilder INHERITED; |
-}; |
- |
-#endif |