CeresEngine 0.2.0
A game development framework
Loading...
Searching...
No Matches
CeresEngine::ShaderCompiler::Converter Class Referenceabstract

GLSL AST converter. More...

#include <CeresEngine/Material/ShaderCompiler/Backend/Converter.hpp>

Inheritance diagram for CeresEngine::ShaderCompiler::Converter:
CeresEngine::ShaderCompiler::VisitorTracker CeresEngine::ShaderCompiler::Visitor CeresEngine::ShaderCompiler::GLSLConverter

Classes

class  StatementScopeHandler
 

Public Member Functions

bool convertAST (Program &program, const ShaderInput &inputDesc, const ShaderOutput &outputDesc)
 
- Public Member Functions inherited from CeresEngine::ShaderCompiler::Visitor
virtual ~Visitor ()=default
 
virtual void visitProgram (Program *ast, void *args)
 
virtual void visitCodeBlock (CodeBlock *ast, void *args)
 
virtual void visitAttribute (Attribute *ast, void *args)
 
virtual void visitSwitchCase (SwitchCase *ast, void *args)
 
virtual void visitSamplerValue (SamplerValue *ast, void *args)
 
virtual void visitRegister (Register *ast, void *args)
 
virtual void visitPackOffset (PackOffset *ast, void *args)
 
virtual void visitArrayDimension (ArrayDimension *ast, void *args)
 
virtual void visitTypeSpecifier (TypeSpecifier *ast, void *args)
 
virtual void visitVarDeclaration (VarDeclaration *ast, void *args)
 
virtual void visitBufferDeclaration (BufferDeclaration *ast, void *args)
 
virtual void visitSamplerDeclaration (SamplerDeclaration *ast, void *args)
 
virtual void visitStructDeclaration (StructDeclaration *ast, void *args)
 
virtual void visitAliasDeclaration (AliasDeclaration *ast, void *args)
 
virtual void visitFunctionDeclaration (FunctionDeclaration *ast, void *args)
 
virtual void visitUniformBufferDeclaration (UniformBufferDeclaration *ast, void *args)
 
virtual void visitBufferDeclarationStatement (BufferDeclarationStatement *ast, void *args)
 
virtual void visitSamplerDeclarationStatement (SamplerDeclarationStatement *ast, void *args)
 
virtual void visitVarDeclarationStatement (VarDeclarationStatement *ast, void *args)
 
virtual void visitAliasDeclarationStatement (AliasDeclarationStatement *ast, void *args)
 
virtual void visitBasicDeclarationStatement (BasicDeclarationStatement *ast, void *args)
 
virtual void visitNullStatement (NullStatement *ast, void *args)
 
virtual void visitCodeBlockStatement (CodeBlockStatement *ast, void *args)
 
virtual void visitForLoopStatement (ForLoopStatement *ast, void *args)
 
virtual void visitWhileLoopStatement (WhileLoopStatement *ast, void *args)
 
virtual void visitDoWhileLoopStatement (DoWhileLoopStatement *ast, void *args)
 
virtual void visitIfStatement (IfStatement *ast, void *args)
 
virtual void visitElseStatement (ElseStatement *ast, void *args)
 
virtual void visitSwitchStatement (SwitchStatement *ast, void *args)
 
virtual void visitExpressionStatement (ExpressionStatement *ast, void *args)
 
virtual void visitReturnStatement (ReturnStatement *ast, void *args)
 
virtual void visitCtrlTransferStatement (CtrlTransferStatement *ast, void *args)
 
virtual void visitLayoutStatement (LayoutStatement *ast, void *args)
 
virtual void visitNullExpression (NullExpression *ast, void *args)
 
virtual void visitSequenceExpression (SequenceExpression *ast, void *args)
 
virtual void visitLiteralExpression (LiteralExpression *ast, void *args)
 
virtual void visitTypeSpecifierExpression (TypeSpecifierExpression *ast, void *args)
 
virtual void visitTernaryExpression (TernaryExpression *ast, void *args)
 
virtual void visitBinaryExpression (BinaryExpression *ast, void *args)
 
virtual void visitUnaryExpression (UnaryExpression *ast, void *args)
 
virtual void visitPostUnaryExpression (PostUnaryExpression *ast, void *args)
 
virtual void visitCallExpression (CallExpression *ast, void *args)
 
virtual void visitBracketExpression (BracketExpression *ast, void *args)
 
virtual void visitAssignExpression (AssignExpression *ast, void *args)
 
virtual void visitObjectExpression (ObjectExpression *ast, void *args)
 
virtual void visitArrayExpression (ArrayExpression *ast, void *args)
 
virtual void visitCastExpression (CastExpression *ast, void *args)
 
virtual void visitInitializerExpression (InitializerExpression *ast, void *args)
 

Protected Member Functions

virtual void convertASTPrimary (Program &program, const ShaderInput &inputDesc, const ShaderOutput &outputDesc)=0
 
void openScope ()
 
void closeScope ()
 
void register_ (const String &ident)
 
bool fetch (const String &ident) const
 
bool fetchFromCurrentScope (const String &ident) const
 
void pushSelfParameter (VarDeclaration *parameter)
 
void popSelfParameter ()
 
VarDeclaration * getActiveSelfParameter () const
 
void renameIdent (Identifier &ident)
 
void renameIdentObfuscated (Identifier &ident)
 
void renameIdentOf (Declaration *obj)
 
void renameIdentOfInOutVarDeclarations (const Vector< VarDeclaration * > &varDeclarations, bool input, bool useSemanticOnly=false)
 
void labelAnonymousDeclaration (Declaration *declarationObj)
 
void visitScopedStatement (StatementPtr &statement, void *args=nullptr)
 
void visitScopedStatementList (Vector< StatementPtr > &statementList, void *args=nullptr)
 
void insertStatementBefore (const StatementPtr &statement, bool globalScope=false)
 
void insertStatementAfter (const StatementPtr &statement, bool globalScope=false)
 
void moveNestedStructDeclarations (Vector< StatementPtr > &localStatements, bool globalScope=false)
 
bool isGlobalInOutVarDeclaration (const VarDeclaration *varDeclaration) const
 
bool isSamplerStateTypeDenoter (const TypeDenoterPtr &typeDenoter) const
 
void removeDeadCode (Vector< StatementPtr > &statements)
 
String makeTempVarIdent ()
 
Program * getProgram () const
 
const NameMangling & getNameMangling () const
 
- Protected Member Functions inherited from CeresEngine::ShaderCompiler::VisitorTracker
bool isInsideGlobalScope () const
 
void pushFunctionDeclaration (FunctionDeclaration *funcDeclaration)
 
void popFunctionDeclaration ()
 
bool isInsideFunctionDeclaration () const
 
bool isInsideEntryPoint () const
 
bool isInsideSecondaryEntryPoint () const
 
FunctionDeclaration * getActiveFunctionDeclaration () const
 
StructDeclaration * getActiveFunctionStructDeclaration () const
 
void pushCallExpression (CallExpression *callExpression)
 
void popCallExpression ()
 
CallExpression * getActiveCallExpression () const
 
void pushLValueExpression (Expression *expression)
 
void popLValueExpression ()
 
Expression * getActiveLValueExpression () const
 
void pushStructDeclaration (StructDeclaration *structDeclaration)
 
void popStructDeclaration ()
 
bool isInsideStructDeclaration () const
 
StructDeclaration * getActiveStructDeclaration () const
 
const Vector< StructDeclaration * > & getStructDeclarationStack () const
 
void pushUniformBufferDeclaration (UniformBufferDeclaration *uniformBufferDeclaration)
 
void popUniformBufferDeclaration ()
 
bool isInsideUniformBufferDeclaration () const
 
const Vector< UniformBufferDeclaration * > & getUniformBufferDeclarationStack () const
 
void pushVarDeclarationStatement (VarDeclarationStatement *varDeclarationStatement)
 
void popVarDeclarationStatement ()
 
bool isInsideVarDeclarationStatement () const
 
VarDeclarationStatement * getActiveVarDeclarationStatement () const
 
- Protected Member Functions inherited from CeresEngine::ShaderCompiler::Visitor
template<typename T >
void visit (const T &ast, void *args=nullptr)
 
template<typename T >
void visit (const Vector< T > &astList, void *args=nullptr)
 

Private Member Functions

void visitScopedStatementsFromHandler (const StatementScopeHandler &handler, void *args)
 
StatementScopeHandler & getActiveStatementScopeHandler ()
 

Private Attributes

SymbolTable< bool > mSymTable
 
Program * mProgram = nullptr
 
NameMangling mNameMangling
 
Vector< VarDeclaration * > mSelfParamStack
 
Stack< StatementScopeHandler > mStatementScopeHandlerStack
 
StatementScopeHandler * mStatementScopeHandlerGlobalRef = nullptr
 
UInt32 mAnonymCounter = 0
 
UInt32 mObfuscationCounter = 0
 
UInt32 mTempVarCounter = 0
 

Detailed Description

GLSL AST converter.

This class modifies the AST after context analysis to be conform with GLSL, e.g. remove arguments from intrinsic calls, that are not allowed in GLSL, such as sampler state objects.

Member Function Documentation

◆ closeScope()

void CeresEngine::ShaderCompiler::Converter::closeScope ( )
protected

◆ convertAST()

bool CeresEngine::ShaderCompiler::Converter::convertAST ( Program &  program,
const ShaderInput &  inputDesc,
const ShaderOutput &  outputDesc 
)

◆ convertASTPrimary()

virtual void CeresEngine::ShaderCompiler::Converter::convertASTPrimary ( Program &  program,
const ShaderInput &  inputDesc,
const ShaderOutput &  outputDesc 
)
protectedpure virtual

◆ fetch()

bool CeresEngine::ShaderCompiler::Converter::fetch ( const String &  ident) const
protected

◆ fetchFromCurrentScope()

bool CeresEngine::ShaderCompiler::Converter::fetchFromCurrentScope ( const String &  ident) const
protected

◆ getActiveSelfParameter()

VarDeclaration * CeresEngine::ShaderCompiler::Converter::getActiveSelfParameter ( ) const
protected

◆ getActiveStatementScopeHandler()

StatementScopeHandler & CeresEngine::ShaderCompiler::Converter::getActiveStatementScopeHandler ( )
private

◆ getNameMangling()

const NameMangling & CeresEngine::ShaderCompiler::Converter::getNameMangling ( ) const
inlineprotected

◆ getProgram()

Program * CeresEngine::ShaderCompiler::Converter::getProgram ( ) const
inlineprotected

◆ insertStatementAfter()

void CeresEngine::ShaderCompiler::Converter::insertStatementAfter ( const StatementPtr &  statement,
bool  globalScope = false 
)
protected

◆ insertStatementBefore()

void CeresEngine::ShaderCompiler::Converter::insertStatementBefore ( const StatementPtr &  statement,
bool  globalScope = false 
)
protected

◆ isGlobalInOutVarDeclaration()

bool CeresEngine::ShaderCompiler::Converter::isGlobalInOutVarDeclaration ( const VarDeclaration *  varDeclaration) const
protected

◆ isSamplerStateTypeDenoter()

bool CeresEngine::ShaderCompiler::Converter::isSamplerStateTypeDenoter ( const TypeDenoterPtr &  typeDenoter) const
protected

◆ labelAnonymousDeclaration()

void CeresEngine::ShaderCompiler::Converter::labelAnonymousDeclaration ( Declaration *  declarationObj)
protected

◆ makeTempVarIdent()

String CeresEngine::ShaderCompiler::Converter::makeTempVarIdent ( )
protected

◆ moveNestedStructDeclarations()

void CeresEngine::ShaderCompiler::Converter::moveNestedStructDeclarations ( Vector< StatementPtr > &  localStatements,
bool  globalScope = false 
)
protected

◆ openScope()

void CeresEngine::ShaderCompiler::Converter::openScope ( )
protected

◆ popSelfParameter()

void CeresEngine::ShaderCompiler::Converter::popSelfParameter ( )
protected

◆ pushSelfParameter()

void CeresEngine::ShaderCompiler::Converter::pushSelfParameter ( VarDeclaration *  parameter)
protected

◆ register_()

void CeresEngine::ShaderCompiler::Converter::register_ ( const String &  ident)
protected

◆ removeDeadCode()

void CeresEngine::ShaderCompiler::Converter::removeDeadCode ( Vector< StatementPtr > &  statements)
protected

◆ renameIdent()

void CeresEngine::ShaderCompiler::Converter::renameIdent ( Identifier &  ident)
protected

◆ renameIdentObfuscated()

void CeresEngine::ShaderCompiler::Converter::renameIdentObfuscated ( Identifier &  ident)
protected

◆ renameIdentOf()

void CeresEngine::ShaderCompiler::Converter::renameIdentOf ( Declaration *  obj)
protected

◆ renameIdentOfInOutVarDeclarations()

void CeresEngine::ShaderCompiler::Converter::renameIdentOfInOutVarDeclarations ( const Vector< VarDeclaration * > &  varDeclarations,
bool  input,
bool  useSemanticOnly = false 
)
protected

◆ visitScopedStatement()

void CeresEngine::ShaderCompiler::Converter::visitScopedStatement ( StatementPtr &  statement,
void *  args = nullptr 
)
protected

◆ visitScopedStatementList()

void CeresEngine::ShaderCompiler::Converter::visitScopedStatementList ( Vector< StatementPtr > &  statementList,
void *  args = nullptr 
)
protected

◆ visitScopedStatementsFromHandler()

void CeresEngine::ShaderCompiler::Converter::visitScopedStatementsFromHandler ( const StatementScopeHandler &  handler,
void *  args 
)
private

Member Data Documentation

◆ mAnonymCounter

UInt32 CeresEngine::ShaderCompiler::Converter::mAnonymCounter = 0
private

◆ mNameMangling

NameMangling CeresEngine::ShaderCompiler::Converter::mNameMangling
private

◆ mObfuscationCounter

UInt32 CeresEngine::ShaderCompiler::Converter::mObfuscationCounter = 0
private

◆ mProgram

Program* CeresEngine::ShaderCompiler::Converter::mProgram = nullptr
private

◆ mSelfParamStack

Vector<VarDeclaration*> CeresEngine::ShaderCompiler::Converter::mSelfParamStack
private

◆ mStatementScopeHandlerGlobalRef

StatementScopeHandler* CeresEngine::ShaderCompiler::Converter::mStatementScopeHandlerGlobalRef = nullptr
private

◆ mStatementScopeHandlerStack

Stack<StatementScopeHandler> CeresEngine::ShaderCompiler::Converter::mStatementScopeHandlerStack
private

◆ mSymTable

SymbolTable<bool> CeresEngine::ShaderCompiler::Converter::mSymTable
private

◆ mTempVarCounter

UInt32 CeresEngine::ShaderCompiler::Converter::mTempVarCounter = 0
private

The documentation for this class was generated from the following file: