Skip to content

Commit 605f225

Browse files
author
joaosaffran
committed
addressing pr comments
1 parent 5b3fedc commit 605f225

15 files changed

+96
-88
lines changed

llvm/include/llvm/MC/DXContainerRootSignature.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,15 @@ namespace llvm {
1414
class raw_ostream;
1515

1616
namespace mcdxbc {
17-
struct RootSignatureHeader {
17+
struct RootSignatureDesc {
1818
uint32_t Version = 2;
1919
uint32_t NumParameters = 0;
2020
uint32_t RootParametersOffset = 0;
2121
uint32_t NumStaticSamplers = 0;
2222
uint32_t StaticSamplersOffset = 0;
2323
uint32_t Flags = 0;
2424

25-
void write(raw_ostream &OS);
25+
void write(raw_ostream &OS) const;
2626
};
2727
} // namespace mcdxbc
2828
} // namespace llvm

llvm/include/llvm/ObjectYAML/DXContainerYAML.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,9 @@ struct ShaderHash {
7474
};
7575

7676
#define ROOT_ELEMENT_FLAG(Num, Val) bool Val = false;
77-
struct RootSignatureDesc {
78-
RootSignatureDesc() = default;
79-
RootSignatureDesc(const object::DirectX::RootSignature &Data);
77+
struct RootSignatureYamlDesc {
78+
RootSignatureYamlDesc() = default;
79+
RootSignatureYamlDesc(const object::DirectX::RootSignature &Data);
8080

8181
uint32_t Version;
8282
uint32_t NumParameters;
@@ -176,7 +176,7 @@ struct Part {
176176
std::optional<ShaderHash> Hash;
177177
std::optional<PSVInfo> Info;
178178
std::optional<DXContainerYAML::Signature> Signature;
179-
std::optional<DXContainerYAML::RootSignatureDesc> RootSignature;
179+
std::optional<DXContainerYAML::RootSignatureYamlDesc> RootSignature;
180180
};
181181

182182
struct Object {
@@ -259,9 +259,9 @@ template <> struct MappingTraits<DXContainerYAML::Signature> {
259259
static void mapping(IO &IO, llvm::DXContainerYAML::Signature &El);
260260
};
261261

262-
template <> struct MappingTraits<DXContainerYAML::RootSignatureDesc> {
262+
template <> struct MappingTraits<DXContainerYAML::RootSignatureYamlDesc> {
263263
static void mapping(IO &IO,
264-
DXContainerYAML::RootSignatureDesc &RootSignature);
264+
DXContainerYAML::RootSignatureYamlDesc &RootSignature);
265265
};
266266

267267
} // namespace yaml

llvm/lib/MC/DXContainerRootSignature.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
using namespace llvm;
1313
using namespace llvm::mcdxbc;
1414

15-
void RootSignatureHeader::write(raw_ostream &OS) {
15+
void RootSignatureDesc::write(raw_ostream &OS) const {
1616

1717
support::endian::write(OS, Version, llvm::endianness::little);
1818
support::endian::write(OS, NumParameters, llvm::endianness::little);

llvm/lib/ObjectYAML/DXContainerEmitter.cpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -266,15 +266,15 @@ void DXContainerWriter::writeParts(raw_ostream &OS) {
266266
if (!P.RootSignature.has_value())
267267
continue;
268268

269-
mcdxbc::RootSignatureHeader Header;
270-
Header.Flags = P.RootSignature->getEncodedFlags();
271-
Header.Version = P.RootSignature->Version;
272-
Header.NumParameters = P.RootSignature->NumParameters;
273-
Header.RootParametersOffset = P.RootSignature->RootParametersOffset;
274-
Header.NumStaticSamplers = P.RootSignature->NumStaticSamplers;
275-
Header.StaticSamplersOffset = P.RootSignature->StaticSamplersOffset;
276-
277-
Header.write(OS);
269+
mcdxbc::RootSignatureDesc RS;
270+
RS.Flags = P.RootSignature->getEncodedFlags();
271+
RS.Version = P.RootSignature->Version;
272+
RS.NumParameters = P.RootSignature->NumParameters;
273+
RS.RootParametersOffset = P.RootSignature->RootParametersOffset;
274+
RS.NumStaticSamplers = P.RootSignature->NumStaticSamplers;
275+
RS.StaticSamplersOffset = P.RootSignature->StaticSamplersOffset;
276+
277+
RS.write(OS);
278278
break;
279279
}
280280
uint64_t BytesWritten = OS.tell() - DataStart;

llvm/lib/ObjectYAML/DXContainerYAML.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ DXContainerYAML::ShaderFeatureFlags::ShaderFeatureFlags(uint64_t FlagData) {
2929
#include "llvm/BinaryFormat/DXContainerConstants.def"
3030
}
3131

32-
DXContainerYAML::RootSignatureDesc::RootSignatureDesc(
32+
DXContainerYAML::RootSignatureYamlDesc::RootSignatureYamlDesc(
3333
const object::DirectX::RootSignature &Data)
3434
: Version(Data.getVersion()), NumParameters(Data.getNumParameters()),
3535
RootParametersOffset(Data.getRootParametersOffset()),
@@ -41,7 +41,7 @@ DXContainerYAML::RootSignatureDesc::RootSignatureDesc(
4141
#include "llvm/BinaryFormat/DXContainerConstants.def"
4242
}
4343

44-
uint32_t DXContainerYAML::RootSignatureDesc::getEncodedFlags() {
44+
uint32_t DXContainerYAML::RootSignatureYamlDesc::getEncodedFlags() {
4545
uint64_t Flag = 0;
4646
#define ROOT_ELEMENT_FLAG(Num, Val) \
4747
if (Val) \
@@ -209,8 +209,8 @@ void MappingTraits<DXContainerYAML::Signature>::mapping(
209209
IO.mapRequired("Parameters", S.Parameters);
210210
}
211211

212-
void MappingTraits<DXContainerYAML::RootSignatureDesc>::mapping(
213-
IO &IO, DXContainerYAML::RootSignatureDesc &S) {
212+
void MappingTraits<DXContainerYAML::RootSignatureYamlDesc>::mapping(
213+
IO &IO, DXContainerYAML::RootSignatureYamlDesc &S) {
214214
IO.mapRequired("Version", S.Version);
215215
IO.mapRequired("NumParameters", S.NumParameters);
216216
IO.mapRequired("RootParametersOffset", S.RootParametersOffset);

llvm/lib/Target/DirectX/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ add_llvm_target(DirectXCodeGen
3434
DXILShaderFlags.cpp
3535
DXILTranslateMetadata.cpp
3636
DXILRootSignature.cpp
37+
3738
LINK_COMPONENTS
3839
Analysis
3940
AsmPrinter

llvm/lib/Target/DirectX/DXContainerGlobals.cpp

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,11 @@
2424
#include "llvm/IR/Module.h"
2525
#include "llvm/InitializePasses.h"
2626
#include "llvm/MC/DXContainerPSVInfo.h"
27-
#include "llvm/MC/DXContainerRootSignature.h"
2827
#include "llvm/Pass.h"
2928
#include "llvm/Support/MD5.h"
3029
#include "llvm/TargetParser/Triple.h"
3130
#include "llvm/Transforms/Utils/ModuleUtils.h"
31+
#include <optional>
3232

3333
using namespace llvm;
3434
using namespace llvm::dxil;
@@ -156,26 +156,24 @@ void DXContainerGlobals::addRootSignature(Module &M,
156156
dxil::ModuleMetadataInfo &MMI =
157157
getAnalysis<DXILMetadataAnalysisWrapperPass>().getModuleMetadata();
158158

159-
// Root Signature in Library shaders are different,
160-
// since they don't use DXContainer to share it.
159+
// Root Signature in Library don't compile to DXContainer.
161160
if (MMI.ShaderProfile == llvm::Triple::Library)
162161
return;
163162

164163
assert(MMI.EntryPropertyVec.size() == 1);
165164

166165
auto &RSA = getAnalysis<RootSignatureAnalysisWrapper>();
167-
const Function *&EntryFunction = MMI.EntryPropertyVec[0].Entry;
166+
const Function *EntryFunction = MMI.EntryPropertyVec[0].Entry;
167+
const std::optional<RootSignatureDesc> &MaybeRS =
168+
RSA.getForFunction(EntryFunction);
168169

169-
if (!RSA.hasForFunction(EntryFunction))
170+
if (!MaybeRS.has_value())
170171
return;
171172

172-
const ModuleRootSignature &MRS = RSA.getForFunction(EntryFunction);
173+
const RootSignatureDesc &RSH = MaybeRS.value();
173174
SmallString<256> Data;
174175
raw_svector_ostream OS(Data);
175176

176-
RootSignatureHeader RSH;
177-
RSH.Flags = MRS.Flags;
178-
179177
RSH.write(OS);
180178

181179
Constant *Constant =

llvm/lib/Target/DirectX/DXILRootSignature.cpp

Lines changed: 35 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
#include "llvm/Pass.h"
2727
#include "llvm/Support/Error.h"
2828
#include "llvm/Support/ErrorHandling.h"
29+
#include "llvm/Support/raw_ostream.h"
2930
#include <cstdint>
3031
#include <optional>
3132
#include <utility>
@@ -39,20 +40,20 @@ static bool reportError(LLVMContext *Ctx, Twine Message,
3940
return true;
4041
}
4142

42-
static bool parseRootFlags(LLVMContext *Ctx, ModuleRootSignature &MRS,
43+
static bool parseRootFlags(LLVMContext *Ctx, mcdxbc::RootSignatureDesc &RSD,
4344
MDNode *RootFlagNode) {
4445

4546
if (RootFlagNode->getNumOperands() != 2)
4647
return reportError(Ctx, "Invalid format for RootFlag Element");
4748

4849
auto *Flag = mdconst::extract<ConstantInt>(RootFlagNode->getOperand(1));
49-
MRS.Flags = Flag->getZExtValue();
50+
RSD.Flags = Flag->getZExtValue();
5051

5152
return false;
5253
}
5354

5455
static bool parseRootSignatureElement(LLVMContext *Ctx,
55-
ModuleRootSignature &MRS,
56+
mcdxbc::RootSignatureDesc &RSD,
5657
MDNode *Element) {
5758
MDString *ElementText = cast<MDString>(Element->getOperand(0));
5859
if (ElementText == nullptr)
@@ -61,21 +62,22 @@ static bool parseRootSignatureElement(LLVMContext *Ctx,
6162
RootSignatureElementKind ElementKind =
6263
StringSwitch<RootSignatureElementKind>(ElementText->getString())
6364
.Case("RootFlags", RootSignatureElementKind::RootFlags)
64-
.Default(RootSignatureElementKind::None);
65+
.Default(RootSignatureElementKind::Error);
6566

6667
switch (ElementKind) {
6768

6869
case RootSignatureElementKind::RootFlags:
69-
return parseRootFlags(Ctx, MRS, Element);
70-
case RootSignatureElementKind::None:
70+
return parseRootFlags(Ctx, RSD, Element);
71+
case RootSignatureElementKind::Error:
7172
return reportError(Ctx, "Invalid Root Signature Element: " +
7273
ElementText->getString());
7374
}
7475

75-
llvm_unreachable("Root signature element kind not expected.");
76+
llvm_unreachable("Unhandled RootSignatureElementKind enum.");
7677
}
7778

78-
static bool parse(LLVMContext *Ctx, ModuleRootSignature &MRS, MDNode *Node) {
79+
static bool parse(LLVMContext *Ctx, mcdxbc::RootSignatureDesc &RSD,
80+
MDNode *Node) {
7981
bool HasError = false;
8082

8183
// Loop through the Root Elements of the root signature.
@@ -84,20 +86,20 @@ static bool parse(LLVMContext *Ctx, ModuleRootSignature &MRS, MDNode *Node) {
8486
if (Element == nullptr)
8587
return reportError(Ctx, "Missing Root Element Metadata Node.");
8688

87-
HasError = HasError || parseRootSignatureElement(Ctx, MRS, Element);
89+
HasError = HasError || parseRootSignatureElement(Ctx, RSD, Element);
8890
}
8991

9092
return HasError;
9193
}
9294

93-
static bool validate(LLVMContext *Ctx, const ModuleRootSignature &MRS) {
94-
if (!dxbc::RootSignatureValidations::isValidRootFlag(MRS.Flags)) {
95+
static bool validate(LLVMContext *Ctx, const mcdxbc::RootSignatureDesc &RSD) {
96+
if (!dxbc::RootSignatureValidations::isValidRootFlag(RSD.Flags)) {
9597
return reportError(Ctx, "Invalid Root Signature flag value");
9698
}
9799
return false;
98100
}
99101

100-
static SmallDenseMap<const Function *, ModuleRootSignature>
102+
static SmallDenseMap<const Function *, mcdxbc::RootSignatureDesc>
101103
analyzeModule(Module &M) {
102104

103105
/** Root Signature are specified as following in the metadata:
@@ -114,11 +116,11 @@ analyzeModule(Module &M) {
114116

115117
LLVMContext *Ctx = &M.getContext();
116118

117-
SmallDenseMap<const Function *, ModuleRootSignature> MRSMap;
119+
SmallDenseMap<const Function *, mcdxbc::RootSignatureDesc> RSDMap;
118120

119121
NamedMDNode *RootSignatureNode = M.getNamedMetadata("dx.rootsignatures");
120122
if (RootSignatureNode == nullptr)
121-
return MRSMap;
123+
return RSDMap;
122124

123125
for (const auto &RSDefNode : RootSignatureNode->operands()) {
124126
if (RSDefNode->getNumOperands() != 2) {
@@ -153,49 +155,50 @@ analyzeModule(Module &M) {
153155
reportError(Ctx, "Missing Root Element List Metadata node.");
154156
}
155157

156-
ModuleRootSignature MRS;
158+
mcdxbc::RootSignatureDesc RSD;
157159

158-
if (parse(Ctx, MRS, RootElementListNode) || validate(Ctx, MRS)) {
159-
return MRSMap;
160+
if (parse(Ctx, RSD, RootElementListNode) || validate(Ctx, RSD)) {
161+
return RSDMap;
160162
}
161163

162-
MRSMap.insert(std::make_pair(F, MRS));
164+
RSDMap.insert(std::make_pair(F, RSD));
163165
}
164166

165-
return MRSMap;
167+
return RSDMap;
166168
}
167169

168170
AnalysisKey RootSignatureAnalysis::Key;
169171

170-
SmallDenseMap<const Function *, ModuleRootSignature>
172+
SmallDenseMap<const Function *, mcdxbc::RootSignatureDesc>
171173
RootSignatureAnalysis::run(Module &M, ModuleAnalysisManager &AM) {
172174
return analyzeModule(M);
173175
}
174176

175177
//===----------------------------------------------------------------------===//
176178

177-
static void printSpaces(raw_ostream &Stream, unsigned int Count) {
178-
for (unsigned int I = 0; I < Count; ++I) {
179-
Stream << ' ';
180-
}
181-
}
182-
183179
PreservedAnalyses RootSignatureAnalysisPrinter::run(Module &M,
184180
ModuleAnalysisManager &AM) {
185181

186-
SmallDenseMap<const Function *, ModuleRootSignature> &MRSMap =
182+
SmallDenseMap<const Function *, mcdxbc::RootSignatureDesc> &RSDMap =
187183
AM.getResult<RootSignatureAnalysis>(M);
188184
OS << "Root Signature Definitions"
189185
<< "\n";
190186
uint8_t Space = 0;
191-
for (const auto &P : MRSMap) {
192-
const auto &[Function, MRS] = P;
187+
for (const auto &P : RSDMap) {
188+
const auto &[Function, RSD] = P;
193189
OS << "Definition for '" << Function->getName() << "':\n";
194190

195191
// start root signature header
196192
Space++;
197-
printSpaces(OS, Space);
198-
OS << "Flags: " << format_hex(MRS.Flags, 8) << ":\n";
193+
OS << indent(Space) << "Flags: " << format_hex(RSD.Flags, 8) << ":\n";
194+
OS << indent(Space) << "Version: " << RSD.Version << ":\n";
195+
OS << indent(Space) << "NumParameters: " << RSD.NumParameters << ":\n";
196+
OS << indent(Space) << "RootParametersOffset: " << RSD.RootParametersOffset
197+
<< ":\n";
198+
OS << indent(Space) << "NumStaticSamplers: " << RSD.NumStaticSamplers
199+
<< ":\n";
200+
OS << indent(Space) << "StaticSamplersOffset: " << RSD.StaticSamplersOffset
201+
<< ":\n";
199202
Space--;
200203
// end root signature header
201204
}
@@ -205,7 +208,7 @@ PreservedAnalyses RootSignatureAnalysisPrinter::run(Module &M,
205208

206209
//===----------------------------------------------------------------------===//
207210
bool RootSignatureAnalysisWrapper::runOnModule(Module &M) {
208-
MRS = analyzeModule(M);
211+
FuncToRsMap = analyzeModule(M);
209212
return false;
210213
}
211214

0 commit comments

Comments
 (0)