CeresEngine 0.2.0
A game development framework
Loading...
Searching...
No Matches
CeresEngine::ShaderCompiler::HLSLAnalyzer Class Reference

#include <CeresEngine/Material/ShaderCompiler/Frontend/HLSL/HLSLAnalyzer.hpp>

Inheritance diagram for CeresEngine::ShaderCompiler::HLSLAnalyzer:
CeresEngine::ShaderCompiler::Analyzer CeresEngine::ShaderCompiler::VisitorTracker CeresEngine::ShaderCompiler::Visitor

Classes

struct  PrefixArgs
 

Public Member Functions

 HLSLAnalyzer (Log *log=nullptr)
 
- Public Member Functions inherited from CeresEngine::ShaderCompiler::Analyzer
 Analyzer (Log *log=nullptr)
 
bool decorateAST (Program &program, const ShaderInput &inputDesc, const ShaderOutput &outputDesc)
 

Private Types

using OnOverrideProc = ASTSymbolTable::OnOverrideProc
 
using OnValidAttributeValueProc = UniqueFunction< bool(const AttributeValue) const >
 
using OnAssignTypeDenoterProc = UniqueFunction< void(const TypeDenoterPtr &) const >
 

Private Member Functions

void decorateASTPrimary (Program &program, const ShaderInput &inputDesc, const ShaderOutput &outputDesc) override
 
void errorIfAttributeNotFound (bool found, const String &attribDesc)
 
bool isD3D9ShaderModel () const
 
void visitProgram (Program *ast, void *args) override
 
void visitCodeBlock (CodeBlock *ast, void *args) override
 
void visitAttribute (Attribute *ast, void *args) override
 
void visitArrayDimension (ArrayDimension *ast, void *args) override
 
void visitTypeSpecifier (TypeSpecifier *ast, void *args) override
 
void visitVarDeclaration (VarDeclaration *ast, void *args) override
 
void visitBufferDeclaration (BufferDeclaration *ast, void *args) override
 
void visitSamplerDeclaration (SamplerDeclaration *ast, void *args) override
 
void visitStructDeclaration (StructDeclaration *ast, void *args) override
 
void visitAliasDeclaration (AliasDeclaration *ast, void *args) override
 
void visitFunctionDeclaration (FunctionDeclaration *ast, void *args) override
 
void visitBufferDeclarationStatement (BufferDeclarationStatement *ast, void *args) override
 
void visitUniformBufferDeclaration (UniformBufferDeclaration *ast, void *args) override
 
void visitVarDeclarationStatement (VarDeclarationStatement *ast, void *args) override
 
void visitBasicDeclarationStatement (BasicDeclarationStatement *ast, void *args) override
 
void visitCodeBlockStatement (CodeBlockStatement *ast, void *args) override
 
void visitForLoopStatement (ForLoopStatement *ast, void *args) override
 
void visitWhileLoopStatement (WhileLoopStatement *ast, void *args) override
 
void visitDoWhileLoopStatement (DoWhileLoopStatement *ast, void *args) override
 
void visitIfStatement (IfStatement *ast, void *args) override
 
void visitElseStatement (ElseStatement *ast, void *args) override
 
void visitSwitchStatement (SwitchStatement *ast, void *args) override
 
void visitExpressionStatement (ExpressionStatement *ast, void *args) override
 
void visitReturnStatement (ReturnStatement *ast, void *args) override
 
void visitUnaryExpression (UnaryExpression *ast, void *args) override
 
void visitPostUnaryExpression (PostUnaryExpression *ast, void *args) override
 
void visitCallExpression (CallExpression *ast, void *args) override
 
void visitAssignExpression (AssignExpression *ast, void *args) override
 
void visitObjectExpression (ObjectExpression *ast, void *args) override
 
void visitArrayExpression (ArrayExpression *ast, void *args) override
 
void analyzeVarDeclaration (VarDeclaration *varDeclaration)
 
void analyzeVarDeclarationLocal (VarDeclaration *varDeclaration, bool registerVarIdent=true)
 
void analyzeVarDeclarationStaticMember (VarDeclaration *varDeclaration)
 
void analyzeCallExpression (CallExpression *callExpression)
 
void analyzeCallExpressionPrimary (CallExpression *callExpression, const TypeDenoter *prefixTypeDenoter=nullptr)
 
void analyzeCallExpressionFunction (CallExpression *callExpression, bool isStatic=false, const Expression *prefixExpression=nullptr, const TypeDenoter *prefixTypeDenoter=nullptr)
 
void analyzeCallExpressionIntrinsic (CallExpression *callExpression, const HLSLIntrinsicEntry &intr, bool isStatic=false, const TypeDenoter *prefixTypeDenoter=nullptr)
 
void analyzeCallExpressionIntrinsicPrimary (CallExpression *callExpression, const HLSLIntrinsicEntry &intr)
 
void analyzeCallExpressionIntrinsicFromBufferType (const CallExpression *callExpression, const BufferType bufferType)
 
void analyzeIntrinsicWrapperInlining (CallExpression *callExpression)
 
void analyzeObjectExpression (ObjectExpression *expression, PrefixArgs *args)
 
void analyzeObjectExpressionVarDeclarationFromStruct (ObjectExpression *expression, StructDeclaration *baseStructDeclaration, const StructTypeDenoter &structTypeDen)
 
void analyzeObjectExpressionBaseStructDeclarationFromStruct (ObjectExpression *expression, PrefixArgs &outputArgs, const StructTypeDenoter &structTypeDen)
 
bool analyzeStaticAccessExpression (const Expression *prefixExpression, bool isStatic, const AST *ast=nullptr)
 
bool analyzeStaticTypeSpecifier (const TypeSpecifier *typeSpecifier, const String &ident, const Expression *expression, bool isStatic)
 
void analyzeLValueExpression (Expression *expression, const AST *ast=nullptr, VarDeclaration *param=nullptr)
 
void analyzeLValueExpressionObject (ObjectExpression *objectExpression, const AST *ast=nullptr, VarDeclaration *param=nullptr)
 
void analyzeArrayExpression (ArrayExpression *expression)
 
void analyzeEntryPoint (FunctionDeclaration *funcDeclaration)
 
void analyzeEntryPointInputOutput (FunctionDeclaration *funcDeclaration)
 
void analyzeEntryPointParameter (FunctionDeclaration *funcDeclaration, const VarDeclarationStatement *param)
 
void analyzeEntryPointParameterInOut (FunctionDeclaration *funcDeclaration, VarDeclaration *varDeclaration, bool input, TypeDenoterPtr varTypeDen=nullptr)
 
void analyzeEntryPointParameterInOutVariable (FunctionDeclaration *funcDeclaration, VarDeclaration *varDeclaration, bool input)
 
void analyzeEntryPointParameterInOutStruct (FunctionDeclaration *funcDeclaration, StructDeclaration *structDeclaration, bool input)
 
void analyzeEntryPointParameterInOutBuffer (FunctionDeclaration *funcDeclaration, VarDeclaration *varDeclaration, const BufferTypeDenoter *bufferTypeDen, bool input)
 
void analyzeEntryPointAttributes (const Vector< AttributePtr > &attribs)
 
void analyzeEntryPointAttributesTessControlShader (const Vector< AttributePtr > &attribs)
 
void analyzeEntryPointAttributesTessEvaluationShader (const Vector< AttributePtr > &attribs)
 
void analyzeEntryPointAttributesGeometryShader (const Vector< AttributePtr > &attribs)
 
void analyzeEntryPointAttributesFragmentShader (const Vector< AttributePtr > &attribs)
 
void analyzeEntryPointAttributesComputeShader (const Vector< AttributePtr > &attribs)
 
void analyzeEntryPointSemantics (FunctionDeclaration *funcDeclaration, const Vector< Semantic > &inSemantics, const Vector< Semantic > &outSemantics)
 
void analyzeEntryPointOutput (Expression *expression)
 
void analyzeSecondaryEntryPoint (FunctionDeclaration *funcDeclaration, bool isPatchConstantFunc=false)
 
void analyzeSecondaryEntryPointAttributes (const Vector< AttributePtr > &attribs)
 
void analyzeSecondaryEntryPointAttributesTessEvaluationShader (const Vector< AttributePtr > &attribs)
 
bool analyzeNumArgsAttribute (const Attribute *attrib, std::size_t minNumArgs, std::size_t maxNumArgs, bool required)
 
bool analyzeNumArgsAttribute (const Attribute *attrib, std::size_t expectedNumArgs, bool required=true)
 
void analyzeAttributeDomain (const Attribute *attrib, bool required=true)
 
void analyzeAttributeOutputTopology (const Attribute *attrib, bool required=true)
 
void analyzeAttributePartitioning (const Attribute *attrib, bool required=true)
 
void analyzeAttributeOutputControlPoints (const Attribute *attrib)
 
void analyzeAttributePatchConstantFunc (const Attribute *attrib)
 
void analyzeAttributeMaxVertexCount (const Attribute *attrib)
 
void analyzeAttributeNumThreads (const Attribute *attrib)
 
void analyzeAttributeNumThreadsArgument (Expression *expression, UInt32 &value)
 
void analyzeAttributeValue (Expression *argExpression, AttributeValue &value, const OnValidAttributeValueProc &expectedValueFunc, const String &expectationDesc, bool required=true)
 
bool analyzeAttributeValuePrimary (Expression *argExpression, AttributeValue &value, const OnValidAttributeValueProc &expectedValueFunc, String &literalValue)
 
void analyzeSemantic (IndexedSemantic &semantic)
 
void analyzeSemanticSM3 (IndexedSemantic &semantic, bool input)
 
void analyzeSemanticSM3Remaining ()
 
void analyzeSemanticVarDeclaration (IndexedSemantic &semantic, VarDeclaration *varDeclaration)
 
void analyzeSemanticFunctionReturn (IndexedSemantic &semantic)
 
void analyzeExtAttributes (const Vector< AttributePtr > &attribs, const TypeDenoterPtr &typeDen)
 
void analyzeAttributeLayout (const Attribute *attrib, const TypeDenoterPtr &typeDen)
 
void analyzeAttributeSpace (const Attribute *attrib, const TypeDenoterPtr &typeDen)
 
bool analyzeAttributeSpaceIdent (const Attribute *attrib, std::size_t argIndex, String &ident)
 
void analyzeVectorSpaceAssign (TypedAST *lhs, const TypeDenoter &rhsTypeDen, const OnAssignTypeDenoterProc &assignTypeDenProc=nullptr, bool swapAssignOrder=false)
 
void analyzeArrayDimensionList (const Vector< ArrayDimensionPtr > &arrayDimensions)
 
void analyzeParameter (VarDeclarationStatement *param)
 

Private Attributes

Program * mProgram = nullptr
 
String mEntryPoint
 
String mSecondaryEntryPoint
 
bool mSecondaryEntryPointFound = false
 
ShaderTarget mShaderTarget = ShaderTarget::VertexShader
 
InputShaderVersion mVersionIn = InputShaderVersion::HLSL5
 
ShaderVersion mShaderModel = {5, 0}
 
bool mPreferWrappers = false
 
Set< VarDeclaration * > mVarDeclarationSM3Semantics
 
RawFlags mExtensions
 

Additional Inherited Members

- Protected Types inherited from CeresEngine::ShaderCompiler::Analyzer
using OnOverrideProc = ASTSymbolTable::OnOverrideProc
 
- Protected Member Functions inherited from CeresEngine::ShaderCompiler::Analyzer
void submitReport (bool isError, const String &msg, const AST *ast=nullptr, const Vector< const AST * > &astAppendices={})
 
void error (const String &msg, const AST *ast=nullptr, const Vector< const AST * > &astAppendices={})
 
void errorUndeclaredIdent (const String &ident, const AST *ast=nullptr)
 
void errorUndeclaredIdent (const String &ident, const String &contextName, const AST *ast=nullptr)
 
void errorUndeclaredIdent (const String &ident, const String &contextName, const String &similarIdent, const AST *ast=nullptr)
 
void errorInternal (const String &msg, const AST *ast=nullptr)
 
void warning (const String &msg, const AST *ast=nullptr)
 
void warningOnNullStatement (const StatementPtr &ast, const String &statementTypeName)
 
ReportHandler & getReportHandler ()
 
bool isWarningEnabled (UInt32 flags) const
 
void openScope ()
 
void closeScope ()
 
void register_ (const String &ident, AST *ast)
 
AST * fetch (const String &ident, const AST *ast=nullptr)
 
AST * fetchFromCurrentScopeOrNull (const String &ident) const
 
Declaration * fetchDeclaration (const String &ident, const AST *ast=nullptr)
 
Declaration * fetchType (const String &ident, const AST *ast=nullptr)
 
VarDeclaration * fetchVarDeclaration (const String &ident, const AST *ast=nullptr)
 
FunctionDeclaration * fetchFunctionDeclaration (const String &ident, const Vector< ExpressionPtr > &args, const AST *ast=nullptr)
 
FunctionDeclaration * fetchFunctionDeclaration (const String &ident, const AST *ast=nullptr)
 
VarDeclaration * fetchVarDeclarationFromStruct (const StructTypeDenoter &structTypeDenoter, const String &ident, const AST *ast=nullptr)
 
FunctionDeclaration * fetchFunctionDeclarationFromStruct (const StructTypeDenoter &structTypeDenoter, const String &ident, const Vector< ExpressionPtr > &args, const AST *ast=nullptr)
 
StructDeclaration * fetchStructDeclarationFromIdent (const String &ident, const AST *ast=nullptr)
 
StructDeclaration * fetchStructDeclarationFromTypeDenoter (const TypeDenoter &typeDenoter)
 
StructDeclaration * findCompatibleStructDeclaration (const StructDeclaration &rhs)
 
bool isInsideGlobalScope () const
 
void analyzeTypeDenoter (TypeDenoterPtr &typeDenoter, const AST *ast)
 
void analyzeBufferTypeDenoter (BufferTypeDenoter &bufferTypeDen, const AST *ast)
 
void analyzeStructTypeDenoter (StructTypeDenoter &structTypeDen, const AST *ast)
 
void analyzeAliasTypeDenoter (TypeDenoterPtr &typeDenoter, const AST *ast)
 
void analyzeTypeSpecifier (TypeSpecifier *typeSpecifier)
 
void analyzeTypeSpecifierForParameter (const TypeSpecifier *typeSpecifier)
 
void analyzeFunctionEndOfScopes (const FunctionDeclaration &funcDeclaration)
 
void analyzeFunctionControlPath (FunctionDeclaration &funcDeclaration)
 
TypeDenoterPtr getTypeDenoterFrom (TypedAST *ast, const TypeDenoter *expectedTypeDenoter=nullptr)
 
void validateTypeCast (const TypeDenoter &sourceTypeDen, const TypeDenoter &destTypeDen, const String &contextDesc, const AST *ast=nullptr)
 
void validateTypeCastFrom (TypedAST *sourceAST, TypedAST *destAST, const String &contextDesc)
 
void analyzeConditionalExpression (Expression *expression)
 
Variant evaluateConstExpression (Expression &expression)
 
Variant evaluateConstExpressionObject (const ObjectExpression &expression)
 
Variant evaluateOrDefault (Expression &expression, const Variant &defaultValue={})
 
Int32 evaluateConstExpressionInt (Expression &expression)
 
float evaluateConstExpressionFloat (Expression &expression)
 
- 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)
 
virtual ~Visitor ()=default
 
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 visitSamplerDeclarationStatement (SamplerDeclarationStatement *ast, void *args)
 
virtual void visitAliasDeclarationStatement (AliasDeclarationStatement *ast, void *args)
 
virtual void visitNullStatement (NullStatement *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 visitBracketExpression (BracketExpression *ast, void *args)
 
virtual void visitCastExpression (CastExpression *ast, void *args)
 
virtual void visitInitializerExpression (InitializerExpression *ast, void *args)
 

Member Typedef Documentation

◆ OnAssignTypeDenoterProc

◆ OnOverrideProc

◆ OnValidAttributeValueProc

Constructor & Destructor Documentation

◆ HLSLAnalyzer()

CeresEngine::ShaderCompiler::HLSLAnalyzer::HLSLAnalyzer ( Log *  log = nullptr)

Member Function Documentation

◆ analyzeArrayDimensionList()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeArrayDimensionList ( const Vector< ArrayDimensionPtr > &  arrayDimensions)
private

◆ analyzeArrayExpression()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeArrayExpression ( ArrayExpression *  expression)
private

◆ analyzeAttributeDomain()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeAttributeDomain ( const Attribute *  attrib,
bool  required = true 
)
private

◆ analyzeAttributeLayout()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeAttributeLayout ( const Attribute *  attrib,
const TypeDenoterPtr &  typeDen 
)
private

◆ analyzeAttributeMaxVertexCount()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeAttributeMaxVertexCount ( const Attribute *  attrib)
private

◆ analyzeAttributeNumThreads()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeAttributeNumThreads ( const Attribute *  attrib)
private

◆ analyzeAttributeNumThreadsArgument()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeAttributeNumThreadsArgument ( Expression *  expression,
UInt32 &  value 
)
private

◆ analyzeAttributeOutputControlPoints()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeAttributeOutputControlPoints ( const Attribute *  attrib)
private

◆ analyzeAttributeOutputTopology()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeAttributeOutputTopology ( const Attribute *  attrib,
bool  required = true 
)
private

◆ analyzeAttributePartitioning()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeAttributePartitioning ( const Attribute *  attrib,
bool  required = true 
)
private

◆ analyzeAttributePatchConstantFunc()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeAttributePatchConstantFunc ( const Attribute *  attrib)
private

◆ analyzeAttributeSpace()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeAttributeSpace ( const Attribute *  attrib,
const TypeDenoterPtr &  typeDen 
)
private

◆ analyzeAttributeSpaceIdent()

bool CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeAttributeSpaceIdent ( const Attribute *  attrib,
std::size_t  argIndex,
String &  ident 
)
private

◆ analyzeAttributeValue()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeAttributeValue ( Expression *  argExpression,
AttributeValue &  value,
const OnValidAttributeValueProc &  expectedValueFunc,
const String &  expectationDesc,
bool  required = true 
)
private

◆ analyzeAttributeValuePrimary()

bool CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeAttributeValuePrimary ( Expression *  argExpression,
AttributeValue &  value,
const OnValidAttributeValueProc &  expectedValueFunc,
String &  literalValue 
)
private

◆ analyzeCallExpression()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeCallExpression ( CallExpression *  callExpression)
private

◆ analyzeCallExpressionFunction()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeCallExpressionFunction ( CallExpression *  callExpression,
bool  isStatic = false,
const Expression *  prefixExpression = nullptr,
const TypeDenoter *  prefixTypeDenoter = nullptr 
)
private

◆ analyzeCallExpressionIntrinsic()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeCallExpressionIntrinsic ( CallExpression *  callExpression,
const HLSLIntrinsicEntry &  intr,
bool  isStatic = false,
const TypeDenoter *  prefixTypeDenoter = nullptr 
)
private

◆ analyzeCallExpressionIntrinsicFromBufferType()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeCallExpressionIntrinsicFromBufferType ( const CallExpression *  callExpression,
const BufferType  bufferType 
)
private

◆ analyzeCallExpressionIntrinsicPrimary()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeCallExpressionIntrinsicPrimary ( CallExpression *  callExpression,
const HLSLIntrinsicEntry &  intr 
)
private

◆ analyzeCallExpressionPrimary()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeCallExpressionPrimary ( CallExpression *  callExpression,
const TypeDenoter *  prefixTypeDenoter = nullptr 
)
private

◆ analyzeEntryPoint()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeEntryPoint ( FunctionDeclaration *  funcDeclaration)
private

◆ analyzeEntryPointAttributes()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeEntryPointAttributes ( const Vector< AttributePtr > &  attribs)
private

◆ analyzeEntryPointAttributesComputeShader()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeEntryPointAttributesComputeShader ( const Vector< AttributePtr > &  attribs)
private

◆ analyzeEntryPointAttributesFragmentShader()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeEntryPointAttributesFragmentShader ( const Vector< AttributePtr > &  attribs)
private

◆ analyzeEntryPointAttributesGeometryShader()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeEntryPointAttributesGeometryShader ( const Vector< AttributePtr > &  attribs)
private

◆ analyzeEntryPointAttributesTessControlShader()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeEntryPointAttributesTessControlShader ( const Vector< AttributePtr > &  attribs)
private

◆ analyzeEntryPointAttributesTessEvaluationShader()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeEntryPointAttributesTessEvaluationShader ( const Vector< AttributePtr > &  attribs)
private

◆ analyzeEntryPointInputOutput()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeEntryPointInputOutput ( FunctionDeclaration *  funcDeclaration)
private

◆ analyzeEntryPointOutput()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeEntryPointOutput ( Expression *  expression)
private

◆ analyzeEntryPointParameter()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeEntryPointParameter ( FunctionDeclaration *  funcDeclaration,
const VarDeclarationStatement *  param 
)
private

◆ analyzeEntryPointParameterInOut()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeEntryPointParameterInOut ( FunctionDeclaration *  funcDeclaration,
VarDeclaration *  varDeclaration,
bool  input,
TypeDenoterPtr  varTypeDen = nullptr 
)
private

◆ analyzeEntryPointParameterInOutBuffer()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeEntryPointParameterInOutBuffer ( FunctionDeclaration *  funcDeclaration,
VarDeclaration *  varDeclaration,
const BufferTypeDenoter *  bufferTypeDen,
bool  input 
)
private

◆ analyzeEntryPointParameterInOutStruct()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeEntryPointParameterInOutStruct ( FunctionDeclaration *  funcDeclaration,
StructDeclaration *  structDeclaration,
bool  input 
)
private

◆ analyzeEntryPointParameterInOutVariable()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeEntryPointParameterInOutVariable ( FunctionDeclaration *  funcDeclaration,
VarDeclaration *  varDeclaration,
bool  input 
)
private

◆ analyzeEntryPointSemantics()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeEntryPointSemantics ( FunctionDeclaration *  funcDeclaration,
const Vector< Semantic > &  inSemantics,
const Vector< Semantic > &  outSemantics 
)
private

◆ analyzeExtAttributes()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeExtAttributes ( const Vector< AttributePtr > &  attribs,
const TypeDenoterPtr &  typeDen 
)
private

◆ analyzeIntrinsicWrapperInlining()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeIntrinsicWrapperInlining ( CallExpression *  callExpression)
private

◆ analyzeLValueExpression()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeLValueExpression ( Expression *  expression,
const AST *  ast = nullptr,
VarDeclaration *  param = nullptr 
)
private

◆ analyzeLValueExpressionObject()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeLValueExpressionObject ( ObjectExpression *  objectExpression,
const AST *  ast = nullptr,
VarDeclaration *  param = nullptr 
)
private

◆ analyzeNumArgsAttribute() [1/2]

bool CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeNumArgsAttribute ( const Attribute *  attrib,
std::size_t  expectedNumArgs,
bool  required = true 
)
private

◆ analyzeNumArgsAttribute() [2/2]

bool CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeNumArgsAttribute ( const Attribute *  attrib,
std::size_t  minNumArgs,
std::size_t  maxNumArgs,
bool  required 
)
private

◆ analyzeObjectExpression()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeObjectExpression ( ObjectExpression *  expression,
PrefixArgs *  args 
)
private

◆ analyzeObjectExpressionBaseStructDeclarationFromStruct()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeObjectExpressionBaseStructDeclarationFromStruct ( ObjectExpression *  expression,
PrefixArgs &  outputArgs,
const StructTypeDenoter &  structTypeDen 
)
private

◆ analyzeObjectExpressionVarDeclarationFromStruct()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeObjectExpressionVarDeclarationFromStruct ( ObjectExpression *  expression,
StructDeclaration *  baseStructDeclaration,
const StructTypeDenoter &  structTypeDen 
)
private

◆ analyzeParameter()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeParameter ( VarDeclarationStatement *  param)
private

◆ analyzeSecondaryEntryPoint()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeSecondaryEntryPoint ( FunctionDeclaration *  funcDeclaration,
bool  isPatchConstantFunc = false 
)
private

◆ analyzeSecondaryEntryPointAttributes()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeSecondaryEntryPointAttributes ( const Vector< AttributePtr > &  attribs)
private

◆ analyzeSecondaryEntryPointAttributesTessEvaluationShader()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeSecondaryEntryPointAttributesTessEvaluationShader ( const Vector< AttributePtr > &  attribs)
private

◆ analyzeSemantic()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeSemantic ( IndexedSemantic &  semantic)
private

◆ analyzeSemanticFunctionReturn()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeSemanticFunctionReturn ( IndexedSemantic &  semantic)
private

◆ analyzeSemanticSM3()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeSemanticSM3 ( IndexedSemantic &  semantic,
bool  input 
)
private

◆ analyzeSemanticSM3Remaining()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeSemanticSM3Remaining ( )
private

◆ analyzeSemanticVarDeclaration()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeSemanticVarDeclaration ( IndexedSemantic &  semantic,
VarDeclaration *  varDeclaration 
)
private

◆ analyzeStaticAccessExpression()

bool CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeStaticAccessExpression ( const Expression *  prefixExpression,
bool  isStatic,
const AST *  ast = nullptr 
)
private

◆ analyzeStaticTypeSpecifier()

bool CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeStaticTypeSpecifier ( const TypeSpecifier *  typeSpecifier,
const String &  ident,
const Expression *  expression,
bool  isStatic 
)
private

◆ analyzeVarDeclaration()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeVarDeclaration ( VarDeclaration *  varDeclaration)
private

◆ analyzeVarDeclarationLocal()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeVarDeclarationLocal ( VarDeclaration *  varDeclaration,
bool  registerVarIdent = true 
)
private

◆ analyzeVarDeclarationStaticMember()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeVarDeclarationStaticMember ( VarDeclaration *  varDeclaration)
private

◆ analyzeVectorSpaceAssign()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::analyzeVectorSpaceAssign ( TypedAST *  lhs,
const TypeDenoter &  rhsTypeDen,
const OnAssignTypeDenoterProc &  assignTypeDenProc = nullptr,
bool  swapAssignOrder = false 
)
private

◆ decorateASTPrimary()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::decorateASTPrimary ( Program &  program,
const ShaderInput &  inputDesc,
const ShaderOutput &  outputDesc 
)
overrideprivatevirtual

◆ errorIfAttributeNotFound()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::errorIfAttributeNotFound ( bool  found,
const String &  attribDesc 
)
private

◆ isD3D9ShaderModel()

bool CeresEngine::ShaderCompiler::HLSLAnalyzer::isD3D9ShaderModel ( ) const
private

◆ visitAliasDeclaration()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::visitAliasDeclaration ( AliasDeclaration *  ast,
void *  args 
)
overrideprivatevirtual

◆ visitArrayDimension()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::visitArrayDimension ( ArrayDimension *  ast,
void *  args 
)
overrideprivatevirtual

◆ visitArrayExpression()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::visitArrayExpression ( ArrayExpression *  ast,
void *  args 
)
overrideprivatevirtual

◆ visitAssignExpression()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::visitAssignExpression ( AssignExpression *  ast,
void *  args 
)
overrideprivatevirtual

◆ visitAttribute()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::visitAttribute ( Attribute *  ast,
void *  args 
)
overrideprivatevirtual

◆ visitBasicDeclarationStatement()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::visitBasicDeclarationStatement ( BasicDeclarationStatement *  ast,
void *  args 
)
overrideprivatevirtual

◆ visitBufferDeclaration()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::visitBufferDeclaration ( BufferDeclaration *  ast,
void *  args 
)
overrideprivatevirtual

◆ visitBufferDeclarationStatement()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::visitBufferDeclarationStatement ( BufferDeclarationStatement *  ast,
void *  args 
)
overrideprivatevirtual

◆ visitCallExpression()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::visitCallExpression ( CallExpression *  ast,
void *  args 
)
overrideprivatevirtual

◆ visitCodeBlock()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::visitCodeBlock ( CodeBlock *  ast,
void *  args 
)
overrideprivatevirtual

◆ visitCodeBlockStatement()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::visitCodeBlockStatement ( CodeBlockStatement *  ast,
void *  args 
)
overrideprivatevirtual

◆ visitDoWhileLoopStatement()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::visitDoWhileLoopStatement ( DoWhileLoopStatement *  ast,
void *  args 
)
overrideprivatevirtual

◆ visitElseStatement()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::visitElseStatement ( ElseStatement *  ast,
void *  args 
)
overrideprivatevirtual

◆ visitExpressionStatement()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::visitExpressionStatement ( ExpressionStatement *  ast,
void *  args 
)
overrideprivatevirtual

◆ visitForLoopStatement()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::visitForLoopStatement ( ForLoopStatement *  ast,
void *  args 
)
overrideprivatevirtual

◆ visitFunctionDeclaration()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::visitFunctionDeclaration ( FunctionDeclaration *  ast,
void *  args 
)
overrideprivatevirtual

◆ visitIfStatement()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::visitIfStatement ( IfStatement *  ast,
void *  args 
)
overrideprivatevirtual

◆ visitObjectExpression()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::visitObjectExpression ( ObjectExpression *  ast,
void *  args 
)
overrideprivatevirtual

◆ visitPostUnaryExpression()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::visitPostUnaryExpression ( PostUnaryExpression *  ast,
void *  args 
)
overrideprivatevirtual

◆ visitProgram()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::visitProgram ( Program *  ast,
void *  args 
)
overrideprivatevirtual

◆ visitReturnStatement()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::visitReturnStatement ( ReturnStatement *  ast,
void *  args 
)
overrideprivatevirtual

◆ visitSamplerDeclaration()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::visitSamplerDeclaration ( SamplerDeclaration *  ast,
void *  args 
)
overrideprivatevirtual

◆ visitStructDeclaration()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::visitStructDeclaration ( StructDeclaration *  ast,
void *  args 
)
overrideprivatevirtual

◆ visitSwitchStatement()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::visitSwitchStatement ( SwitchStatement *  ast,
void *  args 
)
overrideprivatevirtual

◆ visitTypeSpecifier()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::visitTypeSpecifier ( TypeSpecifier *  ast,
void *  args 
)
overrideprivatevirtual

◆ visitUnaryExpression()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::visitUnaryExpression ( UnaryExpression *  ast,
void *  args 
)
overrideprivatevirtual

◆ visitUniformBufferDeclaration()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::visitUniformBufferDeclaration ( UniformBufferDeclaration *  ast,
void *  args 
)
overrideprivatevirtual

◆ visitVarDeclaration()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::visitVarDeclaration ( VarDeclaration *  ast,
void *  args 
)
overrideprivatevirtual

◆ visitVarDeclarationStatement()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::visitVarDeclarationStatement ( VarDeclarationStatement *  ast,
void *  args 
)
overrideprivatevirtual

◆ visitWhileLoopStatement()

void CeresEngine::ShaderCompiler::HLSLAnalyzer::visitWhileLoopStatement ( WhileLoopStatement *  ast,
void *  args 
)
overrideprivatevirtual

Member Data Documentation

◆ mEntryPoint

String CeresEngine::ShaderCompiler::HLSLAnalyzer::mEntryPoint
private

◆ mExtensions

RawFlags CeresEngine::ShaderCompiler::HLSLAnalyzer::mExtensions
private

◆ mPreferWrappers

bool CeresEngine::ShaderCompiler::HLSLAnalyzer::mPreferWrappers = false
private

◆ mProgram

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

◆ mSecondaryEntryPoint

String CeresEngine::ShaderCompiler::HLSLAnalyzer::mSecondaryEntryPoint
private

◆ mSecondaryEntryPointFound

bool CeresEngine::ShaderCompiler::HLSLAnalyzer::mSecondaryEntryPointFound = false
private

◆ mShaderModel

ShaderVersion CeresEngine::ShaderCompiler::HLSLAnalyzer::mShaderModel = {5, 0}
private

◆ mShaderTarget

ShaderTarget CeresEngine::ShaderCompiler::HLSLAnalyzer::mShaderTarget = ShaderTarget::VertexShader
private

◆ mVarDeclarationSM3Semantics

Set<VarDeclaration*> CeresEngine::ShaderCompiler::HLSLAnalyzer::mVarDeclarationSM3Semantics
private

◆ mVersionIn

InputShaderVersion CeresEngine::ShaderCompiler::HLSLAnalyzer::mVersionIn = InputShaderVersion::HLSL5
private

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