| Index: src/gpu/gl/GrGLShaderBuilder.h
|
| diff --git a/src/gpu/gl/GrGLShaderBuilder.h b/src/gpu/gl/GrGLShaderBuilder.h
|
| index f3a63af9ed9ae5c773a20ee5e7c929c30979d1b5..42186defc2f221058ce814f355c3e0e10cf22932 100644
|
| --- a/src/gpu/gl/GrGLShaderBuilder.h
|
| +++ b/src/gpu/gl/GrGLShaderBuilder.h
|
| @@ -61,12 +61,19 @@ public:
|
| };
|
|
|
| struct GenProgramOutput {
|
| + GenProgramOutput()
|
| + : fColorEffects(NULL)
|
| + , fCoverageEffects(NULL)
|
| + , fHasVertexShader(false)
|
| + , fTexCoordSetCnt(0)
|
| + , fProgramID(0) {}
|
| +
|
| GrGLProgramEffects* fColorEffects;
|
| GrGLProgramEffects* fCoverageEffects;
|
| - UniformHandles fUniformHandles;
|
| - bool fHasVS;
|
| - int fNumTexCoordSets;
|
| - GrGLuint fProgramID;
|
| + UniformHandles fUniformHandles;
|
| + bool fHasVertexShader;
|
| + int fTexCoordSetCnt;
|
| + GrGLuint fProgramID;
|
| };
|
|
|
| static bool GenProgram(GrGpuGL* gpu,
|
| @@ -159,8 +166,7 @@ public:
|
| uniform should be accessible. At least one bit must be set. Geometry shader uniforms are not
|
| supported at this time. The actual uniform name will be mangled. If outName is not NULL then
|
| it will refer to the final uniform name after return. Use the addUniformArray variant to add
|
| - an array of uniforms.
|
| - */
|
| + an array of uniforms. */
|
| GrGLUniformManager::UniformHandle addUniform(uint32_t visibility,
|
| GrSLType type,
|
| const char* name,
|
| @@ -252,6 +258,10 @@ protected:
|
| void appendDecls(const VarArray&, SkString*) const;
|
| void appendUniformDecls(ShaderVisibility, SkString*) const;
|
|
|
| + const GenProgramOutput& getOutput() const { return fOutput; }
|
| +
|
| + GenProgramOutput fOutput;
|
| +
|
| private:
|
| class CodeStage : SkNoncopyable {
|
| public:
|
| @@ -304,9 +314,7 @@ private:
|
| const GrEffectStage* fEffectStage;
|
| } fCodeStage;
|
|
|
| - bool genProgram(const GrEffectStage* colorStages[],
|
| - const GrEffectStage* coverageStages[],
|
| - GenProgramOutput* output);
|
| + bool genProgram(const GrEffectStage* colorStages[], const GrEffectStage* coverageStages[]);
|
|
|
| /**
|
| * Adds code for effects and returns a GrGLProgramEffects* object. The caller is responsible for
|
| @@ -327,7 +335,11 @@ private:
|
| /** Gets the name of the primary color output. */
|
| const char* getColorOutputName() const;
|
|
|
| - bool finish(GrGLuint* outProgramId);
|
| + /**
|
| + * Compiles all the shaders, links them into a program, and writes the program id to the output
|
| + * struct.
|
| + **/
|
| + bool finish();
|
|
|
| const GrGLSLExpr4& getInputColor() const {
|
| return fInputColor;
|
| @@ -353,10 +365,10 @@ private:
|
|
|
| // Interpretation of DstReadKey when generating code
|
| enum {
|
| - kNoDstRead_DstReadKey = 0,
|
| - kYesDstRead_DstReadKeyBit = 0x1, // Set if we do a dst-copy-read.
|
| - kUseAlphaConfig_DstReadKeyBit = 0x2, // Set if dst-copy config is alpha only.
|
| - kTopLeftOrigin_DstReadKeyBit = 0x4, // Set if dst-copy origin is top-left.
|
| + kNoDstRead_DstReadKey = 0,
|
| + kYesDstRead_DstReadKeyBit = 0x1, // Set if we do a dst-copy-read.
|
| + kUseAlphaConfig_DstReadKeyBit = 0x2, // Set if dst-copy config is alpha only.
|
| + kTopLeftOrigin_DstReadKeyBit = 0x4, // Set if dst-copy origin is top-left.
|
| };
|
|
|
| enum {
|
| @@ -378,21 +390,13 @@ private:
|
| SkString fFSCode;
|
|
|
| bool fSetupFragPosition;
|
| - GrGLUniformManager::UniformHandle fDstCopySamplerUniform;
|
| + bool fTopLeftFragPosRead;
|
|
|
| GrGLSLExpr4 fInputColor;
|
| GrGLSLExpr4 fInputCoverage;
|
|
|
| bool fHasCustomColorOutput;
|
| bool fHasSecondaryOutput;
|
| -
|
| - GrGLUniformManager::UniformHandle fRTHeightUniform;
|
| - GrGLUniformManager::UniformHandle fDstCopyTopLeftUniform;
|
| - GrGLUniformManager::UniformHandle fDstCopyScaleUniform;
|
| - GrGLUniformManager::UniformHandle fColorUniform;
|
| - GrGLUniformManager::UniformHandle fCoverageUniform;
|
| -
|
| - bool fTopLeftFragPosRead;
|
| };
|
|
|
| ////////////////////////////////////////////////////////////////////////////////
|
| @@ -443,17 +447,6 @@ public:
|
| bool addEffectAttribute(int attributeIndex, GrSLType type, const SkString& name);
|
| const SkString* getEffectAttributeName(int attributeIndex) const;
|
|
|
| - /**
|
| - * The view matrix uniform is only valid in the VS. It is always mat33.
|
| - */
|
| - GrGLUniformManager::UniformHandle getViewMatrixUniform() const {
|
| - return fViewMatrixUniform;
|
| - }
|
| -
|
| - GrGLUniformManager::UniformHandle getRTAdjustmentVecUniform() const {
|
| - return fRTAdustmentVecUniform;
|
| - }
|
| -
|
| private:
|
| virtual GrGLProgramEffects* createAndEmitEffects(const GrEffectStage* effectStages[],
|
| const EffectKey effectKeys[],
|
| @@ -480,8 +473,6 @@ private:
|
| };
|
| SkSTArray<10, AttributePair, true> fEffectAttributes;
|
|
|
| - GrGLUniformManager::UniformHandle fViewMatrixUniform;
|
| - GrGLUniformManager::UniformHandle fRTAdustmentVecUniform;
|
| GrGLShaderVar* fPositionVar;
|
| GrGLShaderVar* fLocalCoordsVar;
|
|
|
| @@ -494,7 +485,6 @@ class GrGLFragmentOnlyShaderBuilder : public GrGLShaderBuilder {
|
| public:
|
| GrGLFragmentOnlyShaderBuilder(GrGpuGL*, GrGLUniformManager*, const GrGLProgramDesc&);
|
|
|
| - int getNumTexCoordSets() const { return fNumTexCoordSets; }
|
| int addTexCoordSets(int count);
|
|
|
| private:
|
| @@ -504,8 +494,6 @@ private:
|
| int effectCnt,
|
| GrGLSLExpr4* inOutFSColor) SK_OVERRIDE;
|
|
|
| - int fNumTexCoordSets;
|
| -
|
| typedef GrGLShaderBuilder INHERITED;
|
| };
|
|
|
|
|