Index: src/gpu/gl/GrGLShaderBuilder.h |
diff --git a/src/gpu/gl/GrGLShaderBuilder.h b/src/gpu/gl/GrGLShaderBuilder.h |
index 1be9a881d342cdf3ce81c2e034978ae04747ee31..90f1a94ea3982e35114df6dba50b82942931d5fb 100644 |
--- a/src/gpu/gl/GrGLShaderBuilder.h |
+++ b/src/gpu/gl/GrGLShaderBuilder.h |
@@ -41,7 +41,41 @@ public: |
kFragment_Visibility = 0x4, |
}; |
- GrGLShaderBuilder(GrGpuGL*, GrGLUniformManager&, const GrGLProgramDesc&); |
+ typedef GrGLUniformManager::UniformHandle UniformHandle; |
+ |
+ // Handles for program uniforms (other than per-effect uniforms) |
+ struct UniformHandles { |
+ UniformHandle fViewMatrixUni; |
+ UniformHandle fRTAdjustmentUni; |
+ UniformHandle fColorUni; |
+ UniformHandle fCoverageUni; |
+ |
+ // We use the render target height to provide a y-down frag coord when specifying |
+ // origin_upper_left is not supported. |
+ UniformHandle fRTHeightUni; |
+ |
+ // Uniforms for computing texture coords to do the dst-copy lookup |
+ UniformHandle fDstCopyTopLeftUni; |
+ UniformHandle fDstCopyScaleUni; |
+ UniformHandle fDstCopySamplerUni; |
+ }; |
+ |
+ struct GenProgramOutput { |
+ GrGLProgramEffects* fColorEffects; |
+ GrGLProgramEffects* fCoverageEffects; |
+ UniformHandles fUniformHandles; |
+ bool fHasVS; |
+ int fNumTexCoordSets; |
+ GrGLuint fProgramID; |
+ }; |
+ |
+ static bool GenProgram(GrGpuGL* gpu, |
+ GrGLUniformManager& uman, |
+ const GrGLProgramDesc& desc, |
+ const GrEffectStage* inColorStages[], |
+ const GrEffectStage* inCoverageStages[], |
+ GenProgramOutput* output); |
+ |
virtual ~GrGLShaderBuilder() {} |
/** |
@@ -228,8 +262,12 @@ public: |
}; |
protected: |
+ GrGLShaderBuilder(GrGpuGL*, GrGLUniformManager&, const GrGLProgramDesc&); |
+ |
GrGpuGL* gpu() const { return fGpu; } |
+ const GrGLProgramDesc& desc() const { return fDesc; } |
+ |
void setInputColor(const GrGLSLExpr4& inputColor) { fInputColor = inputColor; } |
void setInputCoverage(const GrGLSLExpr4& inputCoverage) { fInputCoverage = inputCoverage; } |
@@ -306,6 +344,10 @@ private: |
const GrEffectStage* fEffectStage; |
} fCodeStage; |
+ bool genProgram(const GrEffectStage* colorStages[], |
+ const GrEffectStage* coverageStages[], |
+ GenProgramOutput* output); |
+ |
/** |
* Features that should only be enabled by GrGLShaderBuilder itself. |
*/ |
@@ -334,6 +376,7 @@ private: |
kBottomLeftFragPosRead_FragPosKey = 0x2,// Read frag pos relative to bottom-left. |
}; |
+ const GrGLProgramDesc& fDesc; |
GrGpuGL* fGpu; |
GrGLUniformManager& fUniformManager; |
uint32_t fFSFeaturesAddedMask; |
@@ -433,7 +476,6 @@ protected: |
virtual void bindProgramLocations(GrGLuint programId) const SK_OVERRIDE; |
private: |
- const GrGLProgramDesc& fDesc; |
VarArray fVSAttrs; |
VarArray fVSOutputs; |
VarArray fGSInputs; |