[llvm] a383b1a - Reland "[HLSL][RootSignature] Implement serialization of RootConstants and RootFlags" (#143019)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Jun 16 14:53:03 PDT 2025
Author: Finn Plummer
Date: 2025-06-16T14:52:59-07:00
New Revision: a383b1a95b63cf120b3dea554c2d66ccfaee066b
URL: https://github.com/llvm/llvm-project/commit/a383b1a95b63cf120b3dea554c2d66ccfaee066b
DIFF: https://github.com/llvm/llvm-project/commit/a383b1a95b63cf120b3dea554c2d66ccfaee066b.diff
LOG: 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
Added:
Modified:
clang/lib/Parse/CMakeLists.txt
clang/unittests/Parse/CMakeLists.txt
llvm/include/llvm/Frontend/HLSL/HLSLRootSignatureUtils.h
llvm/lib/Frontend/HLSL/HLSLRootSignatureUtils.cpp
llvm/unittests/Frontend/HLSLRootSignatureDumpTest.cpp
Removed:
################################################################################
diff --git a/clang/lib/Parse/CMakeLists.txt b/clang/lib/Parse/CMakeLists.txt
index 00fde537bb9c6..e6cbf3b868b7d 100644
--- a/clang/lib/Parse/CMakeLists.txt
+++ b/clang/lib/Parse/CMakeLists.txt
@@ -1,4 +1,5 @@
set(LLVM_LINK_COMPONENTS
+ FrontendHLSL
FrontendOpenMP
MC
MCParser
diff --git a/clang/unittests/Parse/CMakeLists.txt b/clang/unittests/Parse/CMakeLists.txt
index 6859efed294c8..2ed43a83b8782 100644
--- a/clang/unittests/Parse/CMakeLists.txt
+++ b/clang/unittests/Parse/CMakeLists.txt
@@ -11,5 +11,6 @@ add_clang_unittest(ParseTests
LLVMTestingSupport
clangTesting
LLVM_COMPONENTS
+ FrontendHLSL
Support
)
diff --git a/llvm/include/llvm/Frontend/HLSL/HLSLRootSignatureUtils.h b/llvm/include/llvm/Frontend/HLSL/HLSLRootSignatureUtils.h
index 6d959ad5bdc7f..ca20e6719f3a4 100644
--- a/llvm/include/llvm/Frontend/HLSL/HLSLRootSignatureUtils.h
+++ b/llvm/include/llvm/Frontend/HLSL/HLSLRootSignatureUtils.h
@@ -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);
diff --git a/llvm/lib/Frontend/HLSL/HLSLRootSignatureUtils.cpp b/llvm/lib/Frontend/HLSL/HLSLRootSignatureUtils.cpp
index 7d744781da04f..5bae72a3986f8 100644
--- a/llvm/lib/Frontend/HLSL/HLSLRootSignatureUtils.cpp
+++ b/llvm/lib/Frontend/HLSL/HLSLRootSignatureUtils.cpp
@@ -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 << ")";
diff --git a/llvm/unittests/Frontend/HLSLRootSignatureDumpTest.cpp b/llvm/unittests/Frontend/HLSLRootSignatureDumpTest.cpp
index 90e6cd0a80d6b..1a0c8e2a16396 100644
--- a/llvm/unittests/Frontend/HLSLRootSignatureDumpTest.cpp
+++ b/llvm/unittests/Frontend/HLSLRootSignatureDumpTest.cpp
@@ -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
More information about the llvm-commits
mailing list