Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(338)

Side by Side Diff: src/gpu/gl/GrGLShaderBuilder.h

Issue 12668019: Make GrGLShaderBuilder responsible for enabling GLSL extensions (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
77 77
78 enum ShaderType { 78 enum ShaderType {
79 kVertex_ShaderType = 0x1, 79 kVertex_ShaderType = 0x1,
80 kGeometry_ShaderType = 0x2, 80 kGeometry_ShaderType = 0x2,
81 kFragment_ShaderType = 0x4, 81 kFragment_ShaderType = 0x4,
82 }; 82 };
83 83
84 GrGLShaderBuilder(const GrGLContextInfo&, GrGLUniformManager&, bool explicit LocalCoords); 84 GrGLShaderBuilder(const GrGLContextInfo&, GrGLUniformManager&, bool explicit LocalCoords);
85 85
86 /** 86 /**
87 * Use of these features may require a GLSL extension to be enabled. Shaders may not compile
88 * if code is added that uses one of these features without calling enableFe ature()
89 */
90 enum GLSLFeature {
91 kStandardDerivatives_GLSLFeature = 0,
92
93 kLastGLSLFeature = kStandardDerivatives_GLSLFeature
94 };
95
96 /**
97 * If the feature is supported then true is returned and any necessary #exte nsion declarations
98 * are added to the shaders. If the feature is not supported then false will be returned.
99 */
100 bool enableFeature(GLSLFeature);
101
102 /**
87 * Called by GrGLEffects to add code to one of the shaders. 103 * Called by GrGLEffects to add code to one of the shaders.
88 */ 104 */
89 void vsCodeAppendf(const char format[], ...) SK_PRINTF_LIKE(2, 3) { 105 void vsCodeAppendf(const char format[], ...) SK_PRINTF_LIKE(2, 3) {
90 va_list args; 106 va_list args;
91 va_start(args, format); 107 va_start(args, format);
92 this->codeAppendf(kVertex_ShaderType, format, args); 108 this->codeAppendf(kVertex_ShaderType, format, args);
93 va_end(args); 109 va_end(args);
94 } 110 }
95 111
96 void gsCodeAppendf(const char format[], ...) SK_PRINTF_LIKE(2, 3) { 112 void gsCodeAppendf(const char format[], ...) SK_PRINTF_LIKE(2, 3) {
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
262 278
263 void appendDecls(const VarArray&, SkString*) const; 279 void appendDecls(const VarArray&, SkString*) const;
264 void appendUniformDecls(ShaderType, SkString*) const; 280 void appendUniformDecls(ShaderType, SkString*) const;
265 281
266 typedef GrGLUniformManager::BuilderUniform BuilderUniform; 282 typedef GrGLUniformManager::BuilderUniform BuilderUniform;
267 GrGLUniformManager::BuilderUniformArray fUniforms; 283 GrGLUniformManager::BuilderUniformArray fUniforms;
268 284
269 // TODO: Everything below here private. 285 // TODO: Everything below here private.
270 public: 286 public:
271 287
272 SkString fHeader; // VS+FS, GLSL version, etc
273 VarArray fVSAttrs; 288 VarArray fVSAttrs;
274 VarArray fVSOutputs; 289 VarArray fVSOutputs;
275 VarArray fGSInputs; 290 VarArray fGSInputs;
276 VarArray fGSOutputs; 291 VarArray fGSOutputs;
277 VarArray fFSInputs; 292 VarArray fFSInputs;
278 SkString fGSHeader; // layout qualifiers specific to GS 293 SkString fGSHeader; // layout qualifiers specific to GS
279 VarArray fFSOutputs; 294 VarArray fFSOutputs;
280 bool fUsesGS; 295 bool fUsesGS;
281 296
282 private: 297 private:
283 enum { 298 enum {
284 kNonStageIdx = -1, 299 kNonStageIdx = -1,
285 }; 300 };
286 301
302 /**
303 * Features that should only be enabled by GrGLShaderBuilder itself.
304 */
305 enum GLSLPrivateFeature {
306 kFragCoordConventions_GLSLPrivateFeature = kLastGLSLFeature + 1
307 };
308 bool enablePrivateFeature(GLSLPrivateFeature);
309
310 // If we ever have VS/GS features we can expand this to take a bitmask of Sh aderType and track
311 // the enables separately for each shader.
312 void addFSFeature(uint32_t featureBit, const char* extensionName);
313
287 const GrGLContextInfo& fCtxInfo; 314 const GrGLContextInfo& fCtxInfo;
288 GrGLUniformManager& fUniformManager; 315 GrGLUniformManager& fUniformManager;
289 int fCurrentStageIdx; 316 int fCurrentStageIdx;
317 uint32_t fFSFeaturesAddedMask;
290 SkString fFSFunctions; 318 SkString fFSFunctions;
291 SkString fFSHeader; 319 SkString fFSHeader;
292 320
293 SkString fFSCode; 321 SkString fFSCode;
294 SkString fVSCode; 322 SkString fVSCode;
295 SkString fGSCode; 323 SkString fGSCode;
296 324
297 bool fSetupFragPosition; 325 bool fSetupFragPosition;
298 GrGLUniformManager::UniformHandle fRTHeightUniform; 326 GrGLUniformManager::UniformHandle fRTHeightUniform;
299 327
300 SkSTArray<10, AttributePair, true> fEffectAttributes; 328 SkSTArray<10, AttributePair, true> fEffectAttributes;
301 329
302 GrGLShaderVar* fPositionVar; 330 GrGLShaderVar* fPositionVar;
303 GrGLShaderVar* fLocalCoordsVar; 331 GrGLShaderVar* fLocalCoordsVar;
304 332
305 }; 333 };
306 334
307 #endif 335 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698