@@ -598,6 +598,151 @@ TEST_F(ParseHLSLRootSignatureTest, ValidTrailingCommaTest) {
598
598
ASSERT_TRUE (Consumer->isSatisfied ());
599
599
}
600
600
601
+ TEST_F (ParseHLSLRootSignatureTest, ValidVersion10Test) {
602
+ // This test checks that the default values are set correctly
603
+ // when parsing with root signature version 1.0
604
+ const llvm::StringLiteral Source = R"cc(
605
+ CBV(b0),
606
+ SRV(t0),
607
+ UAV(u0),
608
+ DescriptorTable(
609
+ CBV(b1),
610
+ SRV(t1),
611
+ UAV(u1),
612
+ Sampler(s1),
613
+ )
614
+ )cc" ;
615
+
616
+ TrivialModuleLoader ModLoader;
617
+ auto PP = createPP (Source, ModLoader);
618
+ auto TokLoc = SourceLocation ();
619
+
620
+ hlsl::RootSignatureLexer Lexer (Source, TokLoc);
621
+ SmallVector<RootElement> Elements;
622
+ auto Version = llvm::dxbc::RootSignatureVersion::V1_0;
623
+ hlsl::RootSignatureParser Parser (Version, Elements, Lexer, *PP);
624
+
625
+ // Test no diagnostics produced
626
+ Consumer->setNoDiag ();
627
+
628
+ ASSERT_FALSE (Parser.parse ());
629
+
630
+ auto DefRootDescriptorFlag = RootDescriptorFlags::DataVolatile;
631
+ RootElement Elem = Elements[0 ];
632
+ ASSERT_TRUE (std::holds_alternative<RootDescriptor>(Elem));
633
+ ASSERT_EQ (std::get<RootDescriptor>(Elem).Type , DescriptorType::CBuffer);
634
+ ASSERT_EQ (std::get<RootDescriptor>(Elem).Flags , DefRootDescriptorFlag);
635
+
636
+ Elem = Elements[1 ];
637
+ ASSERT_TRUE (std::holds_alternative<RootDescriptor>(Elem));
638
+ ASSERT_EQ (std::get<RootDescriptor>(Elem).Type , DescriptorType::SRV);
639
+ ASSERT_EQ (std::get<RootDescriptor>(Elem).Flags , DefRootDescriptorFlag);
640
+
641
+ Elem = Elements[2 ];
642
+ ASSERT_TRUE (std::holds_alternative<RootDescriptor>(Elem));
643
+ ASSERT_EQ (std::get<RootDescriptor>(Elem).Type , DescriptorType::UAV);
644
+ ASSERT_EQ (std::get<RootDescriptor>(Elem).Flags , DefRootDescriptorFlag);
645
+
646
+ auto ValidNonSamplerFlags = DescriptorRangeFlags::DescriptorsVolatile |
647
+ DescriptorRangeFlags::DataVolatile;
648
+ Elem = Elements[3 ];
649
+ ASSERT_TRUE (std::holds_alternative<DescriptorTableClause>(Elem));
650
+ ASSERT_EQ (std::get<DescriptorTableClause>(Elem).Type , ClauseType::CBuffer);
651
+ ASSERT_EQ (std::get<DescriptorTableClause>(Elem).Flags , ValidNonSamplerFlags);
652
+
653
+ Elem = Elements[4 ];
654
+ ASSERT_TRUE (std::holds_alternative<DescriptorTableClause>(Elem));
655
+ ASSERT_EQ (std::get<DescriptorTableClause>(Elem).Type , ClauseType::SRV);
656
+ ASSERT_EQ (std::get<DescriptorTableClause>(Elem).Flags , ValidNonSamplerFlags);
657
+
658
+ Elem = Elements[5 ];
659
+ ASSERT_TRUE (std::holds_alternative<DescriptorTableClause>(Elem));
660
+ ASSERT_EQ (std::get<DescriptorTableClause>(Elem).Type , ClauseType::UAV);
661
+ ASSERT_EQ (std::get<DescriptorTableClause>(Elem).Flags , ValidNonSamplerFlags);
662
+
663
+ Elem = Elements[6 ];
664
+ ASSERT_TRUE (std::holds_alternative<DescriptorTableClause>(Elem));
665
+ ASSERT_EQ (std::get<DescriptorTableClause>(Elem).Type , ClauseType::Sampler);
666
+ ASSERT_EQ (std::get<DescriptorTableClause>(Elem).Flags ,
667
+ DescriptorRangeFlags::DescriptorsVolatile);
668
+
669
+ ASSERT_TRUE (Consumer->isSatisfied ());
670
+ }
671
+
672
+ TEST_F (ParseHLSLRootSignatureTest, ValidVersion11Test) {
673
+ // This test checks that the default values are set correctly
674
+ // when parsing with root signature version 1.0
675
+ const llvm::StringLiteral Source = R"cc(
676
+ CBV(b0),
677
+ SRV(t0),
678
+ UAV(u0),
679
+ DescriptorTable(
680
+ CBV(b1),
681
+ SRV(t1),
682
+ UAV(u1),
683
+ Sampler(s1),
684
+ )
685
+ )cc" ;
686
+
687
+ TrivialModuleLoader ModLoader;
688
+ auto PP = createPP (Source, ModLoader);
689
+ auto TokLoc = SourceLocation ();
690
+
691
+ hlsl::RootSignatureLexer Lexer (Source, TokLoc);
692
+ SmallVector<RootElement> Elements;
693
+ auto Version = llvm::dxbc::RootSignatureVersion::V1_1;
694
+ hlsl::RootSignatureParser Parser (Version, Elements, Lexer, *PP);
695
+
696
+ // Test no diagnostics produced
697
+ Consumer->setNoDiag ();
698
+
699
+ ASSERT_FALSE (Parser.parse ());
700
+
701
+ RootElement Elem = Elements[0 ];
702
+ ASSERT_TRUE (std::holds_alternative<RootDescriptor>(Elem));
703
+ ASSERT_EQ (std::get<RootDescriptor>(Elem).Type , DescriptorType::CBuffer);
704
+ ASSERT_EQ (std::get<RootDescriptor>(Elem).Flags ,
705
+ RootDescriptorFlags::DataStaticWhileSetAtExecute);
706
+
707
+ Elem = Elements[1 ];
708
+ ASSERT_TRUE (std::holds_alternative<RootDescriptor>(Elem));
709
+ ASSERT_EQ (std::get<RootDescriptor>(Elem).Type , DescriptorType::SRV);
710
+ ASSERT_EQ (std::get<RootDescriptor>(Elem).Flags ,
711
+ RootDescriptorFlags::DataStaticWhileSetAtExecute);
712
+
713
+ Elem = Elements[2 ];
714
+ ASSERT_TRUE (std::holds_alternative<RootDescriptor>(Elem));
715
+ ASSERT_EQ (std::get<RootDescriptor>(Elem).Type , DescriptorType::UAV);
716
+ ASSERT_EQ (std::get<RootDescriptor>(Elem).Flags ,
717
+ RootDescriptorFlags::DataVolatile);
718
+
719
+ Elem = Elements[3 ];
720
+ ASSERT_TRUE (std::holds_alternative<DescriptorTableClause>(Elem));
721
+ ASSERT_EQ (std::get<DescriptorTableClause>(Elem).Type , ClauseType::CBuffer);
722
+ ASSERT_EQ (std::get<DescriptorTableClause>(Elem).Flags ,
723
+ DescriptorRangeFlags::DataStaticWhileSetAtExecute);
724
+
725
+ Elem = Elements[4 ];
726
+ ASSERT_TRUE (std::holds_alternative<DescriptorTableClause>(Elem));
727
+ ASSERT_EQ (std::get<DescriptorTableClause>(Elem).Type , ClauseType::SRV);
728
+ ASSERT_EQ (std::get<DescriptorTableClause>(Elem).Flags ,
729
+ DescriptorRangeFlags::DataStaticWhileSetAtExecute);
730
+
731
+ Elem = Elements[5 ];
732
+ ASSERT_TRUE (std::holds_alternative<DescriptorTableClause>(Elem));
733
+ ASSERT_EQ (std::get<DescriptorTableClause>(Elem).Type , ClauseType::UAV);
734
+ ASSERT_EQ (std::get<DescriptorTableClause>(Elem).Flags ,
735
+ DescriptorRangeFlags::DataVolatile);
736
+
737
+ Elem = Elements[6 ];
738
+ ASSERT_TRUE (std::holds_alternative<DescriptorTableClause>(Elem));
739
+ ASSERT_EQ (std::get<DescriptorTableClause>(Elem).Type , ClauseType::Sampler);
740
+ ASSERT_EQ (std::get<DescriptorTableClause>(Elem).Flags ,
741
+ DescriptorRangeFlags::None);
742
+
743
+ ASSERT_TRUE (Consumer->isSatisfied ());
744
+ }
745
+
601
746
// Invalid Parser Tests
602
747
603
748
TEST_F (ParseHLSLRootSignatureTest, InvalidParseUnexpectedTokenTest) {
0 commit comments