Skip to content

Commit cc47db6

Browse files
committed
[HLSL] Add HLSLResource attribute
HLSL Resource objects will have restrictions on use and codegen requirements. This patch is fairly minimal just adding the attribute with no spellings since it will only be attached by the HLSLExternalSemaSource. Depends on D1300017. Differential Revision: https://reviews.llvm.org/D130018
1 parent bcd538a commit cc47db6

File tree

3 files changed

+21
-0
lines changed

3 files changed

+21
-0
lines changed

clang/include/clang/Basic/Attr.td

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4022,6 +4022,17 @@ def HLSLShader : InheritableAttr {
40224022
let Documentation = [HLSLSV_ShaderTypeAttrDocs];
40234023
}
40244024

4025+
def HLSLResource : InheritableAttr {
4026+
let Spellings = [];
4027+
let Subjects = SubjectList<[Struct]>;
4028+
let LangOpts = [HLSL];
4029+
let Args = [EnumArgument<"ResourceType", "ResourceClass",
4030+
["SRV", "UAV", "CBuffer", "Sampler"],
4031+
["SRV", "UAV", "CBuffer", "Sampler"]
4032+
>];
4033+
let Documentation = [InternalOnly];
4034+
}
4035+
40254036
def RandomizeLayout : InheritableAttr {
40264037
let Spellings = [GCC<"randomize_layout">];
40274038
let Subjects = SubjectList<[Record]>;

clang/lib/Sema/HLSLExternalSemaSource.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,13 @@ struct BuiltinTypeDeclBuilder {
107107
return addMemberVariable("h", Record->getASTContext().VoidPtrTy, Access);
108108
}
109109

110+
BuiltinTypeDeclBuilder &
111+
annotateResourceClass(HLSLResourceAttr::ResourceClass RC) {
112+
Record->addAttr(
113+
HLSLResourceAttr::CreateImplicit(Record->getASTContext(), RC));
114+
return *this;
115+
}
116+
110117
static DeclRefExpr *lookupBuiltinFunction(ASTContext &AST, Sema &S,
111118
StringRef Name) {
112119
CXXScopeSpec SS;
@@ -361,5 +368,6 @@ void HLSLExternalSemaSource::completeBufferType(CXXRecordDecl *Record) {
361368
BuiltinTypeDeclBuilder(Record)
362369
.addHandleMember()
363370
.addDefaultHandleConstructor(*SemaPtr, ResourceClass::UAV)
371+
.annotateResourceClass(HLSLResourceAttr::UAV)
364372
.completeDefinition();
365373
}

clang/test/AST/HLSL/RWBuffer-AST.hlsl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,12 @@ RWBuffer<float> Buffer;
3838
// CHECK-NEXT: CXXRecordDecl 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> <invalid sloc> implicit class RWBuffer definition
3939

4040
// CHECK: FinalAttr 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> Implicit final
41+
// CHECK-NEXT: HLSLResourceAttr 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> Implicit UAV
4142
// CHECK-NEXT: FieldDecl 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> <invalid sloc> implicit h 'void *'
4243
// CHECK: ClassTemplateSpecializationDecl 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> <invalid sloc> class RWBuffer definition
4344

4445
// CHECK: TemplateArgument type 'float'
4546
// CHECK-NEXT: BuiltinType 0x{{[0-9A-Fa-f]+}} 'float'
4647
// CHECK-NEXT: FinalAttr 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> Implicit final
48+
// CHECK-NEXT: HLSLResourceAttr 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> Implicit UAV
4749
// CHECK-NEXT: FieldDecl 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> <invalid sloc> implicit referenced h 'void *'

0 commit comments

Comments
 (0)