1 : //
2 : // Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved.
3 : // Use of this source code is governed by a BSD-style license that can be
4 : // found in the LICENSE file.
5 : //
6 :
7 : #ifndef COMPILER_VERSIONGLSL_H_
8 : #define COMPILER_VERSIONGLSL_H_
9 :
10 : #include "GLSLANG/ShaderLang.h"
11 : #include "compiler/intermediate.h"
12 :
13 : // Traverses the intermediate tree to return the minimum GLSL version
14 : // required to legally access all built-in features used in the shader.
15 : // GLSL 1.1 which is mandated by OpenGL 2.0 provides:
16 : // - #version and #extension to declare version and extensions.
17 : // - built-in functions refract, exp, and log.
18 : // - updated step() to compare x < edge instead of x <= edge.
19 : // GLSL 1.2 which is mandated by OpenGL 2.1 provides:
20 : // - many changes to reduce differences when compared to the ES specification.
21 : // - invariant keyword and its support.
22 : // - c++ style name hiding rules.
23 : // - built-in variable gl_PointCoord for fragment shaders.
24 : // - matrix constructors taking matrix as argument.
25 : //
26 : class TVersionGLSL : public TIntermTraverser {
27 : public:
28 : TVersionGLSL(ShShaderType type);
29 :
30 : // Returns 120 if "invariant" keyword, "gl_PointCoord", or
31 : // matrix/matrix constructors are used in the shader. Else 110 is
32 : // returned.
33 0 : int getVersion() { return mVersion; }
34 :
35 : virtual void visitSymbol(TIntermSymbol*);
36 : virtual void visitConstantUnion(TIntermConstantUnion*);
37 : virtual bool visitBinary(Visit, TIntermBinary*);
38 : virtual bool visitUnary(Visit, TIntermUnary*);
39 : virtual bool visitSelection(Visit, TIntermSelection*);
40 : virtual bool visitAggregate(Visit, TIntermAggregate*);
41 : virtual bool visitLoop(Visit, TIntermLoop*);
42 : virtual bool visitBranch(Visit, TIntermBranch*);
43 :
44 : protected:
45 : void updateVersion(int version);
46 :
47 : private:
48 : ShShaderType mShaderType;
49 : int mVersion;
50 : };
51 :
52 : #endif // COMPILER_VERSIONGLSL_H_
|