@@ -501,8 +501,6 @@ TEST_F(ParseHLSLRootSignatureTest, ValidParseRootConsantsTest) {
501
501
TEST_F (ParseHLSLRootSignatureTest, ValidParseRootFlagsTest) {
502
502
using llvm::dxbc::RootFlags;
503
503
const llvm::StringLiteral Source = R"cc(
504
- RootFlags(),
505
- RootFlags(0),
506
504
RootFlags(
507
505
deny_domain_shader_root_access |
508
506
deny_pixel_shader_root_access |
@@ -533,18 +531,10 @@ TEST_F(ParseHLSLRootSignatureTest, ValidParseRootFlagsTest) {
533
531
ASSERT_FALSE (Parser.parse ());
534
532
535
533
auto Elements = Parser.getElements ();
536
- ASSERT_EQ (Elements.size (), 3u );
534
+ ASSERT_EQ (Elements.size (), 1u );
537
535
538
536
RootElement Elem = Elements[0 ].getElement ();
539
537
ASSERT_TRUE (std::holds_alternative<RootFlags>(Elem));
540
- ASSERT_EQ (std::get<RootFlags>(Elem), RootFlags::None);
541
-
542
- Elem = Elements[1 ].getElement ();
543
- ASSERT_TRUE (std::holds_alternative<RootFlags>(Elem));
544
- ASSERT_EQ (std::get<RootFlags>(Elem), RootFlags::None);
545
-
546
- Elem = Elements[2 ].getElement ();
547
- ASSERT_TRUE (std::holds_alternative<RootFlags>(Elem));
548
538
auto ValidRootFlags = RootFlags::AllowInputAssemblerInputLayout |
549
539
RootFlags::DenyVertexShaderRootAccess |
550
540
RootFlags::DenyHullShaderRootAccess |
@@ -562,6 +552,64 @@ TEST_F(ParseHLSLRootSignatureTest, ValidParseRootFlagsTest) {
562
552
ASSERT_TRUE (Consumer->isSatisfied ());
563
553
}
564
554
555
+ TEST_F (ParseHLSLRootSignatureTest, ValidParseEmptyRootFlagsTest) {
556
+ using llvm::dxbc::RootFlags;
557
+ const llvm::StringLiteral Source = R"cc(
558
+ RootFlags(),
559
+ )cc" ;
560
+
561
+ auto Ctx = createMinimalASTContext ();
562
+ StringLiteral *Signature = wrapSource (Ctx, Source);
563
+
564
+ TrivialModuleLoader ModLoader;
565
+ auto PP = createPP (Source, ModLoader);
566
+
567
+ hlsl::RootSignatureParser Parser (RootSignatureVersion::V1_1, Signature, *PP);
568
+
569
+ // Test no diagnostics produced
570
+ Consumer->setNoDiag ();
571
+
572
+ ASSERT_FALSE (Parser.parse ());
573
+
574
+ auto Elements = Parser.getElements ();
575
+ ASSERT_EQ (Elements.size (), 1u );
576
+
577
+ RootElement Elem = Elements[0 ].getElement ();
578
+ ASSERT_TRUE (std::holds_alternative<RootFlags>(Elem));
579
+ ASSERT_EQ (std::get<RootFlags>(Elem), RootFlags::None);
580
+
581
+ ASSERT_TRUE (Consumer->isSatisfied ());
582
+ }
583
+
584
+ TEST_F (ParseHLSLRootSignatureTest, ValidParseZeroRootFlagsTest) {
585
+ using llvm::dxbc::RootFlags;
586
+ const llvm::StringLiteral Source = R"cc(
587
+ RootFlags(0),
588
+ )cc" ;
589
+
590
+ auto Ctx = createMinimalASTContext ();
591
+ StringLiteral *Signature = wrapSource (Ctx, Source);
592
+
593
+ TrivialModuleLoader ModLoader;
594
+ auto PP = createPP (Source, ModLoader);
595
+
596
+ hlsl::RootSignatureParser Parser (RootSignatureVersion::V1_1, Signature, *PP);
597
+
598
+ // Test no diagnostics produced
599
+ Consumer->setNoDiag ();
600
+
601
+ ASSERT_FALSE (Parser.parse ());
602
+
603
+ auto Elements = Parser.getElements ();
604
+ ASSERT_EQ (Elements.size (), 1u );
605
+
606
+ RootElement Elem = Elements[0 ].getElement ();
607
+ ASSERT_TRUE (std::holds_alternative<RootFlags>(Elem));
608
+ ASSERT_EQ (std::get<RootFlags>(Elem), RootFlags::None);
609
+
610
+ ASSERT_TRUE (Consumer->isSatisfied ());
611
+ }
612
+
565
613
TEST_F (ParseHLSLRootSignatureTest, ValidParseRootDescriptorsTest) {
566
614
using llvm::dxbc::RootDescriptorFlags;
567
615
const llvm::StringLiteral Source = R"cc(
@@ -1658,4 +1706,27 @@ TEST_F(ParseHLSLRootSignatureTest, InvalidDescriptorRangeFlagsValueTest) {
1658
1706
ASSERT_TRUE (Consumer->isSatisfied ());
1659
1707
}
1660
1708
1709
+ TEST_F (ParseHLSLRootSignatureTest, InvalidMultipleRootFlagsTest) {
1710
+ // This test will check that an error is produced when there are multiple
1711
+ // root flags provided
1712
+ const llvm::StringLiteral Source = R"cc(
1713
+ RootFlags(DENY_VERTEX_SHADER_ROOT_ACCESS),
1714
+ RootFlags(DENY_PIXEL_SHADER_ROOT_ACCESS)
1715
+ )cc" ;
1716
+
1717
+ auto Ctx = createMinimalASTContext ();
1718
+ StringLiteral *Signature = wrapSource (Ctx, Source);
1719
+
1720
+ TrivialModuleLoader ModLoader;
1721
+ auto PP = createPP (Source, ModLoader);
1722
+
1723
+ hlsl::RootSignatureParser Parser (RootSignatureVersion::V1_1, Signature, *PP);
1724
+
1725
+ // Test correct diagnostic produced
1726
+ Consumer->setExpected (diag::err_hlsl_rootsig_repeat_param);
1727
+ ASSERT_TRUE (Parser.parse ());
1728
+
1729
+ ASSERT_TRUE (Consumer->isSatisfied ());
1730
+ }
1731
+
1661
1732
} // anonymous namespace
0 commit comments