Skip to content

Commit 5360947

Browse files
author
joaosaffran
committed
moving root signature to it's own pass
1 parent 2b72841 commit 5360947

File tree

12 files changed

+271
-206
lines changed

12 files changed

+271
-206
lines changed

llvm/include/llvm/Analysis/DXILMetadataAnalysis.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111

1212
#include "llvm/ADT/SmallVector.h"
1313
#include "llvm/IR/PassManager.h"
14-
#include "llvm/MC/DXContainerRootSignature.h"
1514
#include "llvm/Pass.h"
1615
#include "llvm/Support/VersionTuple.h"
1716
#include "llvm/TargetParser/Triple.h"
@@ -39,7 +38,6 @@ struct ModuleMetadataInfo {
3938
Triple::EnvironmentType ShaderProfile{Triple::UnknownEnvironment};
4039
VersionTuple ValidatorVersion{};
4140
SmallVector<EntryProperties> EntryPropertyVec{};
42-
std::optional<mcdxbc::RootSignatureDesc> RootSignatureDesc;
4341
void print(raw_ostream &OS) const;
4442
};
4543

llvm/include/llvm/MC/DXContainerRootSignature.h

Lines changed: 0 additions & 74 deletions
This file was deleted.

llvm/lib/Analysis/DXILMetadataAnalysis.cpp

Lines changed: 0 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
#include "llvm/IR/Metadata.h"
1616
#include "llvm/IR/Module.h"
1717
#include "llvm/InitializePasses.h"
18-
#include "llvm/MC/DXContainerRootSignature.h"
1918
#include "llvm/Support/Casting.h"
2019
#include "llvm/Support/ErrorHandling.h"
2120
#include <memory>
@@ -24,82 +23,8 @@
2423

2524
using namespace llvm;
2625
using namespace dxil;
27-
using namespace llvm::mcdxbc;
2826

29-
static bool parseRootFlags(MDNode *RootFlagNode, RootSignatureDesc *Desc) {
3027

31-
assert(RootFlagNode->getNumOperands() == 2 &&
32-
"Invalid format for RootFlag Element");
33-
auto *Flag = mdconst::extract<ConstantInt>(RootFlagNode->getOperand(1));
34-
auto Value = (RootSignatureFlags)Flag->getZExtValue();
35-
36-
if ((Value & ~RootSignatureFlags::ValidFlags) != RootSignatureFlags::None)
37-
return true;
38-
39-
Desc->Flags = Value;
40-
return false;
41-
}
42-
43-
static bool parseRootSignatureElement(MDNode *Element,
44-
RootSignatureDesc *Desc) {
45-
MDString *ElementText = cast<MDString>(Element->getOperand(0));
46-
47-
assert(ElementText != nullptr && "First preoperty of element is not ");
48-
49-
RootSignatureElementKind ElementKind =
50-
StringSwitch<RootSignatureElementKind>(ElementText->getString())
51-
.Case("RootFlags", RootSignatureElementKind::RootFlags)
52-
.Case("RootConstants", RootSignatureElementKind::RootConstants)
53-
.Case("RootCBV", RootSignatureElementKind::RootDescriptor)
54-
.Case("RootSRV", RootSignatureElementKind::RootDescriptor)
55-
.Case("RootUAV", RootSignatureElementKind::RootDescriptor)
56-
.Case("Sampler", RootSignatureElementKind::RootDescriptor)
57-
.Case("DescriptorTable", RootSignatureElementKind::DescriptorTable)
58-
.Case("StaticSampler", RootSignatureElementKind::StaticSampler)
59-
.Default(RootSignatureElementKind::None);
60-
61-
switch (ElementKind) {
62-
63-
case RootSignatureElementKind::RootFlags: {
64-
return parseRootFlags(Element, Desc);
65-
break;
66-
}
67-
68-
case RootSignatureElementKind::RootConstants:
69-
case RootSignatureElementKind::RootDescriptor:
70-
case RootSignatureElementKind::DescriptorTable:
71-
case RootSignatureElementKind::StaticSampler:
72-
case RootSignatureElementKind::None:
73-
llvm_unreachable("Not Implemented yet");
74-
break;
75-
}
76-
77-
return true;
78-
}
79-
80-
bool parseRootSignature(RootSignatureDesc *Desc, int32_t Version,
81-
NamedMDNode *Root) {
82-
Desc->Version = Version;
83-
bool HasError = false;
84-
85-
for (unsigned int Sid = 0; Sid < Root->getNumOperands(); Sid++) {
86-
// This should be an if, for error handling
87-
MDNode *Node = cast<MDNode>(Root->getOperand(Sid));
88-
89-
// Not sure what use this for...
90-
Metadata *Func = Node->getOperand(0).get();
91-
92-
// This should be an if, for error handling
93-
MDNode *Elements = cast<MDNode>(Node->getOperand(1).get());
94-
95-
for (unsigned int Eid = 0; Eid < Elements->getNumOperands(); Eid++) {
96-
MDNode *Element = cast<MDNode>(Elements->getOperand(Eid));
97-
98-
HasError = HasError || parseRootSignatureElement(Element, Desc);
99-
}
100-
}
101-
return HasError;
102-
}
10328

10429
static ModuleMetadataInfo collectMetadataInfo(Module &M) {
10530
ModuleMetadataInfo MMDAI;
@@ -117,15 +42,6 @@ static ModuleMetadataInfo collectMetadataInfo(Module &M) {
11742
VersionTuple(MajorMD->getZExtValue(), MinorMD->getZExtValue());
11843
}
11944

120-
NamedMDNode *RootSignatureNode = M.getNamedMetadata("dx.rootsignatures");
121-
if (RootSignatureNode) {
122-
mcdxbc::RootSignatureDesc Desc;
123-
124-
parseRootSignature(&Desc, 1, RootSignatureNode);
125-
126-
MMDAI.RootSignatureDesc = Desc;
127-
}
128-
12945
// For all HLSL Shader functions
13046
for (auto &F : M.functions()) {
13147
if (!F.hasFnAttribute("hlsl.shader"))

llvm/lib/MC/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
add_llvm_component_library(LLVMMC
22
ConstantPools.cpp
33
DXContainerPSVInfo.cpp
4-
DXContainerRootSignature.cpp
54
ELFObjectWriter.cpp
65
GOFFObjectWriter.cpp
76
MCAsmBackend.cpp

llvm/lib/MC/DXContainerRootSignature.cpp

Lines changed: 0 additions & 36 deletions
This file was deleted.

llvm/lib/Target/DirectX/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ add_llvm_target(DirectXCodeGen
3333
DXILResourceAccess.cpp
3434
DXILShaderFlags.cpp
3535
DXILTranslateMetadata.cpp
36-
36+
DXILRootSignature.cpp
3737
LINK_COMPONENTS
3838
Analysis
3939
AsmPrinter

llvm/lib/Target/DirectX/DXContainerGlobals.cpp

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
//===----------------------------------------------------------------------===//
1212

1313
#include "DXILShaderFlags.h"
14+
#include "DXILRootSignature.h"
1415
#include "DirectX.h"
1516
#include "llvm/ADT/SmallVector.h"
1617
#include "llvm/ADT/StringExtras.h"
@@ -23,7 +24,6 @@
2324
#include "llvm/IR/Module.h"
2425
#include "llvm/InitializePasses.h"
2526
#include "llvm/MC/DXContainerPSVInfo.h"
26-
#include "llvm/MC/DXContainerRootSignature.h"
2727
#include "llvm/Pass.h"
2828
#include "llvm/Support/MD5.h"
2929
#include "llvm/Transforms/Utils/ModuleUtils.h"
@@ -63,6 +63,7 @@ class DXContainerGlobals : public llvm::ModulePass {
6363
void getAnalysisUsage(AnalysisUsage &AU) const override {
6464
AU.setPreservesAll();
6565
AU.addRequired<ShaderFlagsAnalysisWrapper>();
66+
AU.addRequired<RootSignatureAnalysisWrapper>();
6667
AU.addRequired<DXILMetadataAnalysisWrapperPass>();
6768
AU.addRequired<DXILResourceTypeWrapperPass>();
6869
AU.addRequired<DXILResourceBindingWrapperPass>();
@@ -151,17 +152,15 @@ void DXContainerGlobals::addSignature(Module &M,
151152
void DXContainerGlobals::addRootSignature(Module &M,
152153
SmallVector<GlobalValue *> &Globals) {
153154

154-
std::optional<RootSignatureDesc> Desc =
155-
getAnalysis<DXILMetadataAnalysisWrapperPass>()
156-
.getModuleMetadata()
157-
.RootSignatureDesc;
158-
if (!Desc.has_value())
155+
std::optional<ModuleRootSignature> MRS =
156+
getAnalysis<RootSignatureAnalysisWrapper>()
157+
.getRootSignature();
158+
if (!MRS.has_value())
159159
return;
160160

161161
SmallString<256> Data;
162162
raw_svector_ostream OS(Data);
163-
RootSignatureDescWriter writer(&Desc.value());
164-
writer.write(OS);
163+
MRS->write(OS);
165164

166165
Constant *Constant =
167166
ConstantDataArray::getString(M.getContext(), Data, /*AddNull*/ false);

0 commit comments

Comments
 (0)