zenilib  0.5.3.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
OutputHLSL.h
Go to the documentation of this file.
1 //
2 // Copyright (c) 2002-2013 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_OUTPUTHLSL_H_
8 #define COMPILER_OUTPUTHLSL_H_
9 
10 #include <list>
11 #include <set>
12 #include <map>
13 
14 #define GL_APICALL
15 #include <GLES2/gl2.h>
16 
17 #include "compiler/intermediate.h"
18 #include "compiler/ParseHelper.h"
19 #include "compiler/Uniform.h"
20 
21 namespace sh
22 {
23 class UnfoldShortCircuit;
24 
26 {
27  public:
28  OutputHLSL(TParseContext &context, const ShBuiltInResources& resources, ShShaderOutput outputType);
29  ~OutputHLSL();
30 
31  void output();
32 
34  const ActiveUniforms &getUniforms();
35 
36  TString typeString(const TType &type);
37  TString textureString(const TType &type);
38  static TString qualifierString(TQualifier qualifier);
39  static TString arrayString(const TType &type);
40  static TString initializer(const TType &type);
41  static TString decorate(const TString &string); // Prepends an underscore to avoid naming clashes
42  static TString decorateUniform(const TString &string, const TType &type);
43  static TString decorateField(const TString &string, const TType &structure);
44 
45  protected:
46  void header();
47 
48  // Visit AST nodes and output their code to the body stream
51  bool visitBinary(Visit visit, TIntermBinary*);
52  bool visitUnary(Visit visit, TIntermUnary*);
55  bool visitLoop(Visit visit, TIntermLoop*);
56  bool visitBranch(Visit visit, TIntermBranch*);
57 
58  void traverseStatements(TIntermNode *node);
59  bool isSingleStatement(TIntermNode *node);
60  bool handleExcessiveLoop(TIntermLoop *node);
61  void outputTriplet(Visit visit, const TString &preString, const TString &inString, const TString &postString);
62  void outputLineDirective(int line);
63  TString argumentString(const TIntermSymbol *symbol);
64  int vectorSize(const TType &type) const;
65 
66  void addConstructor(const TType &type, const TString &name, const TIntermSequence *parameters);
67  const ConstantUnion *writeConstantUnion(const TType &type, const ConstantUnion *constUnion);
68 
69  TString scopeString(unsigned int depthLimit);
70  TString scopedStruct(const TString &typeName);
71  TString structLookup(const TString &typeName);
72 
77 
78  // Output streams
82 
83  typedef std::map<TString, TIntermSymbol*> ReferencedSymbols;
87 
88  // Parameters determining what goes in the header output
112  bool mUsesXor;
113  bool mUsesMod1;
128 
130 
131  typedef std::set<TString> Constructors;
133 
134  typedef std::set<TString> StructNames;
136 
137  typedef std::list<TString> StructDeclarations;
139 
140  typedef std::vector<int> ScopeBracket;
142  unsigned int mScopeDepth;
143 
144  int mUniqueIndex; // For creating unique names
145 
149 
151 
154 
157  int uniformRegister(TIntermSymbol *uniform);
158  void declareUniform(const TType &type, const TString &name, int index);
159  static GLenum glVariableType(const TType &type);
160  static GLenum glVariablePrecision(const TType &type);
161 
163 };
164 }
165 
166 #endif // COMPILER_OUTPUTHLSL_H_
TInfoSinkBase mBody
Definition: OutputHLSL.h:80
bool mUsesTexture2DProj
Definition: OutputHLSL.h:92
Visit
Definition: intermediate.h:524
TQualifier
Definition: BaseTypes.h:81
static TString initializer(const TType &type)
std::set< TString > StructNames
Definition: OutputHLSL.h:134
bool mUsesTextureCubeLod0
Definition: OutputHLSL.h:102
bool mUsesFaceforward4
Definition: OutputHLSL.h:123
GLint GLenum GLsizei GLsizei GLsizei GLint GLenum GLenum type
Definition: gl2ext.h:845
const ShShaderOutput mOutputType
Definition: OutputHLSL.h:74
ActiveUniforms mActiveUniforms
Definition: OutputHLSL.h:162
void visitConstantUnion(TIntermConstantUnion *)
unsigned int GLenum
Definition: gl2.h:23
bool mUsesDepthRange
Definition: OutputHLSL.h:106
bool mUsesTexture2DProj_bias
Definition: OutputHLSL.h:93
std::vector< Uniform > ActiveUniforms
Definition: Uniform.h:31
void outputTriplet(Visit visit, const TString &preString, const TString &inString, const TString &postString)
bool mUsesPointCoord
Definition: OutputHLSL.h:108
bool mUsesFaceforward2
Definition: OutputHLSL.h:121
TString textureString(const TType &type)
bool visitLoop(Visit visit, TIntermLoop *)
TString registerString(TIntermSymbol *operand)
EGLImageKHR EGLint * name
Definition: eglext.h:284
OutputHLSL(TParseContext &context, const ShBuiltInResources &resources, ShShaderOutput outputType)
Definition: OutputHLSL.cpp:30
bool mUsesFragData
Definition: OutputHLSL.h:105
bool mContainsLoopDiscontinuity
Definition: OutputHLSL.h:146
int uniformRegister(TIntermSymbol *uniform)
void outputLineDirective(int line)
static TString decorateField(const TString &string, const TType &structure)
Definition: Types.h:93
bool handleExcessiveLoop(TIntermLoop *node)
bool mInsideDiscontinuousLoop
Definition: OutputHLSL.h:148
std::map< TString, TIntermSymbol * > ReferencedSymbols
Definition: OutputHLSL.h:83
std::set< TString > Constructors
Definition: OutputHLSL.h:131
StructDeclarations mStructDeclarations
Definition: OutputHLSL.h:138
StructNames mStructNames
Definition: OutputHLSL.h:135
int vectorSize(const TType &type) const
Definition: OutputHLSL.cpp:133
static GLenum glVariablePrecision(const TType &type)
static GLenum glVariableType(const TType &type)
bool mUsesFaceforward3
Definition: OutputHLSL.h:122
int mSamplerRegister
Definition: OutputHLSL.h:153
bool mUsesTexture2DProjLod
Definition: OutputHLSL.h:94
static TString arrayString(const TType &type)
const ConstantUnion * writeConstantUnion(const TType &type, const ConstantUnion *constUnion)
bool mInsideFunction
Definition: OutputHLSL.h:76
const ActiveUniforms & getUniforms()
Definition: OutputHLSL.cpp:128
TInfoSinkBase mFooter
Definition: OutputHLSL.h:81
bool mUsesTextureCubeLod0_bias
Definition: OutputHLSL.h:103
bool mUsesTexture2D_bias
Definition: OutputHLSL.h:90
bool visitUnary(Visit visit, TIntermUnary *)
bool mUsesTextureCubeLod
Definition: OutputHLSL.h:97
void visitSymbol(TIntermSymbol *)
bool mUsesTexture2D
Definition: OutputHLSL.h:89
TInfoSinkBase & getBodyStream()
Definition: OutputHLSL.cpp:123
bool visitBranch(Visit visit, TIntermBranch *)
std::vector< int > ScopeBracket
Definition: OutputHLSL.h:140
GLuint index
Definition: glew.h:1800
UnfoldShortCircuit * mUnfoldShortCircuit
Definition: OutputHLSL.h:75
bool mUsesFragCoord
Definition: OutputHLSL.h:107
TString scopeString(unsigned int depthLimit)
bool mUsesFaceforward1
Definition: OutputHLSL.h:120
std::basic_string< char, std::char_traits< char >, TStringAllocator > TString
Definition: Common.h:41
TString scopedStruct(const TString &typeName)
bool mUsesTexture2DLod0
Definition: OutputHLSL.h:98
int mNumRenderTargets
Definition: OutputHLSL.h:129
bool mUsesFrontFacing
Definition: OutputHLSL.h:109
static TString qualifierString(TQualifier qualifier)
ReferencedSymbols mReferencedAttributes
Definition: OutputHLSL.h:85
int samplerRegister(TIntermSymbol *sampler)
void declareUniform(const TType &type, const TString &name, int index)
bool mUsesTexture2DProjLod0
Definition: OutputHLSL.h:100
bool visitAggregate(Visit visit, TIntermAggregate *)
ReferencedSymbols mReferencedUniforms
Definition: OutputHLSL.h:84
bool visitSelection(Visit visit, TIntermSelection *)
ScopeBracket mScopeBracket
Definition: OutputHLSL.h:141
TString structLookup(const TString &typeName)
void traverseStatements(TIntermNode *node)
ReferencedSymbols mReferencedVaryings
Definition: OutputHLSL.h:86
void addConstructor(const TType &type, const TString &name, const TIntermSequence *parameters)
int mUniformRegister
Definition: OutputHLSL.h:152
ShShaderOutput
Definition: ShaderLang.h:80
std::list< TString > StructDeclarations
Definition: OutputHLSL.h:137
bool mUsesTexture2DLod
Definition: OutputHLSL.h:91
bool mOutputLod0Function
Definition: OutputHLSL.h:147
bool mUsesTexture2DProjLod0_bias
Definition: OutputHLSL.h:101
bool mUsesFragDepth
Definition: OutputHLSL.h:111
TParseContext * context
bool isSingleStatement(TIntermNode *node)
TParseContext & mContext
Definition: OutputHLSL.h:73
Constructors mConstructors
Definition: OutputHLSL.h:132
bool mUsesTexture2DLod0_bias
Definition: OutputHLSL.h:99
bool mUsesTextureCube
Definition: OutputHLSL.h:95
bool mUsesTextureCube_bias
Definition: OutputHLSL.h:96
GLuint sampler
Definition: glew.h:3464
unsigned int mScopeDepth
Definition: OutputHLSL.h:142
static TString decorate(const TString &string)
TString argumentString(const TIntermSymbol *symbol)
TInfoSinkBase mHeader
Definition: OutputHLSL.h:79
TIntermSymbol * mExcessiveLoopIndex
Definition: OutputHLSL.h:150
TString typeString(const TType &type)
static TString decorateUniform(const TString &string, const TType &type)
bool mUsesFragColor
Definition: OutputHLSL.h:104
bool visitBinary(Visit visit, TIntermBinary *)
bool mUsesPointSize
Definition: OutputHLSL.h:110