24 struct HLSLIntrinsicEntry;
171 bool required =
true);
#define DECLARATION_VISIT_PROC(CLASS_NAME)
Definition Visitor.hpp:88
Definition Analyzer.hpp:30
Definition HLSLAnalyzer.hpp:27
void analyzeEntryPointAttributes(const Vector< AttributePtr > &attribs)
void analyzeCallExpression(CallExpression *callExpression)
void analyzeEntryPointAttributesComputeShader(const Vector< AttributePtr > &attribs)
void analyzeAttributeOutputTopology(const Attribute *attrib, bool required=true)
bool analyzeStaticAccessExpression(const Expression *prefixExpression, bool isStatic, const AST *ast=nullptr)
ShaderVersion mShaderModel
Definition HLSLAnalyzer.hpp:37
Program * mProgram
Definition HLSLAnalyzer.hpp:29
void analyzeAttributePatchConstantFunc(const Attribute *attrib)
void analyzeCallExpressionIntrinsicPrimary(CallExpression *callExpression, const HLSLIntrinsicEntry &intr)
void analyzeSecondaryEntryPointAttributesTessEvaluationShader(const Vector< AttributePtr > &attribs)
void analyzeEntryPointAttributesFragmentShader(const Vector< AttributePtr > &attribs)
String mSecondaryEntryPoint
Definition HLSLAnalyzer.hpp:32
void analyzeEntryPointParameterInOutBuffer(FunctionDeclaration *funcDeclaration, VarDeclaration *varDeclaration, const BufferTypeDenoter *bufferTypeDen, bool input)
void analyzeVectorSpaceAssign(TypedAST *lhs, const TypeDenoter &rhsTypeDen, const OnAssignTypeDenoterProc &assignTypeDenProc=nullptr, bool swapAssignOrder=false)
void analyzeLValueExpression(Expression *expression, const AST *ast=nullptr, VarDeclaration *param=nullptr)
void analyzeEntryPointParameterInOut(FunctionDeclaration *funcDeclaration, VarDeclaration *varDeclaration, bool input, TypeDenoterPtr varTypeDen=nullptr)
void analyzeVarDeclarationStaticMember(VarDeclaration *varDeclaration)
void analyzeEntryPointParameterInOutVariable(FunctionDeclaration *funcDeclaration, VarDeclaration *varDeclaration, bool input)
void analyzeCallExpressionFunction(CallExpression *callExpression, bool isStatic=false, const Expression *prefixExpression=nullptr, const TypeDenoter *prefixTypeDenoter=nullptr)
HLSLAnalyzer(Log *log=nullptr)
void analyzeVarDeclarationLocal(VarDeclaration *varDeclaration, bool registerVarIdent=true)
void analyzeVarDeclaration(VarDeclaration *varDeclaration)
void decorateASTPrimary(Program &program, const ShaderInput &inputDesc, const ShaderOutput &outputDesc) override
UniqueFunction< void(const TypeDenoterPtr &) const > OnAssignTypeDenoterProc
Definition HLSLAnalyzer.hpp:49
ASTSymbolTable::OnOverrideProc OnOverrideProc
Definition HLSLAnalyzer.hpp:47
void analyzeObjectExpressionVarDeclarationFromStruct(ObjectExpression *expression, StructDeclaration *baseStructDeclaration, const StructTypeDenoter &structTypeDen)
void analyzeObjectExpressionBaseStructDeclarationFromStruct(ObjectExpression *expression, PrefixArgs &outputArgs, const StructTypeDenoter &structTypeDen)
void analyzeEntryPointAttributesTessEvaluationShader(const Vector< AttributePtr > &attribs)
void analyzeEntryPointAttributesTessControlShader(const Vector< AttributePtr > &attribs)
void analyzeLValueExpressionObject(ObjectExpression *objectExpression, const AST *ast=nullptr, VarDeclaration *param=nullptr)
void analyzeSemanticSM3Remaining()
void analyzeAttributePartitioning(const Attribute *attrib, bool required=true)
bool mSecondaryEntryPointFound
Definition HLSLAnalyzer.hpp:33
void analyzeSemanticVarDeclaration(IndexedSemantic &semantic, VarDeclaration *varDeclaration)
bool analyzeAttributeValuePrimary(Expression *argExpression, AttributeValue &value, const OnValidAttributeValueProc &expectedValueFunc, String &literalValue)
void analyzeParameter(VarDeclarationStatement *param)
void analyzeIntrinsicWrapperInlining(CallExpression *callExpression)
bool analyzeNumArgsAttribute(const Attribute *attrib, std::size_t expectedNumArgs, bool required=true)
InputShaderVersion mVersionIn
Definition HLSLAnalyzer.hpp:36
bool isD3D9ShaderModel() const
void analyzeArrayExpression(ArrayExpression *expression)
void analyzeEntryPointAttributesGeometryShader(const Vector< AttributePtr > &attribs)
void analyzeAttributeSpace(const Attribute *attrib, const TypeDenoterPtr &typeDen)
void analyzeAttributeValue(Expression *argExpression, AttributeValue &value, const OnValidAttributeValueProc &expectedValueFunc, const String &expectationDesc, bool required=true)
void analyzeCallExpressionIntrinsic(CallExpression *callExpression, const HLSLIntrinsicEntry &intr, bool isStatic=false, const TypeDenoter *prefixTypeDenoter=nullptr)
Set< VarDeclaration * > mVarDeclarationSM3Semantics
Definition HLSLAnalyzer.hpp:40
void analyzeAttributeLayout(const Attribute *attrib, const TypeDenoterPtr &typeDen)
void analyzeEntryPointParameterInOutStruct(FunctionDeclaration *funcDeclaration, StructDeclaration *structDeclaration, bool input)
void analyzeEntryPointParameter(FunctionDeclaration *funcDeclaration, const VarDeclarationStatement *param)
ShaderTarget mShaderTarget
Definition HLSLAnalyzer.hpp:35
void analyzeAttributeDomain(const Attribute *attrib, bool required=true)
void analyzeEntryPoint(FunctionDeclaration *funcDeclaration)
void analyzeSemanticFunctionReturn(IndexedSemantic &semantic)
void analyzeObjectExpression(ObjectExpression *expression, PrefixArgs *args)
void analyzeExtAttributes(const Vector< AttributePtr > &attribs, const TypeDenoterPtr &typeDen)
void analyzeEntryPointInputOutput(FunctionDeclaration *funcDeclaration)
void analyzeArrayDimensionList(const Vector< ArrayDimensionPtr > &arrayDimensions)
void analyzeCallExpressionIntrinsicFromBufferType(const CallExpression *callExpression, const BufferType bufferType)
void analyzeSemantic(IndexedSemantic &semantic)
void analyzeEntryPointSemantics(FunctionDeclaration *funcDeclaration, const Vector< Semantic > &inSemantics, const Vector< Semantic > &outSemantics)
RawFlags mExtensions
Definition HLSLAnalyzer.hpp:41
String mEntryPoint
Definition HLSLAnalyzer.hpp:31
bool analyzeNumArgsAttribute(const Attribute *attrib, std::size_t minNumArgs, std::size_t maxNumArgs, bool required)
bool mPreferWrappers
Definition HLSLAnalyzer.hpp:38
void analyzeAttributeMaxVertexCount(const Attribute *attrib)
bool analyzeStaticTypeSpecifier(const TypeSpecifier *typeSpecifier, const String &ident, const Expression *expression, bool isStatic)
void analyzeAttributeNumThreadsArgument(Expression *expression, UInt32 &value)
void analyzeAttributeNumThreads(const Attribute *attrib)
void analyzeSecondaryEntryPointAttributes(const Vector< AttributePtr > &attribs)
bool analyzeAttributeSpaceIdent(const Attribute *attrib, std::size_t argIndex, String &ident)
void errorIfAttributeNotFound(bool found, const String &attribDesc)
void analyzeAttributeOutputControlPoints(const Attribute *attrib)
void analyzeSecondaryEntryPoint(FunctionDeclaration *funcDeclaration, bool isPatchConstantFunc=false)
void analyzeSemanticSM3(IndexedSemantic &semantic, bool input)
UniqueFunction< bool(const AttributeValue) const > OnValidAttributeValueProc
Definition HLSLAnalyzer.hpp:48
void analyzeCallExpressionPrimary(CallExpression *callExpression, const TypeDenoter *prefixTypeDenoter=nullptr)
void analyzeEntryPointOutput(Expression *expression)
Definition ASTEnums.hpp:1557
Log base class.
Definition Log.hpp:19
Definition ShaderVersion.hpp:17
UniqueFunction< bool(SymbolType &prevSymbol) const > OnOverrideProc
Definition SymbolTable.hpp:46
AttributeValue
Definition ASTEnums.hpp:948
InputShaderVersion
Input shader version enumeration.
Definition Targets.hpp:40
@ HLSL5
HLSL Shader Model 5.0 (DirectX 11).
ShaderTarget
Shader target enumeration.
Definition Targets.hpp:16
@ VertexShader
Vertex shader.
SPtr< TypeDenoter > TypeDenoterPtr
Definition TypeDenoter.hpp:29
BufferType
Definition ASTEnums.hpp:492
std::vector< T, ScopedAllocatorAdaptor< StdAllocator< T, RawAllocator > > > Vector
Vector is a sequence container that encapsulates dynamic size arrays.
Definition Vector.hpp:17
std::uint32_t UInt32
Definition DataTypes.hpp:23
FunctionBase< true, false, fu2::capacity_default, true, false, Signatures... > UniqueFunction
An owning non copyable function wrapper for arbitrary callable types.
Definition Function.hpp:59
constexpr size_t hash(const T &v)
Generates a hash for the provided type.
Definition Hash.hpp:25
std::set< Key, Compare, ScopedAllocatorAdaptor< StdAllocator< Key, RawAllocator > > > Set
Set is an associative container that contains a sorted set of unique objects of type Key.
Definition Set.hpp:21
decltype(&*std::declval< I >() found)(const I &it, C &container)
Returns a pointer to the value if found, otherwise nullptr.
Definition Iterator.hpp:572
Buffer type denoter with generic sub type and generic size.
Definition TypeDenoter.hpp:265
Definition HLSLAnalyzer.hpp:51
StructDeclaration * outPrefixBaseStruct
Definition HLSLAnalyzer.hpp:53
bool inIsPostfixStatic
Definition HLSLAnalyzer.hpp:52
Definition HLSLIntrinsics.hpp:22
Shader output descriptor structure.
Definition ShaderCompiler.hpp:293
Definition TypeDenoter.hpp:318
Definition TypeDenoter.hpp:82