| 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 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 100 | 100 |
| 101 enum ShaderType { | 101 enum ShaderType { |
| 102 kVertex_ShaderType = 0x1, | 102 kVertex_ShaderType = 0x1, |
| 103 kGeometry_ShaderType = 0x2, | 103 kGeometry_ShaderType = 0x2, |
| 104 kFragment_ShaderType = 0x4, | 104 kFragment_ShaderType = 0x4, |
| 105 }; | 105 }; |
| 106 | 106 |
| 107 GrGLShaderBuilder(const GrGLContextInfo&, GrGLUniformManager&, const GrGLPro
gramDesc&); | 107 GrGLShaderBuilder(const GrGLContextInfo&, GrGLUniformManager&, const GrGLPro
gramDesc&); |
| 108 | 108 |
| 109 /** | 109 /** |
| 110 * Use of these features may require a GLSL extension to be enabled. Shaders
may not compile |
| 111 * if code is added that uses one of these features without calling enableFe
ature() |
| 112 */ |
| 113 enum GLSLFeature { |
| 114 kStandardDerivatives_GLSLFeature = 0, |
| 115 |
| 116 kLastGLSLFeature = kStandardDerivatives_GLSLFeature |
| 117 }; |
| 118 |
| 119 /** |
| 120 * If the feature is supported then true is returned and any necessary #exte
nsion declarations |
| 121 * are added to the shaders. If the feature is not supported then false will
be returned. |
| 122 */ |
| 123 bool enableFeature(GLSLFeature); |
| 124 |
| 125 /** |
| 110 * Called by GrGLEffects to add code to one of the shaders. | 126 * Called by GrGLEffects to add code to one of the shaders. |
| 111 */ | 127 */ |
| 112 void vsCodeAppendf(const char format[], ...) SK_PRINTF_LIKE(2, 3) { | 128 void vsCodeAppendf(const char format[], ...) SK_PRINTF_LIKE(2, 3) { |
| 113 va_list args; | 129 va_list args; |
| 114 va_start(args, format); | 130 va_start(args, format); |
| 115 this->codeAppendf(kVertex_ShaderType, format, args); | 131 this->codeAppendf(kVertex_ShaderType, format, args); |
| 116 va_end(args); | 132 va_end(args); |
| 117 } | 133 } |
| 118 | 134 |
| 119 void gsCodeAppendf(const char format[], ...) SK_PRINTF_LIKE(2, 3) { | 135 void gsCodeAppendf(const char format[], ...) SK_PRINTF_LIKE(2, 3) { |
| (...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 306 | 322 |
| 307 void appendDecls(const VarArray&, SkString*) const; | 323 void appendDecls(const VarArray&, SkString*) const; |
| 308 void appendUniformDecls(ShaderType, SkString*) const; | 324 void appendUniformDecls(ShaderType, SkString*) const; |
| 309 | 325 |
| 310 typedef GrGLUniformManager::BuilderUniform BuilderUniform; | 326 typedef GrGLUniformManager::BuilderUniform BuilderUniform; |
| 311 GrGLUniformManager::BuilderUniformArray fUniforms; | 327 GrGLUniformManager::BuilderUniformArray fUniforms; |
| 312 | 328 |
| 313 // TODO: Everything below here private. | 329 // TODO: Everything below here private. |
| 314 public: | 330 public: |
| 315 | 331 |
| 316 SkString fHeader; // VS+FS, GLSL version, etc | |
| 317 VarArray fVSAttrs; | 332 VarArray fVSAttrs; |
| 318 VarArray fVSOutputs; | 333 VarArray fVSOutputs; |
| 319 VarArray fGSInputs; | 334 VarArray fGSInputs; |
| 320 VarArray fGSOutputs; | 335 VarArray fGSOutputs; |
| 321 VarArray fFSInputs; | 336 VarArray fFSInputs; |
| 322 SkString fGSHeader; // layout qualifiers specific to GS | 337 SkString fGSHeader; // layout qualifiers specific to GS |
| 323 VarArray fFSOutputs; | 338 VarArray fFSOutputs; |
| 324 | 339 |
| 325 private: | 340 private: |
| 326 enum { | 341 enum { |
| 327 kNonStageIdx = -1, | 342 kNonStageIdx = -1, |
| 328 }; | 343 }; |
| 329 | 344 |
| 345 /** |
| 346 * Features that should only be enabled by GrGLShaderBuilder itself. |
| 347 */ |
| 348 enum GLSLPrivateFeature { |
| 349 kFragCoordConventions_GLSLPrivateFeature = kLastGLSLFeature + 1 |
| 350 }; |
| 351 bool enablePrivateFeature(GLSLPrivateFeature); |
| 352 |
| 353 // If we ever have VS/GS features we can expand this to take a bitmask of Sh
aderType and track |
| 354 // the enables separately for each shader. |
| 355 void addFSFeature(uint32_t featureBit, const char* extensionName); |
| 356 |
| 330 // Interpretation of DstReadKey when generating code | 357 // Interpretation of DstReadKey when generating code |
| 331 enum { | 358 enum { |
| 332 kNoDstRead_DstReadKey = 0, | 359 kNoDstRead_DstReadKey = 0, |
| 333 kYesDstRead_DstReadKeyBit = 0x1, // Set if we do a dst-copy-read. | 360 kYesDstRead_DstReadKeyBit = 0x1, // Set if we do a dst-copy-read. |
| 334 kUseAlphaConfig_DstReadKeyBit = 0x2, // Set if dst-copy config is alpha
only. | 361 kUseAlphaConfig_DstReadKeyBit = 0x2, // Set if dst-copy config is alpha
only. |
| 335 kTopLeftOrigin_DstReadKeyBit = 0x4, // Set if dst-copy origin is top-le
ft. | 362 kTopLeftOrigin_DstReadKeyBit = 0x4, // Set if dst-copy origin is top-le
ft. |
| 336 }; | 363 }; |
| 337 | 364 |
| 338 const GrGLContextInfo& fCtxInfo; | 365 const GrGLContextInfo& fCtxInfo; |
| 339 GrGLUniformManager& fUniformManager; | 366 GrGLUniformManager& fUniformManager; |
| 340 int fCurrentStageIdx; | 367 int fCurrentStageIdx; |
| 368 uint32_t fFSFeaturesAddedMask; |
| 341 SkString fFSFunctions; | 369 SkString fFSFunctions; |
| 342 SkString fFSHeader; | 370 SkString fFSHeader; |
| 343 | 371 |
| 344 bool fUsesGS; | 372 bool fUsesGS; |
| 345 | 373 |
| 346 SkString fFSCode; | 374 SkString fFSCode; |
| 347 SkString fVSCode; | 375 SkString fVSCode; |
| 348 SkString fGSCode; | 376 SkString fGSCode; |
| 349 | 377 |
| 350 bool fSetupFragPosition; | 378 bool fSetupFragPosition; |
| 351 TextureSampler fDstCopySampler; | 379 TextureSampler fDstCopySampler; |
| 352 | 380 |
| 353 GrGLUniformManager::UniformHandle fRTHeightUniform; | 381 GrGLUniformManager::UniformHandle fRTHeightUniform; |
| 354 GrGLUniformManager::UniformHandle fDstCopyTopLeftUniform; | 382 GrGLUniformManager::UniformHandle fDstCopyTopLeftUniform; |
| 355 GrGLUniformManager::UniformHandle fDstCopyScaleUniform; | 383 GrGLUniformManager::UniformHandle fDstCopyScaleUniform; |
| 356 | 384 |
| 357 SkSTArray<10, AttributePair, true> fEffectAttributes; | 385 SkSTArray<10, AttributePair, true> fEffectAttributes; |
| 358 | 386 |
| 359 GrGLShaderVar* fPositionVar; | 387 GrGLShaderVar* fPositionVar; |
| 360 GrGLShaderVar* fLocalCoordsVar; | 388 GrGLShaderVar* fLocalCoordsVar; |
| 361 | 389 |
| 362 }; | 390 }; |
| 363 | 391 |
| 364 #endif | 392 #endif |
| OLD | NEW |