28#include "llvm/ADT/STLExtras.h"
29#include "llvm/ADT/SmallVector.h"
32using namespace llvm::hlsl;
51 HLSLNamespace->setImplicit(
true);
52 HLSLNamespace->setHasExternalLexicalStorage();
56 (void)HLSLNamespace->getCanonicalDecl()->decls_begin();
57 defineTrivialHLSLTypes();
58 defineHLSLTypesWithForwardDeclarations();
59 defineHLSLAtomicIntrinsics();
75void HLSLExternalSemaSource::defineHLSLVectorAlias() {
82 &AST.
Idents.
get(
"element", tok::TokenKind::identifier),
false,
false);
83 TypeParam->setDefaultArgument(
87 TemplateParams.emplace_back(TypeParam);
91 &AST.
Idents.
get(
"element_count", tok::TokenKind::identifier), AST.
IntTy,
98 TemplateParams.emplace_back(SizeParam);
117 Record->setImplicit(
true);
129void HLSLExternalSemaSource::defineHLSLMatrixAlias() {
135 &AST.
Idents.
get(
"element", tok::TokenKind::identifier),
false,
false);
136 TypeParam->setDefaultArgument(
140 TemplateParams.emplace_back(TypeParam);
145 &AST.
Idents.
get(
"rows_count", tok::TokenKind::identifier), AST.
IntTy,
150 RowsParam->setDefaultArgument(
153 TemplateParams.emplace_back(RowsParam);
157 &AST.
Idents.
get(
"cols_count", tok::TokenKind::identifier), AST.
IntTy,
162 ColsParam->setDefaultArgument(
165 TemplateParams.emplace_back(ColsParam);
167 const unsigned MaxMatDim = SemaPtr->
getLangOpts().MaxMatrixDimension;
219 Record->setImplicit(
true);
231void HLSLExternalSemaSource::defineTrivialHLSLTypes() {
232 defineHLSLVectorAlias();
233 defineHLSLMatrixAlias();
239 bool RawBuffer,
bool HasCounter) {
262 ResourceDimension
Dim) {
288 ResourceDimension
Dim) {
311 &AST.
Idents.
get(
"element_type"),
false,
false);
349 PartialSpec->setTemplateArgsAsWritten(
352 PartialSpec->setImplicit(
true);
353 PartialSpec->setLexicalDeclContext(HLSLNamespace);
354 PartialSpec->setHasExternalLexicalStorage();
357 HLSLNamespace->
addDecl(PartialSpec);
375 QualType TType = Context.getTypeDeclType(
T);
379 Context.getTrivialTypeSourceInfo(TType, NameLoc);
382 Context, BoolTy, NameLoc, UTT_IsTypedResourceElementCompatible,
383 {TTypeSourceInfo}, NameLoc,
true);
401 QualType TType = Context.getTypeDeclType(
T);
405 Context.getTrivialTypeSourceInfo(TType, NameLoc);
408 Context, BoolTy, NameLoc, UTT_IsConstantBufferElementCompatible,
409 {TTypeSourceInfo}, NameLoc,
true);
427 QualType TType = Context.getTypeDeclType(
T);
431 Context.getTrivialTypeSourceInfo(TType, NameLoc);
435 {TTypeSourceInfo}, NameLoc,
true);
444 UETT_SizeOf, TTypeSourceInfo, BoolTy, NameLoc, NameLoc);
449 Context, llvm::APInt(Context.getTypeSize(Context.getSizeType()), 1,
true),
450 Context.getSizeType(), NameLoc);
458 Context, NotIntangibleExpr, SizeGEQOneExpr, BO_LAnd, BoolTy,
VK_LValue,
472 IdentifierInfo &ElementTypeII = Context.Idents.get(
"element_type");
481 T->setDeclContext(DC);
486 Context, DeclLoc, DeclLoc, {
T}, DeclLoc,
nullptr);
489 Expr *ConstraintExpr =
nullptr;
494 &Context.Idents.get(
"__is_typed_resource_element_compatible"));
499 &Context.Idents.get(
"__is_structured_resource_element_compatible"));
504 &Context.Idents.get(
"__is_constant_buffer_element_compatible"));
512 ConceptParams, ConstraintExpr);
523void HLSLExternalSemaSource::defineHLSLTypesWithForwardDeclarations() {
524 ASTContext &AST = SemaPtr->getASTContext();
533 Decl = BuiltinTypeDeclBuilder(*SemaPtr, HLSLNamespace,
"ConstantBuffer")
534 .addSimpleTemplateParams({
"element_type"}, ConstantBufferConcept)
535 .finalizeForwardDeclaration();
537 onCompletion(Decl, [
this](CXXRecordDecl *Decl) {
544 Decl = BuiltinTypeDeclBuilder(*SemaPtr, HLSLNamespace,
"Buffer")
545 .addSimpleTemplateParams({
"element_type"}, TypedBufferConcept)
546 .finalizeForwardDeclaration();
548 onCompletion(Decl, [
this](CXXRecordDecl *Decl) {
557 Decl = BuiltinTypeDeclBuilder(*SemaPtr, HLSLNamespace,
"RWBuffer")
558 .addSimpleTemplateParams({
"element_type"}, TypedBufferConcept)
559 .finalizeForwardDeclaration();
561 onCompletion(Decl, [
this](CXXRecordDecl *Decl) {
571 BuiltinTypeDeclBuilder(*SemaPtr, HLSLNamespace,
"RasterizerOrderedBuffer")
572 .addSimpleTemplateParams({
"element_type"}, StructuredBufferConcept)
573 .finalizeForwardDeclaration();
574 onCompletion(Decl, [
this](CXXRecordDecl *Decl) {
583 Decl = BuiltinTypeDeclBuilder(*SemaPtr, HLSLNamespace,
"StructuredBuffer")
584 .addSimpleTemplateParams({
"element_type"}, StructuredBufferConcept)
585 .finalizeForwardDeclaration();
586 onCompletion(Decl, [
this](CXXRecordDecl *Decl) {
595 Decl = BuiltinTypeDeclBuilder(*SemaPtr, HLSLNamespace,
"RWStructuredBuffer")
596 .addSimpleTemplateParams({
"element_type"}, StructuredBufferConcept)
597 .finalizeForwardDeclaration();
598 onCompletion(Decl, [
this](CXXRecordDecl *Decl) {
610 BuiltinTypeDeclBuilder(*SemaPtr, HLSLNamespace,
"AppendStructuredBuffer")
611 .addSimpleTemplateParams({
"element_type"}, StructuredBufferConcept)
612 .finalizeForwardDeclaration();
613 onCompletion(Decl, [
this](CXXRecordDecl *Decl) {
622 BuiltinTypeDeclBuilder(*SemaPtr, HLSLNamespace,
"ConsumeStructuredBuffer")
623 .addSimpleTemplateParams({
"element_type"}, StructuredBufferConcept)
624 .finalizeForwardDeclaration();
625 onCompletion(Decl, [
this](CXXRecordDecl *Decl) {
633 Decl = BuiltinTypeDeclBuilder(*SemaPtr, HLSLNamespace,
634 "RasterizerOrderedStructuredBuffer")
635 .addSimpleTemplateParams({
"element_type"}, StructuredBufferConcept)
636 .finalizeForwardDeclaration();
637 onCompletion(Decl, [
this](CXXRecordDecl *Decl) {
648 Decl = BuiltinTypeDeclBuilder(*SemaPtr, HLSLNamespace,
"ByteAddressBuffer")
649 .finalizeForwardDeclaration();
650 onCompletion(Decl, [
this](CXXRecordDecl *Decl) {
657 Decl = BuiltinTypeDeclBuilder(*SemaPtr, HLSLNamespace,
"RWByteAddressBuffer")
658 .finalizeForwardDeclaration();
659 onCompletion(Decl, [
this](CXXRecordDecl *Decl) {
668 Decl = BuiltinTypeDeclBuilder(*SemaPtr, HLSLNamespace,
669 "RasterizerOrderedByteAddressBuffer")
670 .finalizeForwardDeclaration();
671 onCompletion(Decl, [
this](CXXRecordDecl *Decl) {
679 Decl = BuiltinTypeDeclBuilder(*SemaPtr, HLSLNamespace,
"SamplerState")
680 .finalizeForwardDeclaration();
681 onCompletion(Decl, [
this](CXXRecordDecl *Decl) {
686 BuiltinTypeDeclBuilder(*SemaPtr, HLSLNamespace,
"SamplerComparisonState")
687 .finalizeForwardDeclaration();
688 onCompletion(Decl, [
this](CXXRecordDecl *Decl) {
693 Decl = BuiltinTypeDeclBuilder(*SemaPtr, HLSLNamespace,
"Texture2D")
694 .addSimpleTemplateParams({
"element_type"}, {Float4Ty},
696 .finalizeForwardDeclaration();
698 onCompletion(Decl, [
this](CXXRecordDecl *Decl) {
700 false, ResourceDimension::Dim2D)
705 *SemaPtr, HLSLNamespace,
Decl->getDescribedClassTemplate());
706 onCompletion(PartialSpec, [
this](CXXRecordDecl *Decl) {
708 false, ResourceDimension::Dim2D)
712 Decl = BuiltinTypeDeclBuilder(*SemaPtr, HLSLNamespace,
"RWTexture2D")
713 .addSimpleTemplateParams({
"element_type"}, {Float4Ty},
715 .finalizeForwardDeclaration();
717 onCompletion(Decl, [
this](CXXRecordDecl *Decl) {
719 ResourceDimension::Dim2D)
724 *SemaPtr, HLSLNamespace,
Decl->getDescribedClassTemplate());
725 onCompletion(PartialSpecRW, [
this](CXXRecordDecl *Decl) {
727 ResourceDimension::Dim2D)
732 Decl = BuiltinTypeDeclBuilder(*SemaPtr, HLSLNamespace,
"Texture2DArray")
733 .addSimpleTemplateParams({
"element_type"}, {Float4Ty},
735 .finalizeForwardDeclaration();
737 onCompletion(Decl, [
this](CXXRecordDecl *Decl) {
739 true, ResourceDimension::Dim2D)
744 *SemaPtr, HLSLNamespace,
Decl->getDescribedClassTemplate());
745 onCompletion(PartialSpec2DA, [
this](CXXRecordDecl *Decl) {
747 true, ResourceDimension::Dim2D)
752 Decl = BuiltinTypeDeclBuilder(*SemaPtr, HLSLNamespace,
"RWTexture2DArray")
753 .addSimpleTemplateParams({
"element_type"}, {Float4Ty},
755 .finalizeForwardDeclaration();
757 onCompletion(Decl, [
this](CXXRecordDecl *Decl) {
759 ResourceDimension::Dim2D)
764 *SemaPtr, HLSLNamespace,
Decl->getDescribedClassTemplate());
765 onCompletion(PartialSpecRW2DA, [
this](CXXRecordDecl *Decl) {
767 ResourceDimension::Dim2D)
777 StringRef BuiltinName,
QualType ElemTy,
778 LangAS DestAS,
bool ThreeArg) {
786 ParamTypes.push_back(DestTy);
787 ParamTypes.push_back(ElemTy);
789 ParamTypes.push_back(OrigRefTy);
803 constexpr const char *ParamNames[] = {
"dest",
"value",
"original_value"};
806 for (
auto [ParamType, ParamName] : llvm::zip(ParamTypes, ParamNames)) {
813 ParmDecls.push_back(Parm);
815 FD->setParams(ParmDecls);
819 FD->
addAttr(BuiltinAliasAttr::CreateImplicit(AST, &BuiltinII));
828 StringRef BuiltinName) {
836 for (
LangAS AS : AddrSpaces)
837 for (
bool ThreeArg : {
false,
true})
841void HLSLExternalSemaSource::defineHLSLAtomicIntrinsics() {
843 "__builtin_hlsl_interlocked_add");
845 "__builtin_hlsl_interlocked_or");
849 CompletionFunction Fn) {
850 if (!
Record->isCompleteDefinition())
851 Completions.insert(std::make_pair(
Record->getCanonicalDecl(), Fn));
861 if (
auto TDecl = dyn_cast<ClassTemplateSpecializationDecl>(
Record)) {
865 Template->getPartialSpecializations(Partials);
867 for (
auto *Partial : Partials) {
869 if (SemaPtr->DeduceTemplateArguments(Partial, TDecl->getTemplateArgs(),
872 MatchedPartial = Partial;
883 auto It = Completions.find(
Record);
884 if (It == Completions.end())
889 CompletionFunction Fn = std::move(It->second);
890 Completions.erase(It);
Defines the clang::ASTContext interface.
Provides definitions for the various language-specific address spaces.
llvm::dxil::ResourceClass ResourceClass
Defines the C++ Decl subclasses, other than those for templates (found in DeclTemplate....
Defines the C++ template declaration subclasses.
static BuiltinTypeDeclBuilder setupBufferType(CXXRecordDecl *Decl, Sema &S, ResourceClass RC, bool IsROV, bool RawBuffer, bool HasCounter)
Set up common members and attributes for buffer types.
static BuiltinTypeDeclBuilder setupTextureType(CXXRecordDecl *Decl, Sema &S, ResourceClass RC, bool IsROV, bool IsArray, ResourceDimension Dim)
Set up common members and attributes for texture types.
static void defineHLSLInterlockedFunc(Sema &S, NamespaceDecl *NS, StringRef FuncName, StringRef BuiltinName)
static BuiltinTypeDeclBuilder setupSamplerType(CXXRecordDecl *Decl, Sema &S)
Set up common members and attributes for sampler types.
static void buildAtomicOverload(Sema &S, NamespaceDecl *NS, StringRef FuncName, StringRef BuiltinName, QualType ElemTy, LangAS DestAS, bool ThreeArg)
static Expr * constructTypedBufferConstraintExpr(Sema &S, SourceLocation NameLoc, TemplateTypeParmDecl *T)
static ConceptDecl * constructBufferConceptDecl(Sema &S, NamespaceDecl *NSD, HLSLBufferType BT)
static Expr * constructConstantBufferConstraintExpr(Sema &S, SourceLocation NameLoc, TemplateTypeParmDecl *T)
static ClassTemplatePartialSpecializationDecl * addVectorTexturePartialSpecialization(Sema &S, NamespaceDecl *HLSLNamespace, ClassTemplateDecl *TextureTemplate)
static Expr * constructStructuredBufferConstraintExpr(Sema &S, SourceLocation NameLoc, TemplateTypeParmDecl *T)
static BuiltinTypeDeclBuilder setupRWTextureType(CXXRecordDecl *Decl, Sema &S, bool IsArray, ResourceDimension Dim)
Set up RWTexture type: UAV texture with only operator[] (uint2, read/write), Load and GetDimensions (...
llvm::MachO::Record Record
Defines the clang::Preprocessor interface.
This file declares semantic analysis for HLSL constructs.
Defines the clang::SourceLocation class and associated facilities.
C Language Family Type Representation.
Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...
TranslationUnitDecl * getTranslationUnitDecl() const
QualType getDependentSizedMatrixType(QualType ElementType, Expr *RowExpr, Expr *ColumnExpr, SourceLocation AttrLoc) const
Return the unique reference to the matrix type of the specified element type and size.
unsigned getIntWidth(QualType T) const
static CanQualType getCanonicalType(QualType T)
Return the canonical (structural) type corresponding to the specified potentially non-canonical type ...
QualType getLValueReferenceType(QualType T, bool SpelledAsLValue=true) const
Return the uniqued reference to the type for an lvalue reference to the specified type.
CanQualType UnsignedLongTy
TypeSourceInfo * getTrivialTypeSourceInfo(QualType T, SourceLocation Loc=SourceLocation()) const
Allocate a TypeSourceInfo where all locations have been initialized to a given location,...
CanQualType UnsignedIntTy
QualType getTemplateSpecializationType(ElaboratedTypeKeyword Keyword, TemplateName T, ArrayRef< TemplateArgument > SpecifiedArgs, ArrayRef< TemplateArgument > CanonicalArgs, QualType Underlying=QualType()) const
QualType getFunctionType(QualType ResultTy, ArrayRef< QualType > Args, const FunctionProtoType::ExtProtoInfo &EPI) const
Return a normal function type with a typed argument list.
QualType getTemplateTypeParmType(int Depth, int Index, bool ParameterPack, TemplateTypeParmDecl *ParmDecl=nullptr) const
Retrieve the template type parameter type for a template parameter or parameter pack with the given d...
QualType getExtVectorType(QualType VectorType, unsigned NumElts) const
Return the unique reference to an extended vector type of the specified element type and size.
QualType getAddrSpaceQualType(QualType T, LangAS AddressSpace) const
Return the uniqued reference to the type for an address space qualified type with the specified type ...
QualType getDependentSizedExtVectorType(QualType VectorType, Expr *SizeExpr, SourceLocation AttrLoc) const
A builtin binary operation expression such as "x + y" or "x <= y".
static BinaryOperator * Create(const ASTContext &C, Expr *lhs, Expr *rhs, Opcode opc, QualType ResTy, ExprValueKind VK, ExprObjectKind OK, SourceLocation opLoc, FPOptionsOverride FPFeatures)
Represents a C++ struct/union/class.
static CanQual< Type > CreateUnsafe(QualType Other)
Declaration of a class template.
void AddPartialSpecialization(ClassTemplatePartialSpecializationDecl *D, void *InsertPos)
Insert the specified partial specialization knowing that it is not already in.
static ClassTemplatePartialSpecializationDecl * Create(ASTContext &Context, TagKind TK, DeclContext *DC, SourceLocation StartLoc, SourceLocation IdLoc, TemplateParameterList *Params, ClassTemplateDecl *SpecializedTemplate, ArrayRef< TemplateArgument > Args, CanQualType CanonInjectedTST, ClassTemplatePartialSpecializationDecl *PrevDecl)
Declaration of a C++20 concept.
static ConceptDecl * Create(ASTContext &C, DeclContext *DC, SourceLocation L, DeclarationName Name, TemplateParameterList *Params, Expr *ConstraintExpr=nullptr)
DeclContext - This is used only as base class of specific decl types that can act as declaration cont...
void addDecl(Decl *D)
Add the declaration D into this context.
bool hasExternalLexicalStorage() const
Whether this DeclContext has external storage containing additional declarations that are lexically i...
decl_iterator decls_begin() const
static DeclRefExpr * Create(const ASTContext &Context, NestedNameSpecifierLoc QualifierLoc, SourceLocation TemplateKWLoc, ValueDecl *D, bool RefersToEnclosingVariableOrCapture, SourceLocation NameLoc, QualType T, ExprValueKind VK, NamedDecl *FoundD=nullptr, const TemplateArgumentListInfo *TemplateArgs=nullptr, NonOdrUseReason NOUR=NOUR_None)
Decl - This represents one declaration (or definition), e.g.
void setImplicit(bool I=true)
DeclContext * getDeclContext()
The name of a declaration.
This represents one expression.
Represents difference between two FPOptions values.
Represents a function declaration or definition.
static FunctionDecl * Create(ASTContext &C, DeclContext *DC, SourceLocation StartLoc, SourceLocation NLoc, DeclarationName N, QualType T, TypeSourceInfo *TInfo, StorageClass SC, bool UsesFPIntrin=false, bool isInlineSpecified=false, bool hasWrittenPrototype=true, ConstexprSpecKind ConstexprKind=ConstexprSpecKind::Unspecified, const AssociatedConstraint &TrailingRequiresClause={})
void CompleteType(TagDecl *Tag) override
Complete an incomplete HLSL builtin type.
void InitializeSema(Sema &S) override
Initialize the semantic source with the Sema instance being used to perform semantic analysis on the ...
One of these records is kept for each identifier that is lexed.
IdentifierInfo & get(StringRef Name)
Return the identifier token info for the specified named identifier.
static IntegerLiteral * Create(const ASTContext &C, const llvm::APInt &V, QualType type, SourceLocation l)
Returns a new integer literal with value 'V' and type 'type'.
Represents the results of name lookup.
Represent a C++ namespace.
static NamespaceDecl * Create(ASTContext &C, DeclContext *DC, bool Inline, SourceLocation StartLoc, SourceLocation IdLoc, IdentifierInfo *Id, NamespaceDecl *PrevDecl, bool Nested)
A C++ nested-name-specifier augmented with source location information.
static NonTypeTemplateParmDecl * Create(const ASTContext &C, DeclContext *DC, SourceLocation StartLoc, SourceLocation IdLoc, int D, int P, const IdentifierInfo *Id, QualType T, bool ParameterPack, TypeSourceInfo *TInfo)
Represents a parameter to a function.
void setScopeInfo(unsigned scopeDepth, unsigned parameterIndex)
static ParmVarDecl * Create(ASTContext &C, DeclContext *DC, SourceLocation StartLoc, SourceLocation IdLoc, const IdentifierInfo *Id, QualType T, TypeSourceInfo *TInfo, StorageClass S, Expr *DefArg)
IdentifierTable & getIdentifierTable()
A (possibly-)qualified type.
C++2a [expr.prim.req]: A requires-expression provides a concise way to express requirements on templa...
Sema - This implements semantic analysis and AST building for C.
@ LookupNamespaceName
Look up a namespace name within a C++ using directive or namespace alias definition,...
Preprocessor & getPreprocessor() const
ASTContext & getASTContext() const
const LangOptions & getLangOpts() const
TemplateArgumentLoc getTrivialTemplateArgumentLoc(const TemplateArgument &Arg, QualType NTTPType, SourceLocation Loc)
Allocate a TemplateArgumentLoc where all locations have been initialized to the given location.
bool LookupQualifiedName(LookupResult &R, DeclContext *LookupCtx, bool InUnqualifiedLookup=false)
Perform qualified name lookup into a given context.
Encodes a location in the source.
Represents the declaration of a struct/union/class/enum.
A convenient class for passing around template argument information.
void addArgument(const TemplateArgumentLoc &Loc)
Location wrapper for a TemplateArgument.
Represents a template argument.
void setTemplateParameters(TemplateParameterList *TParams)
Represents a C++ template name within the type system.
Stores a list of template parameters for a TemplateDecl and its derived classes.
static TemplateParameterList * Create(const ASTContext &C, SourceLocation TemplateLoc, SourceLocation LAngleLoc, ArrayRef< NamedDecl * > Params, SourceLocation RAngleLoc, Expr *RequiresClause)
Declaration of a template type parameter.
static TemplateTypeParmDecl * Create(const ASTContext &C, DeclContext *DC, SourceLocation KeyLoc, SourceLocation NameLoc, int D, int P, IdentifierInfo *Id, bool Typename, bool ParameterPack, bool HasTypeConstraint=false, UnsignedOrNone NumExpanded=std::nullopt)
static TypeAliasDecl * Create(ASTContext &C, DeclContext *DC, SourceLocation StartLoc, SourceLocation IdLoc, const IdentifierInfo *Id, TypeSourceInfo *TInfo)
static TypeAliasTemplateDecl * Create(ASTContext &C, DeclContext *DC, SourceLocation L, DeclarationName Name, TemplateParameterList *Params, NamedDecl *Decl)
Create a function template node.
A container of type source information.
A type trait used in the implementation of various C++11 and Library TR1 trait templates.
static TypeTraitExpr * Create(const ASTContext &C, QualType T, SourceLocation Loc, TypeTrait Kind, ArrayRef< TypeSourceInfo * > Args, SourceLocation RParenLoc, bool Value)
Create a new type trait expression.
UnaryExprOrTypeTraitExpr - expression with either a type or (unevaluated) expression operand.
UnaryOperator - This represents the unary-expression's (except sizeof and alignof),...
static UnaryOperator * Create(const ASTContext &C, Expr *input, Opcode opc, QualType type, ExprValueKind VK, ExprObjectKind OK, SourceLocation l, bool CanOverflow, FPOptionsOverride FPFeatures)
Represents a C++ using-declaration.
static UsingDirectiveDecl * Create(ASTContext &C, DeclContext *DC, SourceLocation UsingLoc, SourceLocation NamespaceLoc, NestedNameSpecifierLoc QualifierLoc, SourceLocation IdentLoc, NamedDecl *Nominated, DeclContext *CommonAncestor)
Represents a GCC generic vector type.
BuiltinTypeDeclBuilder & addDefaultHandleConstructor(AccessSpecifier Access=AccessSpecifier::AS_public)
BuiltinTypeDeclBuilder & addConsumeMethod()
BuiltinTypeDeclBuilder & addSampleGradMethods(ResourceDimension Dim, bool IsArray=false)
BuiltinTypeDeclBuilder & addCopyAssignmentOperator(AccessSpecifier Access=AccessSpecifier::AS_public)
BuiltinTypeDeclBuilder & addGatherCmpMethods(ResourceDimension Dim, bool IsArray=false)
BuiltinTypeDeclBuilder & addGetDimensionsMethodForBuffer()
BuiltinTypeDeclBuilder & addConstantBufferConversionToType()
BuiltinTypeDeclBuilder & addSamplerHandle()
BuiltinTypeDeclBuilder & addTextureLoadMethods(ResourceDimension Dim, bool IsArray=false)
BuiltinTypeDeclBuilder & completeDefinition()
BuiltinTypeDeclBuilder & addSampleBiasMethods(ResourceDimension Dim, bool IsArray=false)
BuiltinTypeDeclBuilder & addBufferHandles(ResourceClass RC, bool IsROV, bool RawBuffer, bool HasCounter, AccessSpecifier Access=AccessSpecifier::AS_private)
BuiltinTypeDeclBuilder & addByteAddressBufferStoreMethods()
BuiltinTypeDeclBuilder & addSampleMethods(ResourceDimension Dim, bool IsArray=false)
BuiltinTypeDeclBuilder & addArraySubscriptOperators(ResourceDimension Dim=ResourceDimension::Unknown, bool IsArray=false)
BuiltinTypeDeclBuilder & addSampleLevelMethods(ResourceDimension Dim, bool IsArray=false)
BuiltinTypeDeclBuilder & addCopyConstructor(AccessSpecifier Access=AccessSpecifier::AS_public)
BuiltinTypeDeclBuilder & addAppendMethod()
BuiltinTypeDeclBuilder & addTextureHandle(ResourceClass RC, bool IsROV, bool IsArray, ResourceDimension RD, AccessSpecifier Access=AccessSpecifier::AS_private)
BuiltinTypeDeclBuilder & addIncrementCounterMethod()
BuiltinTypeDeclBuilder & addSampleCmpMethods(ResourceDimension Dim, bool IsArray=false)
BuiltinTypeDeclBuilder & addMipsMember(ResourceDimension Dim)
BuiltinTypeDeclBuilder & addByteAddressBufferLoadMethods()
BuiltinTypeDeclBuilder & addStaticInitializationFunctions(bool HasCounter)
BuiltinTypeDeclBuilder & addGatherMethods(ResourceDimension Dim, bool IsArray=false)
BuiltinTypeDeclBuilder & addCalculateLodMethods(ResourceDimension Dim)
BuiltinTypeDeclBuilder & addGetDimensionsMethods(ResourceDimension Dim)
BuiltinTypeDeclBuilder & addByteAddressBufferInterlockedMethods()
BuiltinTypeDeclBuilder & addDecrementCounterMethod()
BuiltinTypeDeclBuilder & addLoadMethods()
BuiltinTypeDeclBuilder & addSampleCmpLevelZeroMethods(ResourceDimension Dim, bool IsArray=false)
Provides information about an attempted template argument deduction, whose success or failure was des...
std::variant< struct RequiresDecl, struct HeaderDecl, struct UmbrellaDirDecl, struct ModuleDecl, struct ExcludeDecl, struct ExportDecl, struct ExportAsDecl, struct ExternModuleDecl, struct UseDecl, struct LinkDecl, struct ConfigMacrosDecl, struct ConflictDecl > Decl
All declarations that can appear in a module declaration.
The JSON file list parser is used to communicate input to InstallAPI.
bool isa(CodeGen::Address addr)
@ OK_Ordinary
An ordinary object is located at an address in memory.
@ Default
Set to the current date and time.
@ Result
The result type of a method or function.
const FunctionProtoType * T
@ Template
We are parsing a template declaration.
LangAS
Defines the address space values used by the address space qualifier of QualType.
@ VK_PRValue
A pr-value expression (in the C++11 taxonomy) produces a temporary value.
@ VK_LValue
An l-value expression is a reference to an object with independent storage.
@ Success
Template argument deduction was successful.
U cast(CodeGen::Address addr)
@ Class
The "class" keyword introduces the elaborated-type-specifier.
static const ASTTemplateArgumentListInfo * Create(const ASTContext &C, const TemplateArgumentListInfo &List)
DeclarationNameInfo - A collector data type for bundling together a DeclarationName and the correspon...
Extra information about a function prototype.