Skip to content

Commit 6a94814

Browse files
authored
[HLSL][RootSignature] Update setDefaultFlags to account for Root Signature Version (#145828)
This pr updates `setDefaultFlags` in `HLSLRootSignature.h` to account for which version it should initialize the default flag values for. - Updates `setDefaultFlags` with a `Version` argument and initializes them to be compliant as described [here](llvm/wg-hlsl#297). - Updates `RootSignatureParser` to retain the `Version` and pass this into `setDefaultFlags` - Updates all uses of `setDefaultFlags` in test-cases - Adds some new unit testing to ensure behaviour is as expected and that the Parser correctly passes down the version Resolves #145820.
1 parent b0473c5 commit 6a94814

File tree

7 files changed

+319
-46
lines changed

7 files changed

+319
-46
lines changed

clang/include/clang/Parse/ParseHLSLRootSignature.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ namespace hlsl {
2727

2828
class RootSignatureParser {
2929
public:
30-
RootSignatureParser(SmallVector<llvm::hlsl::rootsig::RootElement> &Elements,
30+
RootSignatureParser(llvm::dxbc::RootSignatureVersion Version,
31+
SmallVector<llvm::hlsl::rootsig::RootElement> &Elements,
3132
RootSignatureLexer &Lexer, clang::Preprocessor &PP);
3233

3334
/// Consumes tokens from the Lexer and constructs the in-memory
@@ -187,6 +188,7 @@ class RootSignatureParser {
187188
bool tryConsumeExpectedToken(ArrayRef<RootSignatureToken::Kind> Expected);
188189

189190
private:
191+
llvm::dxbc::RootSignatureVersion Version;
190192
SmallVector<llvm::hlsl::rootsig::RootElement> &Elements;
191193
RootSignatureLexer &Lexer;
192194

clang/lib/Parse/ParseDeclCXX.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4956,7 +4956,8 @@ void Parser::ParseHLSLRootSignatureAttributeArgs(ParsedAttributes &Attrs) {
49564956
// Invoke the root signature parser to construct the in-memory constructs
49574957
hlsl::RootSignatureLexer Lexer(Signature, SignatureLoc);
49584958
SmallVector<llvm::hlsl::rootsig::RootElement> RootElements;
4959-
hlsl::RootSignatureParser Parser(RootElements, Lexer, PP);
4959+
hlsl::RootSignatureParser Parser(getLangOpts().HLSLRootSigVer, RootElements,
4960+
Lexer, PP);
49604961
if (Parser.parse()) {
49614962
T.consumeClose();
49624963
return;

clang/lib/Parse/ParseHLSLRootSignature.cpp

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,12 @@ namespace hlsl {
1717

1818
using TokenKind = RootSignatureToken::Kind;
1919

20-
RootSignatureParser::RootSignatureParser(SmallVector<RootElement> &Elements,
21-
RootSignatureLexer &Lexer,
22-
Preprocessor &PP)
23-
: Elements(Elements), Lexer(Lexer), PP(PP), CurToken(SourceLocation()) {}
20+
RootSignatureParser::RootSignatureParser(
21+
llvm::dxbc::RootSignatureVersion Version,
22+
SmallVector<RootElement> &Elements, RootSignatureLexer &Lexer,
23+
Preprocessor &PP)
24+
: Version(Version), Elements(Elements), Lexer(Lexer), PP(PP),
25+
CurToken(SourceLocation()) {}
2426

2527
bool RootSignatureParser::parse() {
2628
// Iterate as many RootElements as possible
@@ -199,7 +201,7 @@ std::optional<RootDescriptor> RootSignatureParser::parseRootDescriptor() {
199201
ExpectedReg = TokenKind::uReg;
200202
break;
201203
}
202-
Descriptor.setDefaultFlags();
204+
Descriptor.setDefaultFlags(Version);
203205

204206
auto Params = parseRootDescriptorParams(ExpectedReg);
205207
if (!Params.has_value())
@@ -318,7 +320,7 @@ RootSignatureParser::parseDescriptorTableClause() {
318320
ExpectedReg = TokenKind::sReg;
319321
break;
320322
}
321-
Clause.setDefaultFlags();
323+
Clause.setDefaultFlags(Version);
322324

323325
auto Params = parseDescriptorTableClauseParams(ExpectedReg);
324326
if (!Params.has_value())

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

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -ast-dump \
2-
// RUN: -disable-llvm-passes -o - %s | FileCheck %s
2+
// RUN: -disable-llvm-passes -o - %s | FileCheck %s --check-prefixes=CHECK,CHECK-V1_1
33
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -ast-dump \
44
// RUN: -fdx-rootsignature-version=rootsig_1_0 \
5-
// RUN: -disable-llvm-passes -o - %s | FileCheck %s --check-prefix=CHECK-V1_0
5+
// RUN: -disable-llvm-passes -o - %s | FileCheck %s --check-prefixes=CHECK,CHECK-V1_0
66
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -ast-dump \
77
// RUN: -fdx-rootsignature-version=rootsig_1_1 \
8-
// RUN: -disable-llvm-passes -o - %s | FileCheck %s --check-prefix=CHECK-V1_1
8+
// RUN: -disable-llvm-passes -o - %s | FileCheck %s --check-prefixes=CHECK,CHECK-V1_1
99

1010
// This test ensures that the sample root signature is parsed without error and
1111
// the Attr AST Node is created succesfully. If an invalid root signature was
@@ -37,13 +37,17 @@
3737
// CHECK-SAME: space = 1, visibility = All, flags = DataStatic
3838
// CHECK-SAME: ),
3939
// CHECK-SAME: RootSRV(t0,
40-
// CHECK-SAME: space = 0, visibility = All, flags = DataStaticWhileSetAtExecute
40+
// CHECK-SAME: space = 0, visibility = All,
41+
// CHECK-V1_0-SAME: flags = DataVolatile
42+
// CHECK-V1_1-SAME: flags = DataStaticWhileSetAtExecute
4143
// CHECK-SAME: ),
4244
// CHECK-SAME: RootUAV(
4345
// CHECK-SAME: u0, space = 0, visibility = All, flags = DataVolatile
4446
// CHECK-SAME: ),
4547
// CHECK-SAME: CBV(
46-
// CHECK-SAME: b1, numDescriptors = 1, space = 0, offset = DescriptorTableOffsetAppend, flags = DataStaticWhileSetAtExecute
48+
// CHECK-SAME: b1, numDescriptors = 1, space = 0, offset = DescriptorTableOffsetAppend,
49+
// CHECK-V1_0-SAME: flags = DescriptorsVolatile | DataVolatile
50+
// CHECK-V1_1-SAME: flags = DataStaticWhileSetAtExecute
4751
// CHECK-SAME: ),
4852
// CHECK-SAME: SRV(
4953
// CHECK-SAME: t1, numDescriptors = 8, space = 0, offset = DescriptorTableOffsetAppend, flags = DescriptorsVolatile
@@ -55,7 +59,9 @@
5559
// CHECK-SAME: numClauses = 3, visibility = All
5660
// CHECK-SAME: ),
5761
// CHECK-SAME: Sampler(
58-
// CHECK-SAME: s0, numDescriptors = 4, space = 1, offset = DescriptorTableOffsetAppend, flags = None
62+
// CHECK-SAME: s0, numDescriptors = 4, space = 1, offset = DescriptorTableOffsetAppend,
63+
// CHECK-V1_0-SAME: flags = DescriptorsVolatile
64+
// CHECK-V1_1-SAME: flags = None
5965
// CHECK-SAME: ),
6066
// CHECK-SAME: DescriptorTable(
6167
// CHECK-SAME: numClauses = 1, visibility = All
@@ -112,9 +118,13 @@ void same_rs_string_main() {}
112118
// a seperate decl and identifier to reference
113119

114120
// CHECK: -HLSLRootSignatureDecl 0x{{.*}} {{.*}} implicit [[DIFF_RS_DECL:__hlsl_rootsig_decl_\d*]]
121+
// CHECK-V1_0: version: 1.0,
122+
// CHECK-V1_1: version: 1.1,
115123
// CHECK-SAME: RootElements{
116-
// CHECK-SAME: Sampler(s0, numDescriptors = 4, space = 1,
117-
// CHECK-SAME: offset = DescriptorTableOffsetAppend, flags = None),
124+
// CHECK-SAME: Sampler(s0, numDescriptors = 4, space = 1, offset = DescriptorTableOffsetAppend,
125+
// CHECK-V1_0-SAME: flags = DescriptorsVolatile
126+
// CHECK-V1_1-SAME: flags = None
127+
// CHECK-SAME: ),
118128
// CHECK-SAME: DescriptorTable(numClauses = 1, visibility = All)
119129
// CHECK-SAME: }
120130

0 commit comments

Comments
 (0)