Reland "[HLSL][RootSignature] Implement serialization of RootConstants and RootFlags" (#143019)
This relands #141130. The initial commit uncovered that we are missing the correct linking of FrontendHLSL into clang/lib/Parse and clang/lib/unittests/Parse. This change addreses this by linking them accordingly. It was also checked and ensured that the LexHLSLRootSignature libraries do not depend on FrontendHLSL and so we are not required to link there. Resolves: #138190 and #138192
This commit is contained in:
parent
6cbb67f84c
commit
a383b1a95b
@ -1,4 +1,5 @@
|
||||
set(LLVM_LINK_COMPONENTS
|
||||
FrontendHLSL
|
||||
FrontendOpenMP
|
||||
MC
|
||||
MCParser
|
||||
|
@ -11,5 +11,6 @@ add_clang_unittest(ParseTests
|
||||
LLVMTestingSupport
|
||||
clangTesting
|
||||
LLVM_COMPONENTS
|
||||
FrontendHLSL
|
||||
Support
|
||||
)
|
||||
|
@ -27,6 +27,11 @@ class Metadata;
|
||||
namespace hlsl {
|
||||
namespace rootsig {
|
||||
|
||||
LLVM_ABI raw_ostream &operator<<(raw_ostream &OS, const RootFlags &Flags);
|
||||
|
||||
LLVM_ABI raw_ostream &operator<<(raw_ostream &OS,
|
||||
const RootConstants &Constants);
|
||||
|
||||
LLVM_ABI raw_ostream &operator<<(raw_ostream &OS,
|
||||
const DescriptorTableClause &Clause);
|
||||
|
||||
|
@ -129,6 +129,39 @@ static raw_ostream &operator<<(raw_ostream &OS,
|
||||
return OS;
|
||||
}
|
||||
|
||||
static const EnumEntry<RootFlags> RootFlagNames[] = {
|
||||
{"AllowInputAssemblerInputLayout",
|
||||
RootFlags::AllowInputAssemblerInputLayout},
|
||||
{"DenyVertexShaderRootAccess", RootFlags::DenyVertexShaderRootAccess},
|
||||
{"DenyHullShaderRootAccess", RootFlags::DenyHullShaderRootAccess},
|
||||
{"DenyDomainShaderRootAccess", RootFlags::DenyDomainShaderRootAccess},
|
||||
{"DenyGeometryShaderRootAccess", RootFlags::DenyGeometryShaderRootAccess},
|
||||
{"DenyPixelShaderRootAccess", RootFlags::DenyPixelShaderRootAccess},
|
||||
{"AllowStreamOutput", RootFlags::AllowStreamOutput},
|
||||
{"LocalRootSignature", RootFlags::LocalRootSignature},
|
||||
{"DenyAmplificationShaderRootAccess",
|
||||
RootFlags::DenyAmplificationShaderRootAccess},
|
||||
{"DenyMeshShaderRootAccess", RootFlags::DenyMeshShaderRootAccess},
|
||||
{"CBVSRVUAVHeapDirectlyIndexed", RootFlags::CBVSRVUAVHeapDirectlyIndexed},
|
||||
{"SamplerHeapDirectlyIndexed", RootFlags::SamplerHeapDirectlyIndexed},
|
||||
};
|
||||
|
||||
raw_ostream &operator<<(raw_ostream &OS, const RootFlags &Flags) {
|
||||
OS << "RootFlags(";
|
||||
printFlags(OS, Flags, ArrayRef(RootFlagNames));
|
||||
OS << ")";
|
||||
|
||||
return OS;
|
||||
}
|
||||
|
||||
raw_ostream &operator<<(raw_ostream &OS, const RootConstants &Constants) {
|
||||
OS << "RootConstants(num32BitConstants = " << Constants.Num32BitConstants
|
||||
<< ", " << Constants.Reg << ", space = " << Constants.Space
|
||||
<< ", visibility = " << Constants.Visibility << ")";
|
||||
|
||||
return OS;
|
||||
}
|
||||
|
||||
raw_ostream &operator<<(raw_ostream &OS, const DescriptorTable &Table) {
|
||||
OS << "DescriptorTable(numClauses = " << Table.NumClauses
|
||||
<< ", visibility = " << Table.Visibility << ")";
|
||||
|
@ -108,4 +108,73 @@ TEST(HLSLRootSignatureTest, DescriptorTableDump) {
|
||||
EXPECT_EQ(Out, Expected);
|
||||
}
|
||||
|
||||
TEST(HLSLRootSignatureTest, DefaultRootConstantsDump) {
|
||||
RootConstants Constants;
|
||||
Constants.Num32BitConstants = 1;
|
||||
Constants.Reg = {RegisterType::BReg, 3};
|
||||
|
||||
std::string Out;
|
||||
llvm::raw_string_ostream OS(Out);
|
||||
OS << Constants;
|
||||
OS.flush();
|
||||
|
||||
std::string Expected = "RootConstants(num32BitConstants = 1, b3, space = 0, "
|
||||
"visibility = All)";
|
||||
EXPECT_EQ(Out, Expected);
|
||||
}
|
||||
|
||||
TEST(HLSLRootSignatureTest, SetRootConstantsDump) {
|
||||
RootConstants Constants;
|
||||
Constants.Num32BitConstants = 983;
|
||||
Constants.Reg = {RegisterType::BReg, 34593};
|
||||
Constants.Space = 7;
|
||||
Constants.Visibility = ShaderVisibility::Pixel;
|
||||
|
||||
std::string Out;
|
||||
llvm::raw_string_ostream OS(Out);
|
||||
OS << Constants;
|
||||
OS.flush();
|
||||
|
||||
std::string Expected = "RootConstants(num32BitConstants = 983, b34593, "
|
||||
"space = 7, visibility = Pixel)";
|
||||
EXPECT_EQ(Out, Expected);
|
||||
}
|
||||
|
||||
TEST(HLSLRootSignatureTest, NoneRootFlagsDump) {
|
||||
RootFlags Flags = RootFlags::None;
|
||||
|
||||
std::string Out;
|
||||
llvm::raw_string_ostream OS(Out);
|
||||
OS << Flags;
|
||||
OS.flush();
|
||||
|
||||
std::string Expected = "RootFlags(None)";
|
||||
EXPECT_EQ(Out, Expected);
|
||||
}
|
||||
|
||||
TEST(HLSLRootSignatureTest, AllRootFlagsDump) {
|
||||
RootFlags Flags = RootFlags::ValidFlags;
|
||||
|
||||
std::string Out;
|
||||
llvm::raw_string_ostream OS(Out);
|
||||
OS << Flags;
|
||||
OS.flush();
|
||||
|
||||
std::string Expected = "RootFlags("
|
||||
"AllowInputAssemblerInputLayout | "
|
||||
"DenyVertexShaderRootAccess | "
|
||||
"DenyHullShaderRootAccess | "
|
||||
"DenyDomainShaderRootAccess | "
|
||||
"DenyGeometryShaderRootAccess | "
|
||||
"DenyPixelShaderRootAccess | "
|
||||
"AllowStreamOutput | "
|
||||
"LocalRootSignature | "
|
||||
"DenyAmplificationShaderRootAccess | "
|
||||
"DenyMeshShaderRootAccess | "
|
||||
"CBVSRVUAVHeapDirectlyIndexed | "
|
||||
"SamplerHeapDirectlyIndexed)";
|
||||
|
||||
EXPECT_EQ(Out, Expected);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
Loading…
x
Reference in New Issue
Block a user