Skip to content

Commit 9a7c359

Browse files
author
joaosaffran
committed
changing name
1 parent a38f10b commit 9a7c359

File tree

4 files changed

+74
-112
lines changed

4 files changed

+74
-112
lines changed

llvm/include/llvm/MC/DXContainerRootSignature.h

Lines changed: 28 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -11,139 +11,84 @@
1111
#include "llvm/Support/ErrorHandling.h"
1212
#include <cstddef>
1313
#include <cstdint>
14+
#include <optional>
1415
#include <variant>
1516

1617
namespace llvm {
1718

1819
class raw_ostream;
1920
namespace mcdxbc {
2021

21-
struct RootParameterHeader : public dxbc::RootParameterHeader {
22-
22+
struct RootParameterInfo {
23+
dxbc::RootParameterHeader Header;
2324
size_t Location;
2425

25-
RootParameterHeader() = default;
26+
RootParameterInfo() = default;
2627

27-
RootParameterHeader(dxbc::RootParameterHeader H, size_t L)
28-
: dxbc::RootParameterHeader(H), Location(L) {}
28+
RootParameterInfo(dxbc::RootParameterHeader H, size_t L)
29+
: Header(H), Location(L) {}
2930
};
3031

3132
using RootDescriptor = std::variant<dxbc::RST0::v0::RootDescriptor,
3233
dxbc::RST0::v1::RootDescriptor>;
3334
using ParametersView =
3435
std::variant<dxbc::RootConstants, dxbc::RST0::v0::RootDescriptor,
3536
dxbc::RST0::v1::RootDescriptor>;
36-
struct RootParameter {
37-
SmallVector<RootParameterHeader> Headers;
37+
struct RootParametersContainer {
38+
SmallVector<RootParameterInfo> ParametersInfo;
3839

3940
SmallVector<dxbc::RootConstants> Constants;
4041
SmallVector<RootDescriptor> Descriptors;
4142

42-
void addHeader(dxbc::RootParameterHeader H, size_t L) {
43-
Headers.push_back(RootParameterHeader(H, L));
43+
void addInfo(dxbc::RootParameterHeader H, size_t L) {
44+
ParametersInfo.push_back(RootParameterInfo(H, L));
4445
}
4546

4647
void addParameter(dxbc::RootParameterHeader H, dxbc::RootConstants C) {
47-
addHeader(H, Constants.size());
48+
addInfo(H, Constants.size());
4849
Constants.push_back(C);
4950
}
5051

5152
void addParameter(dxbc::RootParameterHeader H,
5253
dxbc::RST0::v0::RootDescriptor D) {
53-
addHeader(H, Descriptors.size());
54+
addInfo(H, Descriptors.size());
5455
Descriptors.push_back(D);
5556
}
5657

5758
void addParameter(dxbc::RootParameterHeader H,
5859
dxbc::RST0::v1::RootDescriptor D) {
59-
addHeader(H, Descriptors.size());
60+
addInfo(H, Descriptors.size());
6061
Descriptors.push_back(D);
6162
}
6263

63-
ParametersView get(const RootParameterHeader &H) const {
64-
switch (H.ParameterType) {
64+
std::optional<ParametersView> getParameter(const RootParameterInfo *H) const {
65+
switch (H->Header.ParameterType) {
6566
case llvm::to_underlying(dxbc::RootParameterType::Constants32Bit):
66-
return Constants[H.Location];
67+
return Constants[H->Location];
6768
case llvm::to_underlying(dxbc::RootParameterType::CBV):
6869
case llvm::to_underlying(dxbc::RootParameterType::SRV):
6970
case llvm::to_underlying(dxbc::RootParameterType::UAV):
70-
RootDescriptor VersionedParam = Descriptors[H.Location];
71+
RootDescriptor VersionedParam = Descriptors[H->Location];
7172
if (std::holds_alternative<dxbc::RST0::v0::RootDescriptor>(
7273
VersionedParam))
7374
return std::get<dxbc::RST0::v0::RootDescriptor>(VersionedParam);
7475
return std::get<dxbc::RST0::v1::RootDescriptor>(VersionedParam);
7576
}
7677

77-
llvm_unreachable("Unimplemented parameter type");
78+
return std::nullopt;
7879
}
7980

80-
struct iterator {
81-
const RootParameter &Parameters;
82-
SmallVector<RootParameterHeader>::const_iterator Current;
83-
84-
// Changed parameter type to match member variable (removed const)
85-
iterator(const RootParameter &P,
86-
SmallVector<RootParameterHeader>::const_iterator C)
87-
: Parameters(P), Current(C) {}
88-
iterator(const iterator &) = default;
89-
90-
ParametersView operator*() {
91-
ParametersView Val;
92-
switch (Current->ParameterType) {
93-
case llvm::to_underlying(dxbc::RootParameterType::Constants32Bit):
94-
Val = Parameters.Constants[Current->Location];
95-
break;
96-
97-
case llvm::to_underlying(dxbc::RootParameterType::CBV):
98-
case llvm::to_underlying(dxbc::RootParameterType::SRV):
99-
case llvm::to_underlying(dxbc::RootParameterType::UAV):
100-
RootDescriptor VersionedParam =
101-
Parameters.Descriptors[Current->Location];
102-
if (std::holds_alternative<dxbc::RST0::v0::RootDescriptor>(
103-
VersionedParam))
104-
Val = std::get<dxbc::RST0::v0::RootDescriptor>(VersionedParam);
105-
else
106-
Val = std::get<dxbc::RST0::v1::RootDescriptor>(VersionedParam);
107-
break;
108-
}
109-
return Val;
110-
}
111-
112-
iterator operator++() {
113-
Current++;
114-
return *this;
115-
}
116-
117-
iterator operator++(int) {
118-
iterator Tmp = *this;
119-
++*this;
120-
return Tmp;
121-
}
122-
123-
iterator operator--() {
124-
Current--;
125-
return *this;
126-
}
127-
128-
iterator operator--(int) {
129-
iterator Tmp = *this;
130-
--*this;
131-
return Tmp;
132-
}
133-
134-
bool operator==(const iterator I) { return I.Current == Current; }
135-
bool operator!=(const iterator I) { return !(*this == I); }
136-
};
137-
138-
iterator begin() const { return iterator(*this, Headers.begin()); }
81+
size_t size() const { return ParametersInfo.size(); }
13982

140-
iterator end() const { return iterator(*this, Headers.end()); }
141-
142-
size_t size() const { return Headers.size(); }
143-
144-
bool isEmpty() const { return Headers.empty(); }
83+
SmallVector<RootParameterInfo>::const_iterator begin() const {
84+
return ParametersInfo.begin();
85+
}
86+
SmallVector<RootParameterInfo>::const_iterator end() const {
87+
return ParametersInfo.end();
88+
}
14589

146-
llvm::iterator_range<RootParameter::iterator> getAll() const {
90+
llvm::iterator_range<SmallVector<RootParameterInfo>::const_iterator>
91+
getInfo() const {
14792
return llvm::make_range(begin(), end());
14893
}
14994
};
@@ -154,7 +99,7 @@ struct RootSignatureDesc {
15499
uint32_t RootParameterOffset = 0U;
155100
uint32_t StaticSamplersOffset = 0u;
156101
uint32_t NumStaticSamplers = 0u;
157-
mcdxbc::RootParameter Parameters;
102+
mcdxbc::RootParametersContainer ParametersContainer;
158103

159104
void write(raw_ostream &OS) const;
160105

llvm/lib/MC/DXContainerRootSignature.cpp

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,18 @@ static void rewriteOffsetToCurrentByte(raw_svector_ostream &Stream,
3232

3333
size_t RootSignatureDesc::getSize() const {
3434
size_t Size = sizeof(dxbc::RootSignatureHeader) +
35-
Parameters.size() * sizeof(dxbc::RootParameterHeader);
35+
ParametersContainer.size() * sizeof(dxbc::RootParameterHeader);
3636

37-
for (const auto &P : Parameters) {
37+
for (const auto &I : ParametersContainer) {
38+
std::optional<ParametersView> P = ParametersContainer.getParameter(&I);
39+
if (!P)
40+
continue;
3841
std::visit(
3942
[&Size](auto &Value) -> void {
4043
using T = std::decay_t<decltype(Value)>;
4144
Size += sizeof(T);
4245
},
43-
P);
46+
*P);
4447
}
4548

4649
return Size;
@@ -51,7 +54,7 @@ void RootSignatureDesc::write(raw_ostream &OS) const {
5154
raw_svector_ostream BOS(Storage);
5255
BOS.reserveExtraSpace(getSize());
5356

54-
const uint32_t NumParameters = Parameters.size();
57+
const uint32_t NumParameters = ParametersContainer.size();
5558

5659
support::endian::write(BOS, Version, llvm::endianness::little);
5760
support::endian::write(BOS, NumParameters, llvm::endianness::little);
@@ -61,18 +64,22 @@ void RootSignatureDesc::write(raw_ostream &OS) const {
6164
support::endian::write(BOS, Flags, llvm::endianness::little);
6265

6366
SmallVector<uint32_t> ParamsOffsets;
64-
for (const auto &P : Parameters.Headers) {
65-
support::endian::write(BOS, P.ParameterType, llvm::endianness::little);
66-
support::endian::write(BOS, P.ShaderVisibility, llvm::endianness::little);
67+
for (const auto &P : ParametersContainer) {
68+
support::endian::write(BOS, P.Header.ParameterType,
69+
llvm::endianness::little);
70+
support::endian::write(BOS, P.Header.ShaderVisibility,
71+
llvm::endianness::little);
6772

6873
ParamsOffsets.push_back(writePlaceholder(BOS));
6974
}
7075

7176
assert(NumParameters == ParamsOffsets.size());
72-
auto P = Parameters.begin();
73-
for (size_t I = 0; I < NumParameters; ++I, P++) {
77+
const RootParameterInfo *H = ParametersContainer.begin();
78+
for (size_t I = 0; I < NumParameters; ++I, H++) {
7479
rewriteOffsetToCurrentByte(BOS, ParamsOffsets[I]);
75-
80+
auto P = ParametersContainer.getParameter(H);
81+
if (!P)
82+
continue;
7683
if (std::holds_alternative<dxbc::RootConstants>(*P)) {
7784
auto Constants = std::get<dxbc::RootConstants>(*P);
7885
support::endian::write(BOS, Constants.ShaderRegister,

llvm/lib/ObjectYAML/DXContainerEmitter.cpp

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -283,21 +283,26 @@ void DXContainerWriter::writeParts(raw_ostream &OS) {
283283
Constants.Num32BitValues = Param.Constants.Num32BitValues;
284284
Constants.RegisterSpace = Param.Constants.RegisterSpace;
285285
Constants.ShaderRegister = Param.Constants.ShaderRegister;
286-
RS.Parameters.addParameter(Header, Constants);
286+
RS.ParametersContainer.addParameter(Header, Constants);
287287
break;
288288
case llvm::to_underlying(dxbc::RootParameterType::SRV):
289289
case llvm::to_underlying(dxbc::RootParameterType::UAV):
290290
case llvm::to_underlying(dxbc::RootParameterType::CBV):
291-
dxbc::RST0::v1::RootDescriptor Descriptor;
292-
Descriptor.RegisterSpace = Param.Descriptor.RegisterSpace;
293-
Descriptor.ShaderRegister = Param.Descriptor.ShaderRegister;
294-
if (P.RootSignature->Version > 1)
291+
if (RS.Version == 1) {
292+
dxbc::RST0::v0::RootDescriptor Descriptor;
293+
Descriptor.RegisterSpace = Param.Descriptor.RegisterSpace;
294+
Descriptor.ShaderRegister = Param.Descriptor.ShaderRegister;
295+
RS.ParametersContainer.addParameter(Header, Descriptor);
296+
} else {
297+
dxbc::RST0::v1::RootDescriptor Descriptor;
298+
Descriptor.RegisterSpace = Param.Descriptor.RegisterSpace;
299+
Descriptor.ShaderRegister = Param.Descriptor.ShaderRegister;
295300
Descriptor.Flags = Param.Descriptor.getEncodedFlags();
296-
RS.Parameters.addParameter(Header, Descriptor);
301+
RS.ParametersContainer.addParameter(Header, Descriptor);
297302
break;
298303
default:
299304
// Handling invalid parameter type edge case
300-
RS.Parameters.addHeader(Header, -1);
305+
RS.ParametersContainer.addInfo(Header, -1);
301306
}
302307
}
303308

llvm/lib/Target/DirectX/DXILRootSignature.cpp

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ static bool parseRootConstants(LLVMContext *Ctx, mcdxbc::RootSignatureDesc &RSD,
101101
else
102102
return reportError(Ctx, "Invalid value for Num32BitValues");
103103

104-
RSD.Parameters.addParameter(Header, Constants);
104+
RSD.ParametersContainer.addParameter(Header, Constants);
105105

106106
return false;
107107
}
@@ -166,11 +166,12 @@ static bool validate(LLVMContext *Ctx, const mcdxbc::RootSignatureDesc &RSD) {
166166
return reportValueError(Ctx, "RootFlags", RSD.Flags);
167167
}
168168

169-
for (const mcdxbc::RootParameterHeader &Header : RSD.Parameters.Headers) {
170-
if (!dxbc::isValidShaderVisibility(Header.ShaderVisibility))
171-
return reportValueError(Ctx, "ShaderVisibility", Header.ShaderVisibility);
169+
for (const llvm::mcdxbc::RootParameterInfo &Info : RSD.ParametersContainer) {
170+
if (!dxbc::isValidShaderVisibility(Info.Header.ShaderVisibility))
171+
return reportValueError(Ctx, "ShaderVisibility",
172+
Info.Header.ShaderVisibility);
172173

173-
assert(dxbc::isValidParameterType(Header.ParameterType) &&
174+
assert(dxbc::isValidParameterType(Info.Header.ParameterType) &&
174175
"Invalid value for ParameterType");
175176
}
176177

@@ -288,16 +289,20 @@ PreservedAnalyses RootSignatureAnalysisPrinter::run(Module &M,
288289
OS << indent(Space) << "Version: " << RS.Version << "\n";
289290
OS << indent(Space) << "RootParametersOffset: " << RS.RootParameterOffset
290291
<< "\n";
291-
OS << indent(Space) << "NumParameters: " << RS.Parameters.size() << "\n";
292+
OS << indent(Space) << "NumParameters: " << RS.ParametersContainer.size()
293+
<< "\n";
292294
Space++;
293-
for (auto const &Header : RS.Parameters.Headers) {
294-
OS << indent(Space) << "- Parameter Type: " << Header.ParameterType
295+
for (auto const &Info : RS.ParametersContainer) {
296+
OS << indent(Space) << "- Parameter Type: " << Info.Header.ParameterType
295297
<< "\n";
296298
OS << indent(Space + 2)
297-
<< "Shader Visibility: " << Header.ShaderVisibility << "\n";
298-
mcdxbc::ParametersView P = RS.Parameters.get(Header);
299-
if (std::holds_alternative<dxbc::RootConstants>(P)) {
300-
auto Constants = std::get<dxbc::RootConstants>(P);
299+
<< "Shader Visibility: " << Info.Header.ShaderVisibility << "\n";
300+
std::optional<mcdxbc::ParametersView> P =
301+
RS.ParametersContainer.getParameter(&Info);
302+
if (!P)
303+
continue;
304+
if (std::holds_alternative<dxbc::RootConstants>(*P)) {
305+
auto Constants = std::get<dxbc::RootConstants>(*P);
301306
OS << indent(Space + 2) << "Register Space: " << Constants.RegisterSpace
302307
<< "\n";
303308
OS << indent(Space + 2)

0 commit comments

Comments
 (0)