Skip to content

Commit 5423aba

Browse files
author
joaosaffran
committed
format
1 parent 5ccb842 commit 5423aba

File tree

2 files changed

+64
-54
lines changed

2 files changed

+64
-54
lines changed

llvm/lib/Target/DirectX/DXILPostOptimizationValidation.cpp

Lines changed: 29 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -130,19 +130,21 @@ static uint32_t parameterToRangeType(uint32_t Type) {
130130
switch (Type) {
131131
case llvm::to_underlying(dxbc::RootParameterType::CBV):
132132
return llvm::to_underlying(dxbc::DescriptorRangeType::CBV);
133-
break;
133+
break;
134134
case llvm::to_underlying(dxbc::RootParameterType::SRV):
135-
return llvm::to_underlying(dxbc::DescriptorRangeType::SRV);
136-
break;
135+
return llvm::to_underlying(dxbc::DescriptorRangeType::SRV);
136+
break;
137137
case llvm::to_underlying(dxbc::RootParameterType::UAV):
138-
return llvm::to_underlying(dxbc::DescriptorRangeType::UAV);
139-
break;
138+
return llvm::to_underlying(dxbc::DescriptorRangeType::UAV);
139+
break;
140140
default:
141141
llvm_unreachable("Root Parameter Type has no Range Type equivalent");
142142
}
143143
}
144144

145-
static RootSignatureBindingValidation initRsBindingValdation(const mcdxbc::RootSignatureDesc &RSD, dxbc::ShaderVisibility Visibility) {
145+
static RootSignatureBindingValidation
146+
initRsBindingValdation(const mcdxbc::RootSignatureDesc &RSD,
147+
dxbc::ShaderVisibility Visibility) {
146148

147149
RootSignatureBindingValidation Validation;
148150

@@ -152,10 +154,10 @@ static RootSignatureBindingValidation initRsBindingValdation(const mcdxbc::RootS
152154

153155
const auto &Header = RSD.ParametersContainer.getHeader(I);
154156
if (Header.ShaderVisibility !=
155-
llvm::to_underlying(dxbc::ShaderVisibility::All) &&
156-
Header.ShaderVisibility != llvm::to_underlying(Visibility))
157-
continue;
158-
157+
llvm::to_underlying(dxbc::ShaderVisibility::All) &&
158+
Header.ShaderVisibility != llvm::to_underlying(Visibility))
159+
continue;
160+
159161
switch (Type) {
160162
case llvm::to_underlying(dxbc::RootParameterType::SRV):
161163
case llvm::to_underlying(dxbc::RootParameterType::UAV):
@@ -167,7 +169,7 @@ static RootSignatureBindingValidation initRsBindingValdation(const mcdxbc::RootS
167169
Binding.LowerBound = Desc.ShaderRegister;
168170
Binding.Space = Desc.RegisterSpace;
169171
Binding.Size = 1;
170-
172+
171173
Validation.addBinding(parameterToRangeType(Type), Binding);
172174
break;
173175
}
@@ -176,11 +178,11 @@ static RootSignatureBindingValidation initRsBindingValdation(const mcdxbc::RootS
176178
RSD.ParametersContainer.getDescriptorTable(Loc);
177179

178180
for (const dxbc::RTS0::v2::DescriptorRange &Range : Table.Ranges) {
179-
llvm::dxil::ResourceInfo::ResourceBinding Binding;
180-
Binding.LowerBound = Range.BaseShaderRegister;
181-
Binding.Space = Range.RegisterSpace;
182-
Binding.Size = Range.NumDescriptors;
183-
Validation.addBinding(Range.RangeType, Binding);
181+
llvm::dxil::ResourceInfo::ResourceBinding Binding;
182+
Binding.LowerBound = Range.BaseShaderRegister;
183+
Binding.Space = Range.RegisterSpace;
184+
Binding.Size = Range.NumDescriptors;
185+
Validation.addBinding(Range.RangeType, Binding);
184186
}
185187
break;
186188
}
@@ -238,17 +240,23 @@ static void reportErrors(Module &M, DXILResourceMap &DRM,
238240

239241
if (auto RSD = getRootSignature(RSBI, MMI)) {
240242

241-
RootSignatureBindingValidation Validation = initRsBindingValdation(*RSD, tripleToVisibility(MMI.ShaderProfile));
243+
RootSignatureBindingValidation Validation =
244+
initRsBindingValdation(*RSD, tripleToVisibility(MMI.ShaderProfile));
242245

243246
auto Cbufs = DRM.cbuffers();
244247
auto SRVs = DRM.srvs();
245248
auto UAVs = DRM.uavs();
246249
auto Samplers = DRM.samplers();
247250

248-
reportUnboundRegisters(M, Validation.getBindingsOfType(dxbc::DescriptorRangeType::CBV), Cbufs);
249-
reportUnboundRegisters(M, Validation.getBindingsOfType(dxbc::DescriptorRangeType::UAV), UAVs);
250-
reportUnboundRegisters(M, Validation.getBindingsOfType(dxbc::DescriptorRangeType::Sampler), Samplers);
251-
reportUnboundRegisters(M, Validation.getBindingsOfType(dxbc::DescriptorRangeType::SRV), SRVs);
251+
reportUnboundRegisters(
252+
M, Validation.getBindingsOfType(dxbc::DescriptorRangeType::CBV), Cbufs);
253+
reportUnboundRegisters(
254+
M, Validation.getBindingsOfType(dxbc::DescriptorRangeType::UAV), UAVs);
255+
reportUnboundRegisters(
256+
M, Validation.getBindingsOfType(dxbc::DescriptorRangeType::Sampler),
257+
Samplers);
258+
reportUnboundRegisters(
259+
M, Validation.getBindingsOfType(dxbc::DescriptorRangeType::SRV), SRVs);
252260
}
253261
}
254262
} // namespace

llvm/lib/Target/DirectX/DXILPostOptimizationValidation.h

Lines changed: 35 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -26,44 +26,46 @@ namespace llvm {
2626

2727
class RootSignatureBindingValidation {
2828
private:
29-
llvm::SmallVector<dxil::ResourceInfo::ResourceBinding, 16> Bindings;
30-
struct TypeRange {
31-
uint32_t Start;
32-
uint32_t End;
33-
};
34-
std::unordered_map<uint32_t, TypeRange> Ranges;
29+
llvm::SmallVector<dxil::ResourceInfo::ResourceBinding, 16> Bindings;
30+
struct TypeRange {
31+
uint32_t Start;
32+
uint32_t End;
33+
};
34+
std::unordered_map<uint32_t, TypeRange> Ranges;
3535

3636
public:
37-
void addBinding(const uint32_t& Type, const dxil::ResourceInfo::ResourceBinding& Binding) {
38-
auto It = Ranges.find(Type);
39-
40-
if (It == Ranges.end()) {
41-
uint32_t InsertPos = Bindings.size();
42-
Bindings.push_back(Binding);
43-
Ranges[Type] = {InsertPos, InsertPos + 1};
44-
} else {
45-
uint32_t InsertPos = It->second.End;
46-
Bindings.insert(Bindings.begin() + InsertPos, Binding);
47-
48-
It->second.End++;
49-
50-
for (auto& [type, range] : Ranges) {
51-
if (range.Start > InsertPos) {
52-
range.Start++;
53-
range.End++;
54-
}
55-
}
37+
void addBinding(const uint32_t &Type,
38+
const dxil::ResourceInfo::ResourceBinding &Binding) {
39+
auto It = Ranges.find(Type);
40+
41+
if (It == Ranges.end()) {
42+
uint32_t InsertPos = Bindings.size();
43+
Bindings.push_back(Binding);
44+
Ranges[Type] = {InsertPos, InsertPos + 1};
45+
} else {
46+
uint32_t InsertPos = It->second.End;
47+
Bindings.insert(Bindings.begin() + InsertPos, Binding);
48+
49+
It->second.End++;
50+
51+
for (auto &[type, range] : Ranges) {
52+
if (range.Start > InsertPos) {
53+
range.Start++;
54+
range.End++;
5655
}
56+
}
5757
}
58-
59-
llvm::ArrayRef<dxil::ResourceInfo::ResourceBinding> getBindingsOfType(const dxbc::DescriptorRangeType& Type) const {
60-
auto It = Ranges.find(llvm::to_underlying(Type));
61-
if (It == Ranges.end()) {
62-
return {};
63-
}
64-
return llvm::ArrayRef<dxil::ResourceInfo::ResourceBinding>(Bindings.data() + It->second.Start,
65-
It->second.End - It->second.Start);
58+
}
59+
60+
llvm::ArrayRef<dxil::ResourceInfo::ResourceBinding>
61+
getBindingsOfType(const dxbc::DescriptorRangeType &Type) const {
62+
auto It = Ranges.find(llvm::to_underlying(Type));
63+
if (It == Ranges.end()) {
64+
return {};
6665
}
66+
return llvm::ArrayRef<dxil::ResourceInfo::ResourceBinding>(
67+
Bindings.data() + It->second.Start, It->second.End - It->second.Start);
68+
}
6769
};
6870

6971
class DXILPostOptimizationValidation

0 commit comments

Comments
 (0)