[NFC][RootSignature] Move RootSignature util functions (#142491)
`HLSLRootSignature.h` was originally created to hold the struct definitions of an `llvm::hlsl::rootsig::RootElement` and some helper functions for it. However, there many users of the structs that don't require any of the helper methods. This requires us to link the `FrontendHLSL` library, where we otherwise wouldn't need to. For instance: - This [revert](https://github.com/llvm/llvm-project/pull/142005) was required as it requires linking to the unrequired `FrontendHLSL` library - As part of the change required here: https://github.com/llvm/llvm-project/issues/126557. We will want to add an `HLSLRootSignatureVersion` enum. Ideally this could live with the root signature struct defs, but we don't want to link the helper objects into `clang/Basic/TargetOptions.h` This change allows the struct definitions to be kept in a single header file and to then have the `FrontendHLSL` library only be linked when required.
This commit is contained in:
@@ -24,7 +24,7 @@
|
||||
#include "clang/Basic/Specifiers.h"
|
||||
#include "clang/Basic/TypeTraits.h"
|
||||
#include "llvm/ADT/StringExtras.h"
|
||||
#include "llvm/Frontend/HLSL/HLSLRootSignature.h"
|
||||
#include "llvm/Frontend/HLSL/HLSLRootSignatureUtils.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <utility>
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include "clang/AST/Type.h"
|
||||
#include "clang/Basic/TargetOptions.h"
|
||||
#include "llvm/ADT/SmallVector.h"
|
||||
#include "llvm/Frontend/HLSL/HLSLRootSignatureUtils.h"
|
||||
#include "llvm/IR/Constants.h"
|
||||
#include "llvm/IR/DerivedTypes.h"
|
||||
#include "llvm/IR/GlobalVariable.h"
|
||||
|
||||
@@ -6,25 +6,19 @@
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
///
|
||||
/// \file This file contains helper objects for working with HLSL Root
|
||||
/// Signatures.
|
||||
/// \file This file contains structure definitions of HLSL Root Signature
|
||||
/// objects.
|
||||
///
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#ifndef LLVM_FRONTEND_HLSL_HLSLROOTSIGNATURE_H
|
||||
#define LLVM_FRONTEND_HLSL_HLSLROOTSIGNATURE_H
|
||||
|
||||
#include "llvm/ADT/ArrayRef.h"
|
||||
#include "llvm/Support/Compiler.h"
|
||||
#include "llvm/Support/DXILABI.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
#include <variant>
|
||||
|
||||
namespace llvm {
|
||||
class LLVMContext;
|
||||
class MDNode;
|
||||
class Metadata;
|
||||
|
||||
namespace hlsl {
|
||||
namespace rootsig {
|
||||
|
||||
@@ -195,8 +189,6 @@ struct DescriptorTable {
|
||||
uint32_t NumClauses = 0;
|
||||
};
|
||||
|
||||
LLVM_ABI raw_ostream &operator<<(raw_ostream &OS, const DescriptorTable &Table);
|
||||
|
||||
static const uint32_t NumDescriptorsUnbounded = 0xffffffff;
|
||||
static const uint32_t DescriptorTableOffsetAppend = 0xffffffff;
|
||||
// Models DTClause : CBV | SRV | UAV | Sampler, by collecting like parameters
|
||||
@@ -225,9 +217,6 @@ struct DescriptorTableClause {
|
||||
}
|
||||
};
|
||||
|
||||
LLVM_ABI raw_ostream &operator<<(raw_ostream &OS,
|
||||
const DescriptorTableClause &Clause);
|
||||
|
||||
struct StaticSampler {
|
||||
Register Reg;
|
||||
SamplerFilter Filter = SamplerFilter::Anisotropic;
|
||||
@@ -264,32 +253,6 @@ using RootElement =
|
||||
std::variant<RootFlags, RootConstants, RootDescriptor, DescriptorTable,
|
||||
DescriptorTableClause, StaticSampler>;
|
||||
|
||||
LLVM_ABI void dumpRootElements(raw_ostream &OS, ArrayRef<RootElement> Elements);
|
||||
|
||||
class MetadataBuilder {
|
||||
public:
|
||||
MetadataBuilder(llvm::LLVMContext &Ctx, ArrayRef<RootElement> Elements)
|
||||
: Ctx(Ctx), Elements(Elements) {}
|
||||
|
||||
/// Iterates through the elements and dispatches onto the correct Build method
|
||||
///
|
||||
/// Accumulates the root signature and returns the Metadata node that is just
|
||||
/// a list of all the elements
|
||||
LLVM_ABI MDNode *BuildRootSignature();
|
||||
|
||||
private:
|
||||
/// Define the various builders for the different metadata types
|
||||
MDNode *BuildRootFlags(const RootFlags &Flags);
|
||||
MDNode *BuildRootConstants(const RootConstants &Constants);
|
||||
MDNode *BuildRootDescriptor(const RootDescriptor &Descriptor);
|
||||
MDNode *BuildDescriptorTable(const DescriptorTable &Table);
|
||||
MDNode *BuildDescriptorTableClause(const DescriptorTableClause &Clause);
|
||||
|
||||
llvm::LLVMContext &Ctx;
|
||||
ArrayRef<RootElement> Elements;
|
||||
SmallVector<Metadata *> GeneratedMetadata;
|
||||
};
|
||||
|
||||
} // namespace rootsig
|
||||
} // namespace hlsl
|
||||
} // namespace llvm
|
||||
|
||||
65
llvm/include/llvm/Frontend/HLSL/HLSLRootSignatureUtils.h
Normal file
65
llvm/include/llvm/Frontend/HLSL/HLSLRootSignatureUtils.h
Normal file
@@ -0,0 +1,65 @@
|
||||
//===- HLSLRootSignatureUtils.h - HLSL Root Signature helpers -------------===//
|
||||
//
|
||||
// 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 obejcts for working with HLSL Root
|
||||
/// Signatures.
|
||||
///
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#ifndef LLVM_FRONTEND_HLSL_HLSLROOTSIGNATUREUTILS_H
|
||||
#define LLVM_FRONTEND_HLSL_HLSLROOTSIGNATUREUTILS_H
|
||||
|
||||
#include "llvm/ADT/ArrayRef.h"
|
||||
#include "llvm/Frontend/HLSL/HLSLRootSignature.h"
|
||||
#include "llvm/Support/Compiler.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
|
||||
namespace llvm {
|
||||
class LLVMContext;
|
||||
class MDNode;
|
||||
class Metadata;
|
||||
|
||||
namespace hlsl {
|
||||
namespace rootsig {
|
||||
|
||||
LLVM_ABI raw_ostream &operator<<(raw_ostream &OS,
|
||||
const DescriptorTableClause &Clause);
|
||||
|
||||
LLVM_ABI raw_ostream &operator<<(raw_ostream &OS, const DescriptorTable &Table);
|
||||
|
||||
LLVM_ABI void dumpRootElements(raw_ostream &OS, ArrayRef<RootElement> Elements);
|
||||
|
||||
class MetadataBuilder {
|
||||
public:
|
||||
MetadataBuilder(llvm::LLVMContext &Ctx, ArrayRef<RootElement> Elements)
|
||||
: Ctx(Ctx), Elements(Elements) {}
|
||||
|
||||
/// Iterates through the elements and dispatches onto the correct Build method
|
||||
///
|
||||
/// Accumulates the root signature and returns the Metadata node that is just
|
||||
/// a list of all the elements
|
||||
LLVM_ABI MDNode *BuildRootSignature();
|
||||
|
||||
private:
|
||||
/// Define the various builders for the different metadata types
|
||||
MDNode *BuildRootFlags(const RootFlags &Flags);
|
||||
MDNode *BuildRootConstants(const RootConstants &Constants);
|
||||
MDNode *BuildRootDescriptor(const RootDescriptor &Descriptor);
|
||||
MDNode *BuildDescriptorTable(const DescriptorTable &Table);
|
||||
MDNode *BuildDescriptorTableClause(const DescriptorTableClause &Clause);
|
||||
|
||||
llvm::LLVMContext &Ctx;
|
||||
ArrayRef<RootElement> Elements;
|
||||
SmallVector<Metadata *> GeneratedMetadata;
|
||||
};
|
||||
|
||||
} // namespace rootsig
|
||||
} // namespace hlsl
|
||||
} // namespace llvm
|
||||
|
||||
#endif // LLVM_FRONTEND_HLSL_HLSLROOTSIGNATUREUTILS_H
|
||||
@@ -1,7 +1,7 @@
|
||||
add_llvm_component_library(LLVMFrontendHLSL
|
||||
CBuffer.cpp
|
||||
HLSLResource.cpp
|
||||
HLSLRootSignature.cpp
|
||||
HLSLRootSignatureUtils.cpp
|
||||
|
||||
ADDITIONAL_HEADER_DIRS
|
||||
${LLVM_MAIN_INCLUDE_DIR}/llvm/Frontend
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//===- HLSLRootSignature.cpp - HLSL Root Signature helper objects ---------===//
|
||||
//===- HLSLRootSignatureUtils.cpp - HLSL Root Signature helpers -----------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
@@ -10,7 +10,7 @@
|
||||
///
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm/Frontend/HLSL/HLSLRootSignature.h"
|
||||
#include "llvm/Frontend/HLSL/HLSLRootSignatureUtils.h"
|
||||
#include "llvm/ADT/SmallString.h"
|
||||
#include "llvm/ADT/bit.h"
|
||||
#include "llvm/IR/IRBuilder.h"
|
||||
@@ -6,7 +6,7 @@
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm/Frontend/HLSL/HLSLRootSignature.h"
|
||||
#include "llvm/Frontend/HLSL/HLSLRootSignatureUtils.h"
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
using namespace llvm::hlsl::rootsig;
|
||||
|
||||
Reference in New Issue
Block a user