Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
787c776
adding yaml representation and updating write logic
joaosaffran Sep 18, 2025
57fd710
fix test
joaosaffran Sep 18, 2025
d72adfe
adding missing test
joaosaffran Sep 19, 2025
23803b7
Merge branch 'main' into obj2yaml/root-signature-1.2
joaosaffran Sep 19, 2025
fefd58c
fix test
joaosaffran Sep 19, 2025
13d945d
Merge branch 'main' into obj2yaml/static-sampler-view
joaosaffran Sep 19, 2025
1d0cbd3
adding samplers_iterator
joaosaffran Sep 22, 2025
e530bcc
this was easier than I thought
joaosaffran Sep 22, 2025
79ea587
adding new test
joaosaffran Sep 22, 2025
367ac8c
Merge branch 'main' into obj2yaml/root-signature-1.2
joaosaffran Sep 22, 2025
a08c05e
Merge branch 'obj2yaml/root-signature-1.2' of github.com:joaosaffran/…
joaosaffran Sep 22, 2025
159388d
Merge branch 'obj2yaml/root-signature-1.2' into obj2yaml/static-sampl…
joaosaffran Sep 22, 2025
905d5d3
clean up
joaosaffran Sep 22, 2025
b73bf24
clean up
joaosaffran Sep 22, 2025
bc393fd
adding flags to static sampler parser
joaosaffran Sep 22, 2025
e8f7b94
add tests
Sep 23, 2025
589668e
adding more test
Sep 24, 2025
e8b973f
adding operator << to print StaticSamplerFlags
joaosaffran Sep 25, 2025
190cfcd
updating comment with inbelic suggestion
joaosaffran Sep 25, 2025
79e9564
format
joaosaffran Sep 25, 2025
1b1c37d
fix test
joaosaffran Sep 25, 2025
daa5714
update Root Signature Version flag
joaosaffran Sep 25, 2025
32a2c89
Merge branch 'main' into frontend/update-flags
joaosaffran Sep 25, 2025
11770c5
fix objcopy test
joaosaffran Sep 25, 2025
09eb8f3
Merge branch 'main' into frontend/adding-new-tokens
joaosaffran Sep 26, 2025
c374634
foramt
joaosaffran Sep 26, 2025
0e80c63
addressing comments from bogner
joaosaffran Sep 26, 2025
a2a00a9
add test
joaosaffran Sep 26, 2025
c8f7e13
fix test
joaosaffran Sep 26, 2025
900c796
adding more tests
joaosaffran Oct 1, 2025
b85b876
fix version
joaosaffran Oct 1, 2025
deb02eb
removing initialization
joaosaffran Oct 1, 2025
2113929
addressing comments from bogner
joaosaffran Oct 1, 2025
6d87804
Merge branch 'main' into frontend/adding-new-tokens
joaosaffran Oct 1, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions clang/include/clang/Basic/LangOptions.h
Original file line number Diff line number Diff line change
Expand Up @@ -549,8 +549,7 @@ class LangOptions : public LangOptionsBase {
bool CheckNew = false;

/// The HLSL root signature version for dxil.
llvm::dxbc::RootSignatureVersion HLSLRootSigVer =
llvm::dxbc::RootSignatureVersion::V1_1;
llvm::dxbc::RootSignatureVersion HLSLRootSigVer;

/// The HLSL root signature that will be used to overide the root signature
/// used for the shader entry point.
Expand Down
6 changes: 3 additions & 3 deletions clang/include/clang/Driver/Options.td
Original file line number Diff line number Diff line change
Expand Up @@ -9473,7 +9473,7 @@ def target_profile : DXCJoinedOrSeparate<"T">, MetaVarName<"<profile>">,
"lib_6_3, lib_6_4, lib_6_5, lib_6_6, lib_6_7, lib_6_x,"
"ms_6_5, ms_6_6, ms_6_7,"
"as_6_5, as_6_6, as_6_7,"
"rootsig_1_0, rootsig_1_1">;
"rootsig_1_0, rootsig_1_1, rootsig_1_2">;
def emit_pristine_llvm : DXCFlag<"emit-pristine-llvm">,
HelpText<"Emit pristine LLVM IR from the frontend by not running any LLVM passes at all."
"Same as -S + -emit-llvm + -disable-llvm-passes.">;
Expand All @@ -9486,9 +9486,9 @@ def fdx_rootsignature_version :
Group<dxc_Group>,
Visibility<[ClangOption, CC1Option]>,
HelpText<"Root Signature Version">,
Values<"rootsig_1_0,rootsig_1_1">,
Values<"rootsig_1_0,rootsig_1_1,rootsig_1_2">,
NormalizedValuesScope<"llvm::dxbc::RootSignatureVersion">,
NormalizedValues<["V1_0", "V1_1"]>,
NormalizedValues<["V1_0", "V1_1", "V1_2"]>,
MarshallingInfoEnum<LangOpts<"HLSLRootSigVer">, "V1_1">;
def dxc_rootsig_ver :
Separate<["/", "-"], "force-rootsig-ver">,
Expand Down
8 changes: 8 additions & 0 deletions clang/include/clang/Lex/HLSLRootSignatureTokenKinds.def
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,9 @@
#ifndef STATIC_BORDER_COLOR_ENUM
#define STATIC_BORDER_COLOR_ENUM(NAME, LIT) ENUM(NAME, LIT)
#endif
#ifndef STATIC_SAMPLER_FLAG_ENUM
#define STATIC_SAMPLER_FLAG_ENUM(NAME, LIT) ENUM(NAME, LIT)
#endif

// General Tokens:
TOK(invalid, "invalid identifier")
Expand Down Expand Up @@ -228,6 +231,10 @@ STATIC_BORDER_COLOR_ENUM(OpaqueWhite, "STATIC_BORDER_COLOR_OPAQUE_WHITE")
STATIC_BORDER_COLOR_ENUM(OpaqueBlackUint, "STATIC_BORDER_COLOR_OPAQUE_BLACK_UINT")
STATIC_BORDER_COLOR_ENUM(OpaqueWhiteUint, "STATIC_BORDER_COLOR_OPAQUE_WHITE_UINT")

// Root Descriptor Flag Enums:
STATIC_SAMPLER_FLAG_ENUM(UintBorderColor, "UINT_BORDER_COLOR")
STATIC_SAMPLER_FLAG_ENUM(NonNormalizedCoordinates, "NON_NORMALIZED_COORDINATES")

#undef STATIC_BORDER_COLOR_ENUM
#undef COMPARISON_FUNC_ENUM
#undef TEXTURE_ADDRESS_MODE_ENUM
Expand All @@ -237,6 +244,7 @@ STATIC_BORDER_COLOR_ENUM(OpaqueWhiteUint, "STATIC_BORDER_COLOR_OPAQUE_WHITE_UINT
#undef DESCRIPTOR_RANGE_FLAG_ENUM_OFF
#undef DESCRIPTOR_RANGE_FLAG_ENUM_ON
#undef ROOT_DESCRIPTOR_FLAG_ENUM
#undef STATIC_SAMPLER_FLAG_ENUM
#undef ROOT_FLAG_ENUM
#undef DESCRIPTOR_RANGE_OFFSET_ENUM
#undef UNBOUNDED_ENUM
Expand Down
3 changes: 3 additions & 0 deletions clang/include/clang/Parse/ParseHLSLRootSignature.h
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,7 @@ class RootSignatureParser {
std::optional<float> MaxLOD;
std::optional<uint32_t> Space;
std::optional<llvm::dxbc::ShaderVisibility> Visibility;
std::optional<llvm::dxbc::StaticSamplerFlags> Flags;
};
std::optional<ParsedStaticSamplerParams> parseStaticSamplerParams();

Expand All @@ -153,6 +154,8 @@ class RootSignatureParser {
parseRootDescriptorFlags(RootSignatureToken::Kind Context);
std::optional<llvm::dxbc::DescriptorRangeFlags>
parseDescriptorRangeFlags(RootSignatureToken::Kind Context);
std::optional<llvm::dxbc::StaticSamplerFlags>
parseStaticSamplerFlags(RootSignatureToken::Kind Context);

/// Use NumericLiteralParser to convert CurToken.NumSpelling into a unsigned
/// 32-bit integer
Expand Down
3 changes: 3 additions & 0 deletions clang/lib/AST/TextNodeDumper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3095,6 +3095,9 @@ void TextNodeDumper::VisitHLSLRootSignatureDecl(
case llvm::dxbc::RootSignatureVersion::V1_1:
OS << "1.1";
break;
case llvm::dxbc::RootSignatureVersion::V1_2:
OS << "1.2";
break;
}
OS << ", ";
llvm::hlsl::rootsig::dumpRootElements(OS, D->getRootElements());
Expand Down
2 changes: 1 addition & 1 deletion clang/lib/Driver/ToolChains/HLSL.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ bool isLegalShaderModel(Triple &T) {
} break;
case Triple::EnvironmentType::RootSignature:
VersionTuple MinVer(1, 0);
VersionTuple MaxVer(1, 1);
VersionTuple MaxVer(1, 2);
return MinVer <= Version && Version <= MaxVer;
}
return false;
Expand Down
61 changes: 61 additions & 0 deletions clang/lib/Parse/ParseHLSLRootSignature.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -485,6 +485,9 @@ std::optional<StaticSampler> RootSignatureParser::parseStaticSampler() {
if (Params->Visibility.has_value())
Sampler.Visibility = Params->Visibility.value();

if (Params->Flags.has_value())
Sampler.Flags = Params->Flags.value();

return Sampler;
}

Expand Down Expand Up @@ -926,6 +929,20 @@ RootSignatureParser::parseStaticSamplerParams() {
if (!Visibility.has_value())
return std::nullopt;
Params.Visibility = Visibility;
} else if (tryConsumeExpectedToken(TokenKind::kw_flags)) {
// `flags` `=` STATIC_SAMPLE_FLAGS
if (Params.Flags.has_value()) {
reportDiag(diag::err_hlsl_rootsig_repeat_param) << CurToken.TokKind;
return std::nullopt;
}

if (consumeExpectedToken(TokenKind::pu_equal))
return std::nullopt;

auto Flags = parseStaticSamplerFlags(TokenKind::kw_flags);
if (!Flags.has_value())
return std::nullopt;
Params.Flags = Flags;
} else {
consumeNextToken(); // let diagnostic be at the start of invalid token
reportDiag(diag::err_hlsl_invalid_token)
Expand Down Expand Up @@ -1255,6 +1272,50 @@ RootSignatureParser::parseDescriptorRangeFlags(TokenKind Context) {
return Flags;
}

std::optional<llvm::dxbc::StaticSamplerFlags>
RootSignatureParser::parseStaticSamplerFlags(TokenKind Context) {
assert(CurToken.TokKind == TokenKind::pu_equal &&
"Expects to only be invoked starting at given keyword");

// Handle the edge-case of '0' to specify no flags set
if (tryConsumeExpectedToken(TokenKind::int_literal)) {
if (!verifyZeroFlag()) {
reportDiag(diag::err_hlsl_rootsig_non_zero_flag);
return std::nullopt;
}
return llvm::dxbc::StaticSamplerFlags::None;
}

TokenKind Expected[] = {
#define STATIC_SAMPLER_FLAG_ENUM(NAME, LIT) TokenKind::en_##NAME,
#include "clang/Lex/HLSLRootSignatureTokenKinds.def"
};

std::optional<llvm::dxbc::StaticSamplerFlags> Flags;

do {
if (tryConsumeExpectedToken(Expected)) {
switch (CurToken.TokKind) {
#define STATIC_SAMPLER_FLAG_ENUM(NAME, LIT) \
case TokenKind::en_##NAME: \
Flags = maybeOrFlag<llvm::dxbc::StaticSamplerFlags>( \
Flags, llvm::dxbc::StaticSamplerFlags::NAME); \
break;
#include "clang/Lex/HLSLRootSignatureTokenKinds.def"
default:
llvm_unreachable("Switch for consumed enum token was not provided");
}
} else {
consumeNextToken(); // consume token to point at invalid token
reportDiag(diag::err_hlsl_invalid_token)
<< /*value=*/1 << /*value of*/ Context;
return std::nullopt;
}
} while (tryConsumeExpectedToken(TokenKind::pu_or));

return Flags;
}

std::optional<uint32_t> RootSignatureParser::handleUIntLiteral() {
// Parse the numeric value and do semantic checks on its specification
clang::NumericLiteralParser Literal(
Expand Down
12 changes: 10 additions & 2 deletions clang/test/AST/HLSL/RootSignature-Target-AST.hlsl
Original file line number Diff line number Diff line change
@@ -1,9 +1,15 @@
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-rootsignature -ast-dump \
// RUN: -fdx-rootsignature-version=rootsig_1_0 \
// RUN: -hlsl-entry EntryRootSig -disable-llvm-passes -o - %s | FileCheck %s --check-prefixes=CHECK,CHECK-V1_0

// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-rootsignature -ast-dump \
// RUN: -fdx-rootsignature-version=rootsig_1_1 \
// RUN: -hlsl-entry EntryRootSig -disable-llvm-passes -o - %s | FileCheck %s --check-prefixes=CHECK,CHECK-V1_1

// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-rootsignature -ast-dump \
// RUN: -fdx-rootsignature-version=rootsig_1_0 \
// RUN: -hlsl-entry EntryRootSig -disable-llvm-passes -o - %s | FileCheck %s --check-prefixes=CHECK,CHECK-V1_0
// RUN: -fdx-rootsignature-version=rootsig_1_2 \
// RUN: -hlsl-entry EntryRootSig -disable-llvm-passes -o - %s | FileCheck %s --check-prefixes=CHECK,CHECK-V1_2


// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-rootsignature -ast-dump \
// RUN: -D CmdRS='"UAV(u0)"'\
Expand All @@ -12,11 +18,13 @@
// CHECK: -HLSLRootSignatureDecl 0x{{.*}} {{.*}} implicit [[ENTRY_RS_DECL:__hlsl_rootsig_decl_\d*]]
// CHECK-V1_0-SAME: version: 1.0,
// CHECK-V1_1-SAME: version: 1.1,
// CHECK-V1_2-SAME: version: 1.2,
// CHECK-SAME: RootElements{
// CHECK-SAME: RootCBV(b0,
// CHECK-SAME: space = 0, visibility = All,
// CHECK-V1_0-SAME: flags = DataVolatile
// CHECK-V1_1-SAME: flags = DataStaticWhileSetAtExecute
// CHECK-V1_2-SAME: flags = DataStaticWhileSetAtExecute
// CHECK-SAME: )
// CHECK-SAME: }
#define EntryRootSig "CBV(b0)"
Expand Down
27 changes: 27 additions & 0 deletions clang/test/AST/HLSL/RootSignatures-AST.hlsl
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -ast-dump \
// RUN: -fdx-rootsignature-version=rootsig_1_1 \
// RUN: -disable-llvm-passes -o - %s | FileCheck %s --check-prefixes=CHECK,CHECK-V1_1
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -ast-dump \
// RUN: -fdx-rootsignature-version=rootsig_1_2 \
// RUN: -disable-llvm-passes -o - %s | FileCheck %s --check-prefixes=CHECK,CHECK-V1_2

// This test ensures that the sample root signature is parsed without error and
// the Attr AST Node is created succesfully. If an invalid root signature was
Expand All @@ -31,6 +34,7 @@
// CHECK: -HLSLRootSignatureDecl 0x{{.*}} {{.*}} implicit [[SAMPLE_RS_DECL:__hlsl_rootsig_decl_\d*]]
// CHECK-V1_0: version: 1.0,
// CHECK-V1_1: version: 1.1,
// CHECK-V1_2: version: 1.2,
// CHECK-SAME: RootElements{
// CHECK-SAME: RootFlags(AllowInputAssemblerInputLayout | DenyVertexShaderRootAccess),
// CHECK-SAME: RootCBV(b0,
Expand Down Expand Up @@ -62,6 +66,7 @@
// CHECK-SAME: s0, numDescriptors = 4, space = 1, offset = DescriptorTableOffsetAppend,
// CHECK-V1_0-SAME: flags = DescriptorsVolatile
// CHECK-V1_1-SAME: flags = None
// CHECK-V1_2-SAME: flags = None
// CHECK-SAME: ),
// CHECK-SAME: DescriptorTable(
// CHECK-SAME: numClauses = 1, visibility = All
Expand All @@ -73,6 +78,7 @@
// CHECK-SAME: s1, filter = Anisotropic, addressU = Wrap, addressV = Wrap, addressW = Wrap,
// CHECK-SAME: mipLODBias = 0.000000e+00, maxAnisotropy = 16, comparisonFunc = LessEqual,
// CHECK-SAME: borderColor = OpaqueWhite, minLOD = 0.000000e+00, maxLOD = 3.402823e+38, space = 0, visibility = All
// CHECK-SAME: flags = None
// CHECK-SAME: )}

// CHECK: -RootSignatureAttr 0x{{.*}} {{.*}} [[SAMPLE_RS_DECL]]
Expand Down Expand Up @@ -131,3 +137,24 @@ void same_rs_string_main() {}
// CHECK: -RootSignatureAttr 0x{{.*}} {{.*}} [[DIFF_RS_DECL]]
[RootSignature(SampleDifferentRS)]
void different_rs_string_main() {}

#define SampleStaticSamplerRS \
"StaticSampler(s0, flags = NON_NORMALIZED_COORDINATES)"

// Ensure that static samplers flags are correctly parsed in different versions

// CHECK: -HLSLRootSignatureDecl 0x{{.*}} {{.*}} implicit [[DIFF_RS_DECL:__hlsl_rootsig_decl_\d*]]
// CHECK-V1_0: version: 1.0,
// CHECK-V1_1: version: 1.1,
Comment on lines +147 to +148
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are we missing a CHECK-V1_2 here?

// CHECK-V1_2: version: 1.2,
// CHECK-SAME: RootElements{
// CHECK-SAME: StaticSampler(
// CHECK-SAME: s0, filter = Anisotropic, addressU = Wrap, addressV = Wrap, addressW = Wrap,
// CHECK-SAME: mipLODBias = 0.000000e+00, maxAnisotropy = 16, comparisonFunc = LessEqual,
// CHECK-SAME: borderColor = OpaqueWhite, minLOD = 0.000000e+00, maxLOD = 3.402823e+38, space = 0, visibility = All
// CHECK-SAME: flags = NonNormalizedCoordinates
// CHECK-SAME: )}

// CHECK: -RootSignatureAttr 0x{{.*}} {{.*}} [[DIFF_RS_DECL]]
[RootSignature(SampleStaticSamplerRS)]
void statoc_sampler_v12_main() {}
5 changes: 3 additions & 2 deletions clang/test/CodeGenHLSL/RootSignature.hlsl
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should also update https://github.com/llvm/llvm-project/blob/main/clang/test/AST/HLSL/RootSignatures-AST.hlsl to ensure the flags field is generated in the ast

Original file line number Diff line number Diff line change
Expand Up @@ -82,8 +82,8 @@ void RootDescriptorsEntry() {}
// checking minLOD, maxLOD
// CHECK-SAME: float -1.280000e+02, float 1.280000e+02,

// checking register, space, visibility and flags
// CHECK-SAME: i32 42, i32 0, i32 0, i32 0}
// checking register, space, visibility and flag
// CHECK-SAME: i32 42, i32 0, i32 0, i32 1}

#define SampleStaticSampler \
"StaticSampler(s42, " \
Expand All @@ -96,6 +96,7 @@ void RootDescriptorsEntry() {}
" borderColor = STATIC_BORDER_COLOR_OPAQUE_WHITE, " \
" minLOD = -128.f, maxLOD = 128.f, " \
" space = 0, visibility = SHADER_VISIBILITY_ALL, " \
" flags = UINT_BORDER_COLOR" \
")"
[shader("compute"), RootSignature(SampleStaticSampler)]
[numthreads(1,1,1)]
Expand Down
4 changes: 4 additions & 0 deletions clang/test/SemaHLSL/RootSignature-err.hlsl
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,10 @@ void basic_validation_5() {}
[RootSignature("StaticSampler(s0, mipLODBias = 15.990001)")]
void basic_validation_6() {}

// expected-error@+1 {{invalid value of flags}}
[RootSignature("StaticSampler(s0, flags = FLAG_TYPO)")]
void basic_validation_7() {}

// expected-error@+1 {{sampler and non-sampler resource mixed in descriptor table}}
[RootSignature("DescriptorTable(Sampler(s0), CBV(b0))")]
void mixed_resource_table() {}
24 changes: 14 additions & 10 deletions clang/test/SemaHLSL/RootSignature-flags-err.hlsl
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@
// RUN: -fdx-rootsignature-version=rootsig_1_0 %s -verify=v10
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -x hlsl -fsyntax-only \
// RUN: -fdx-rootsignature-version=rootsig_1_1 %s -verify=v11

// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -x hlsl -fsyntax-only \
// RUN: -fdx-rootsignature-version=rootsig_1_2 %s -verify=v12
// Root Descriptor Flags:

// v10-error@+1 {{invalid flags for version 1.0}}
Expand All @@ -13,8 +14,9 @@ void bad_root_descriptor_flags_0() {}
[RootSignature("CBV(b0, flags = DATA_STATIC_WHILE_SET_AT_EXECUTE)")]
void bad_root_descriptor_flags_1() {}

// v10-error@+2 {{invalid flags for version 1.0}}
// v11-error@+1 {{invalid flags for version 1.1}}
// v10-error@+3 {{invalid flags for version 1.0}}
// v11-error@+2 {{invalid flags for version 1.1}}
// v12-error@+1 {{invalid flags for version 1.2}}
[RootSignature("CBV(b0, flags = DATA_STATIC | DATA_VOLATILE)")]
void bad_root_descriptor_flags_2() {}

Expand All @@ -40,18 +42,20 @@ void bad_descriptor_range_flags_3() {}
[RootSignature("DescriptorTable(CBV(b0, flags = DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS))")]
void bad_descriptor_range_flags_4() {}

// v10-error@+2 {{invalid flags for version 1.0}}
// v11-error@+1 {{invalid flags for version 1.1}}
// v10-error@+3 {{invalid flags for version 1.0}}
// v11-error@+2 {{invalid flags for version 1.1}}
// v12-error@+1 {{invalid flags for version 1.2}}
[RootSignature("DescriptorTable(CBV(b0, flags = DATA_STATIC | DATA_STATIC_WHILE_SET_AT_EXECUTE))")]
void bad_descriptor_range_flags_5() {}

// v10-error@+2 {{invalid flags for version 1.0}}
// v11-error@+1 {{invalid flags for version 1.1}}
// v10-error@+3 {{invalid flags for version 1.0}}
// v11-error@+2 {{invalid flags for version 1.1}}
// v12-error@+1 {{invalid flags for version 1.2}}
[RootSignature("DescriptorTable(CBV(b0, flags = DESCRIPTORS_VOLATILE | DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS))")]
void bad_descriptor_range_flags_6() {}

// v10-error@+2 {{invalid flags for version 1.0}}
// v11-error@+1 {{invalid flags for version 1.1}}
// v10-error@+3 {{invalid flags for version 1.0}}
// v11-error@+2 {{invalid flags for version 1.1}}
// v12-error@+1 {{invalid flags for version 1.2}}
[RootSignature("DescriptorTable(CBV(b0, flags = DESCRIPTORS_VOLATILE | DATA_STATIC))")]
void bad_descriptor_range_flags_7() {}

3 changes: 3 additions & 0 deletions clang/unittests/Lex/LexHLSLRootSignatureTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,9 @@ TEST_F(LexHLSLRootSignatureTest, ValidLexAllTokensTest) {
STATIC_BORDER_COLOR_OPAQUE_WHITE
STATIC_BORDER_COLOR_OPAQUE_BLACK_UINT
STATIC_BORDER_COLOR_OPAQUE_WHITE_UINT

UINT_BORDER_COLOR
NON_NORMALIZED_COORDINATES
)cc";
hlsl::RootSignatureLexer Lexer(Source);

Expand Down
Loading