[llvm] [DXIL] Add support for root signature flag element in DXContainer (PR #123147)
Justin Bogner via llvm-commits
llvm-commits at lists.llvm.org
Wed Feb 12 21:09:06 PST 2025
================
@@ -0,0 +1,224 @@
+//===- DXILRootSignature.cpp - DXIL Root Signature helper objects -------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file This file contains helper objects and APIs for working with DXIL
+/// Root Signatures.
+///
+//===----------------------------------------------------------------------===//
+#include "DXILRootSignature.h"
+#include "DirectX.h"
+#include "llvm/ADT/StringSwitch.h"
+#include "llvm/ADT/Twine.h"
+#include "llvm/Analysis/DXILMetadataAnalysis.h"
+#include "llvm/BinaryFormat/DXContainer.h"
+#include "llvm/IR/Constants.h"
+#include "llvm/IR/DiagnosticInfo.h"
+#include "llvm/IR/Function.h"
+#include "llvm/IR/LLVMContext.h"
+#include "llvm/IR/Metadata.h"
+#include "llvm/IR/Module.h"
+#include "llvm/InitializePasses.h"
+#include "llvm/Pass.h"
+#include "llvm/Support/Error.h"
+#include "llvm/Support/ErrorHandling.h"
+#include <cstdint>
+#include <optional>
+#include <utility>
+
+using namespace llvm;
+using namespace llvm::dxil;
+
+static bool reportError(LLVMContext *Ctx, Twine Message,
+ DiagnosticSeverity Severity = DS_Error) {
+ Ctx->diagnose(DiagnosticInfoGeneric(Message, Severity));
+ return true;
+}
+
+static bool parseRootFlags(LLVMContext *Ctx, ModuleRootSignature &MRS,
+ MDNode *RootFlagNode) {
+
+ if (RootFlagNode->getNumOperands() != 2)
+ return reportError(Ctx, "Invalid format for RootFlag Element");
+
+ auto *Flag = mdconst::extract<ConstantInt>(RootFlagNode->getOperand(1));
+ MRS.Flags = Flag->getZExtValue();
+
+ return false;
+}
+
+static bool parseRootSignatureElement(LLVMContext *Ctx,
+ ModuleRootSignature &MRS,
+ MDNode *Element) {
+ MDString *ElementText = cast<MDString>(Element->getOperand(0));
+ if (ElementText == nullptr)
+ return reportError(Ctx, "Invalid format for Root Element");
+
+ RootSignatureElementKind ElementKind =
+ StringSwitch<RootSignatureElementKind>(ElementText->getString())
+ .Case("RootFlags", RootSignatureElementKind::RootFlags)
+ .Default(RootSignatureElementKind::None);
----------------
bogner wrote:
Should `RootSignatureElementKind::None` actually be called `RootSignatureElementKind::Error`? The current name makes me think there is simply no root signature, but the way it's used seems to generally be "the root signature is invalid"
https://github.com/llvm/llvm-project/pull/123147
More information about the llvm-commits
mailing list