[llvm-branch-commits] [llvm] [HLSL] Adding support for Root Constants in LLVM Metadata (PR #135085)

Finn Plummer via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Mon Apr 14 10:16:58 PDT 2025


================
@@ -94,10 +144,56 @@ static bool parse(LLVMContext *Ctx, mcdxbc::RootSignatureDesc &RSD,
 
 static bool verifyRootFlag(uint32_t Flags) { return (Flags & ~0xfff) == 0; }
 
+static bool verifyShaderVisibility(dxbc::ShaderVisibility Flags) {
+  switch (Flags) {
+
+  case dxbc::ShaderVisibility::All:
+  case dxbc::ShaderVisibility::Vertex:
+  case dxbc::ShaderVisibility::Hull:
+  case dxbc::ShaderVisibility::Domain:
+  case dxbc::ShaderVisibility::Geometry:
+  case dxbc::ShaderVisibility::Pixel:
+  case dxbc::ShaderVisibility::Amplification:
+  case dxbc::ShaderVisibility::Mesh:
+    return true;
+  }
+
+  return false;
+}
+
+static bool verifyParameterType(dxbc::RootParameterType Flags) {
+  switch (Flags) {
+  case dxbc::RootParameterType::Constants32Bit:
+    return true;
+  }
+
+  return false;
+}
+
+static bool verifyVersion(uint32_t Version) {
+  return (Version == 1 || Version == 2);
+}
+
 static bool validate(LLVMContext *Ctx, const mcdxbc::RootSignatureDesc &RSD) {
+
+  if (!verifyVersion(RSD.Header.Version)) {
+    return reportValueError(Ctx, "Version", RSD.Header.Version);
+  }
+
   if (!verifyRootFlag(RSD.Header.Flags)) {
-    return reportError(Ctx, "Invalid Root Signature flag value");
+    return reportValueError(Ctx, "RootFlags", RSD.Header.Flags);
+  }
+
+  for (const auto &P : RSD.Parameters) {
+    if (!verifyShaderVisibility(P.Header.ShaderVisibility))
+      return reportValueError(Ctx, "ShaderVisibility",
+                              (uint32_t)P.Header.ShaderVisibility);
+
+    if (!verifyParameterType(P.Header.ParameterType))
+      return reportValueError(Ctx, "ParameterType",
----------------
inbelic wrote:

There isn't a test case demonstrating this

https://github.com/llvm/llvm-project/pull/135085


More information about the llvm-branch-commits mailing list