zenilib  0.5.3.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
OutputGLSLBase.h
Go to the documentation of this file.
1 //
2 // Copyright (c) 2002-2011 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 CROSSCOMPILERGLSL_OUTPUTGLSLBASE_H_
8 #define CROSSCOMPILERGLSL_OUTPUTGLSLBASE_H_
9 
10 #include <set>
11 
12 #include "compiler/ForLoopUnroll.h"
13 #include "compiler/intermediate.h"
14 #include "compiler/ParseHelper.h"
15 
17 {
18 public:
20  ShArrayIndexClampingStrategy clampingStrategy,
21  ShHashFunction64 hashFunction,
22  NameMap& nameMap,
23  TSymbolTable& symbolTable);
24 
25 protected:
26  TInfoSinkBase& objSink() { return mObjSink; }
27  void writeTriplet(Visit visit, const char* preStr, const char* inStr, const char* postStr);
28  void writeVariableType(const TType& type);
30  void writeFunctionParameters(const TIntermSequence& args);
31  const ConstantUnion* writeConstantUnion(const TType& type, const ConstantUnion* pConstUnion);
32  TString getTypeName(const TType& type);
33 
34  virtual void visitSymbol(TIntermSymbol* node);
35  virtual void visitConstantUnion(TIntermConstantUnion* node);
36  virtual bool visitBinary(Visit visit, TIntermBinary* node);
37  virtual bool visitUnary(Visit visit, TIntermUnary* node);
38  virtual bool visitSelection(Visit visit, TIntermSelection* node);
39  virtual bool visitAggregate(Visit visit, TIntermAggregate* node);
40  virtual bool visitLoop(Visit visit, TIntermLoop* node);
41  virtual bool visitBranch(Visit visit, TIntermBranch* node);
42 
43  void visitCodeBlock(TIntermNode* node);
44 
45 
46  // Return the original name if hash function pointer is NULL;
47  // otherwise return the hashed name.
48  TString hashName(const TString& name);
49  // Same as hashName(), but without hashing built-in variables.
51  // Same as hashName(), but without hashing built-in functions.
52  TString hashFunctionName(const TString& mangled_name);
53 
54 private:
55  bool structDeclared(const TStructure* structure) const;
56  void declareStruct(const TStructure* structure);
57 
58  TInfoSinkBase& mObjSink;
59  bool mDeclaringVariables;
60 
61  // Structs are declared as the tree is traversed. This set contains all
62  // the structs already declared. It is maintained so that a struct is
63  // declared only once.
64  typedef std::set<TString> DeclaredStructs;
65  DeclaredStructs mDeclaredStructs;
66 
67  ForLoopUnroll mLoopUnroll;
68 
69  ShArrayIndexClampingStrategy mClampingStrategy;
70 
71  // name hashing.
72  ShHashFunction64 mHashFunction;
73 
74  NameMap& mNameMap;
75 
76  TSymbolTable& mSymbolTable;
77 };
78 
79 #endif // CROSSCOMPILERGLSL_OUTPUTGLSLBASE_H_
TInfoSinkBase & objSink()
void writeVariableType(const TType &type)
Visit
Definition: intermediate.h:524
GLint GLenum GLsizei GLsizei GLsizei GLint GLenum GLenum type
Definition: gl2ext.h:845
TOutputGLSLBase(TInfoSinkBase &objSink, ShArrayIndexClampingStrategy clampingStrategy, ShHashFunction64 hashFunction, NameMap &nameMap, TSymbolTable &symbolTable)
khronos_uint64_t(* ShHashFunction64)(const char *, size_t)
Definition: ShaderLang.h:197
TString hashVariableName(const TString &name)
std::map< TPersistString, TPersistString > NameMap
Definition: HashNames.h:17
virtual bool visitSelection(Visit visit, TIntermSelection *node)
EGLImageKHR EGLint * name
Definition: eglext.h:284
TString hashFunctionName(const TString &mangled_name)
Definition: Types.h:93
virtual bool visitAggregate(Visit visit, TIntermAggregate *node)
ShArrayIndexClampingStrategy
Definition: ShaderLang.h:175
TString getTypeName(const TType &type)
virtual void visitConstantUnion(TIntermConstantUnion *node)
void visitCodeBlock(TIntermNode *node)
TString hashName(const TString &name)
virtual void visitSymbol(TIntermSymbol *node)
void writeFunctionParameters(const TIntermSequence &args)
virtual bool visitLoop(Visit visit, TIntermLoop *node)
std::basic_string< char, std::char_traits< char >, TStringAllocator > TString
Definition: Common.h:41
virtual bool visitBranch(Visit visit, TIntermBranch *node)
void writeTriplet(Visit visit, const char *preStr, const char *inStr, const char *postStr)
virtual bool visitBinary(Visit visit, TIntermBinary *node)
TPrecision
Definition: BaseTypes.h:13
virtual bool writeVariablePrecision(TPrecision precision)=0
GLenum GLint GLint * precision
Definition: glew.h:3391
const ConstantUnion * writeConstantUnion(const TType &type, const ConstantUnion *pConstUnion)
virtual bool visitUnary(Visit visit, TIntermUnary *node)