Chromium Code Reviews| Index: src/gpu/gl/GrGLShaderBuilder.h |
| =================================================================== |
| --- src/gpu/gl/GrGLShaderBuilder.h (revision 8438) |
| +++ src/gpu/gl/GrGLShaderBuilder.h (working copy) |
| @@ -19,6 +19,7 @@ |
| class GrGLContextInfo; |
| class GrEffectStage; |
| +class GrGLProgramDesc; |
| /** |
| Contains all the incremental state of a shader as it is being built,as well as helpers to |
| @@ -55,6 +56,8 @@ |
| const char* swizzle() const { return fSwizzle; } |
| + bool isInitialized() const { return 0 != fConfigComponentMask; } |
| + |
| private: |
| // The idx param is used to ensure multiple samplers within a single effect have unique |
| // uniform names. swizzle is a four char max string made up of chars 'r', 'g', 'b', and 'a'. |
| @@ -62,7 +65,8 @@ |
| uint32_t configComponentMask, |
| const char* swizzle, |
| int idx) { |
| - GrAssert(0 == fConfigComponentMask); |
| + GrAssert(!this->isInitialized()); |
| + GrAssert(0 != configComponentMask); |
| GrAssert(GrGLUniformManager::kInvalidUniformHandle == fSamplerUniform); |
| GrAssert(NULL != builder); |
| @@ -100,7 +104,7 @@ |
| kFragment_ShaderType = 0x4, |
| }; |
| - GrGLShaderBuilder(const GrGLContextInfo&, GrGLUniformManager&, bool explicitLocalCoords); |
| + GrGLShaderBuilder(const GrGLContextInfo&, GrGLUniformManager&, const GrGLProgramDesc&); |
| /** |
| * Called by GrGLEffects to add code to one of the shaders. |
| @@ -172,6 +176,13 @@ |
| static GrBackendEffectFactory::EffectKey KeyForTextureAccess(const GrTextureAccess&, |
| const GrGLCaps&); |
| + typedef uint8_t DstReadKey; |
| + |
| + /** Returns a key for adding code to read the copy-of-dst color in service of effects that |
| + require reading the dst. It must not return 0 because 0 indicates that there is no dst |
| + copy read at all. */ |
| + static DstReadKey KeyForDstRead(const GrTexture* dstCopy, const GrGLCaps&); |
| + |
| /** If texture swizzling is available using tex parameters then it is preferred over mangling |
| the generated shader code. This potentially allows greater reuse of cached shaders. */ |
| static const GrGLenum* GetTexParamSwizzle(GrPixelConfig config, const GrGLCaps& caps); |
| @@ -230,6 +241,10 @@ |
| specified explicit local coords or not in the GrDrawState. */ |
| const GrGLShaderVar& localCoordsAttribute() const { return *fLocalCoordsVar; } |
| + /** Returns the color of the destination pixel. This may be NULL if no effect advertised |
| + that it will read the destination. */ |
| + const char* dstColor() const; |
| + |
| /** |
| * Are explicit local coordinates provided as input to the vertex shader. |
| */ |
| @@ -254,7 +269,16 @@ |
| const char* fsInColor, // NULL means no incoming color |
| const char* fsOutColor, |
| SkTArray<GrGLUniformManager::UniformHandle, true>* samplerHandles); |
| + |
| GrGLUniformManager::UniformHandle getRTHeightUniform() const { return fRTHeightUniform; } |
| + GrGLUniformManager::UniformHandle getDstCopyTopLeftUniform() const { |
|
robertphillips
2013/03/29 18:32:57
} on own line
bsalomon
2013/03/29 18:59:38
Done.
|
| + return fDstCopyTopLeftUniform; } |
| + GrGLUniformManager::UniformHandle getDstCopyScaleUniform() const { |
| + return fDstCopyScaleUniform; |
| + } |
| + GrGLUniformManager::UniformHandle getDstCopySamplerUniform() const { |
| + return fDstCopySampler.fSamplerUniform; |
| + } |
| struct AttributePair { |
| void set(int index, const SkString& name) { |
| @@ -263,7 +287,7 @@ |
| int fIndex; |
| SkString fName; |
| }; |
| - const SkSTArray<10, AttributePair, true>& getEffectAttributes() const { |
| + const SkTArray<AttributePair, true>& getEffectAttributes() const { |
| return fEffectAttributes; |
| } |
| const SkString* getEffectAttributeName(int attributeIndex) const; |
| @@ -296,25 +320,38 @@ |
| VarArray fFSInputs; |
| SkString fGSHeader; // layout qualifiers specific to GS |
| VarArray fFSOutputs; |
| - bool fUsesGS; |
| private: |
| enum { |
| kNonStageIdx = -1, |
| }; |
| + // 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. |
| + }; |
| + |
| const GrGLContextInfo& fCtxInfo; |
| GrGLUniformManager& fUniformManager; |
| int fCurrentStageIdx; |
| SkString fFSFunctions; |
| SkString fFSHeader; |
| + bool fUsesGS; |
| + |
| SkString fFSCode; |
| SkString fVSCode; |
| SkString fGSCode; |
| bool fSetupFragPosition; |
| + TextureSampler fDstCopySampler; |
| + |
| GrGLUniformManager::UniformHandle fRTHeightUniform; |
| + GrGLUniformManager::UniformHandle fDstCopyTopLeftUniform; |
| + GrGLUniformManager::UniformHandle fDstCopyScaleUniform; |
| SkSTArray<10, AttributePair, true> fEffectAttributes; |