Skip to content

Commit 9805234

Browse files
committed
add tests for invoking setDefaultFlags from Parser
1 parent 211f73b commit 9805234

File tree

1 file changed

+145
-0
lines changed

1 file changed

+145
-0
lines changed

clang/unittests/Parse/ParseHLSLRootSignatureTest.cpp

Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -598,6 +598,151 @@ TEST_F(ParseHLSLRootSignatureTest, ValidTrailingCommaTest) {
598598
ASSERT_TRUE(Consumer->isSatisfied());
599599
}
600600

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+
601746
// Invalid Parser Tests
602747

603748
TEST_F(ParseHLSLRootSignatureTest, InvalidParseUnexpectedTokenTest) {

0 commit comments

Comments
 (0)