OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2012 Google Inc. | 2 * Copyright 2012 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #ifndef GrGLShaderBuilder_DEFINED | 8 #ifndef GrGLShaderBuilder_DEFINED |
9 #define GrGLShaderBuilder_DEFINED | 9 #define GrGLShaderBuilder_DEFINED |
10 | 10 |
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
186 const char* body, | 186 const char* body, |
187 SkString* outName); | 187 SkString* outName); |
188 | 188 |
189 /** Generates a EffectKey for the shader code based on the texture access pa
rameters and the | 189 /** Generates a EffectKey for the shader code based on the texture access pa
rameters and the |
190 capabilities of the GL context. This is useful for keying the shader pr
ograms that may | 190 capabilities of the GL context. This is useful for keying the shader pr
ograms that may |
191 have multiple representations, based on the type/format of textures used
. */ | 191 have multiple representations, based on the type/format of textures used
. */ |
192 static GrBackendEffectFactory::EffectKey KeyForTextureAccess(const GrTexture
Access&, | 192 static GrBackendEffectFactory::EffectKey KeyForTextureAccess(const GrTexture
Access&, |
193 const GrGLCaps&
); | 193 const GrGLCaps&
); |
194 | 194 |
195 typedef uint8_t DstReadKey; | 195 typedef uint8_t DstReadKey; |
| 196 typedef uint8_t FragPosKey; |
196 | 197 |
197 /** Returns a key for adding code to read the copy-of-dst color in service
of effects that | 198 /** Returns a key for adding code to read the copy-of-dst color in service
of effects that |
198 require reading the dst. It must not return 0 because 0 indicates that
there is no dst | 199 require reading the dst. It must not return 0 because 0 indicates that
there is no dst |
199 copy read at all. */ | 200 copy read at all. */ |
200 static DstReadKey KeyForDstRead(const GrTexture* dstCopy, const GrGLCaps&); | 201 static DstReadKey KeyForDstRead(const GrTexture* dstCopy, const GrGLCaps&); |
201 | 202 |
| 203 /** Returns a key for reading the fragment location. */ |
| 204 static FragPosKey KeyForFragmentPosition(const GrRenderTarget* dst, const Gr
GLCaps&); |
| 205 |
202 /** If texture swizzling is available using tex parameters then it is prefer
red over mangling | 206 /** If texture swizzling is available using tex parameters then it is prefer
red over mangling |
203 the generated shader code. This potentially allows greater reuse of cach
ed shaders. */ | 207 the generated shader code. This potentially allows greater reuse of cach
ed shaders. */ |
204 static const GrGLenum* GetTexParamSwizzle(GrPixelConfig config, const GrGLCa
ps& caps); | 208 static const GrGLenum* GetTexParamSwizzle(GrPixelConfig config, const GrGLCa
ps& caps); |
205 | 209 |
206 /** Add a uniform variable to the current program, that has visibility in on
e or more shaders. | 210 /** Add a uniform variable to the current program, that has visibility in on
e or more shaders. |
207 visibility is a bitfield of ShaderType values indicating from which shad
ers the uniform | 211 visibility is a bitfield of ShaderType values indicating from which shad
ers the uniform |
208 should be accessible. At least one bit must be set. Geometry shader unif
orms are not | 212 should be accessible. At least one bit must be set. Geometry shader unif
orms are not |
209 supported at this time. The actual uniform name will be mangled. If outN
ame is not NULL then | 213 supported at this time. The actual uniform name will be mangled. If outN
ame is not NULL then |
210 it will refer to the final uniform name after return. Use the addUniform
Array variant to add | 214 it will refer to the final uniform name after return. Use the addUniform
Array variant to add |
211 an array of uniforms. | 215 an array of uniforms. |
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
417 void nameVariable(SkString* out, char prefix, const char* name); | 421 void nameVariable(SkString* out, char prefix, const char* name); |
418 | 422 |
419 // Interpretation of DstReadKey when generating code | 423 // Interpretation of DstReadKey when generating code |
420 enum { | 424 enum { |
421 kNoDstRead_DstReadKey = 0, | 425 kNoDstRead_DstReadKey = 0, |
422 kYesDstRead_DstReadKeyBit = 0x1, // Set if we do a dst-copy-read. | 426 kYesDstRead_DstReadKeyBit = 0x1, // Set if we do a dst-copy-read. |
423 kUseAlphaConfig_DstReadKeyBit = 0x2, // Set if dst-copy config is alpha
only. | 427 kUseAlphaConfig_DstReadKeyBit = 0x2, // Set if dst-copy config is alpha
only. |
424 kTopLeftOrigin_DstReadKeyBit = 0x4, // Set if dst-copy origin is top-le
ft. | 428 kTopLeftOrigin_DstReadKeyBit = 0x4, // Set if dst-copy origin is top-le
ft. |
425 }; | 429 }; |
426 | 430 |
| 431 enum { |
| 432 kNoFragPosRead_FragPosKey = 0, // The fragment positition wil
l not be needed. |
| 433 kTopLeftFragPosRead_FragPosKey = 0x1,// Read frag pos relative to t
op-left. |
| 434 kBottomLeftFragPosRead_FragPosKey = 0x2,// Read frag pos relative to b
ottom-left. |
| 435 }; |
| 436 |
427 const GrGLContextInfo& fCtxInfo; | 437 const GrGLContextInfo& fCtxInfo; |
428 GrGLUniformManager& fUniformManager; | 438 GrGLUniformManager& fUniformManager; |
429 uint32_t fFSFeaturesAddedMask; | 439 uint32_t fFSFeaturesAddedMask; |
430 SkString fFSFunctions; | 440 SkString fFSFunctions; |
431 SkString fFSExtensions; | 441 SkString fFSExtensions; |
432 | 442 |
433 bool fUsesGS; | 443 bool fUsesGS; |
434 | 444 |
435 SkString fFSCode; | 445 SkString fFSCode; |
436 SkString fVSCode; | 446 SkString fVSCode; |
437 SkString fGSCode; | 447 SkString fGSCode; |
438 | 448 |
439 bool fSetupFragPosition; | 449 bool fSetupFragPosition; |
440 TextureSampler fDstCopySampler; | 450 TextureSampler fDstCopySampler; |
441 | 451 |
442 GrGLUniformManager::UniformHandle fRTHeightUniform; | 452 GrGLUniformManager::UniformHandle fRTHeightUniform; |
443 GrGLUniformManager::UniformHandle fDstCopyTopLeftUniform; | 453 GrGLUniformManager::UniformHandle fDstCopyTopLeftUniform; |
444 GrGLUniformManager::UniformHandle fDstCopyScaleUniform; | 454 GrGLUniformManager::UniformHandle fDstCopyScaleUniform; |
445 | 455 |
| 456 bool fTopLeftFragPosRead; |
| 457 |
446 SkSTArray<10, AttributePair, true> fEffectAttributes; | 458 SkSTArray<10, AttributePair, true> fEffectAttributes; |
447 | 459 |
448 GrGLShaderVar* fPositionVar; | 460 GrGLShaderVar* fPositionVar; |
449 GrGLShaderVar* fLocalCoordsVar; | 461 GrGLShaderVar* fLocalCoordsVar; |
450 | 462 |
451 }; | 463 }; |
452 | 464 |
453 #endif | 465 #endif |
OLD | NEW |