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 ()
 
VarDeclarationgetActiveSelfParameter () 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 ()
 
ProgramgetProgram () const
 
const NameManglinggetNameMangling () 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
 
FunctionDeclarationgetActiveFunctionDeclaration () const
 
StructDeclarationgetActiveFunctionStructDeclaration () const
 
void pushCallExpression (CallExpression *callExpression)
 
void popCallExpression ()
 
CallExpressiongetActiveCallExpression () const
 
void pushLValueExpression (Expression *expression)
 
void popLValueExpression ()
 
ExpressiongetActiveLValueExpression () const
 
void pushStructDeclaration (StructDeclaration *structDeclaration)
 
void popStructDeclaration ()
 
bool isInsideStructDeclaration () const
 
StructDeclarationgetActiveStructDeclaration () 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
 
VarDeclarationStatementgetActiveVarDeclarationStatement () 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)
 
StatementScopeHandlergetActiveStatementScopeHandler ()
 

Private Attributes

SymbolTable< boolmSymTable
 
ProgrammProgram = nullptr
 
NameMangling mNameMangling
 
Vector< VarDeclaration * > mSelfParamStack
 
Stack< StatementScopeHandlermStatementScopeHandlerStack
 
StatementScopeHandlermStatementScopeHandlerGlobalRef = 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: