Skip to content

Commit e0612d7

Browse files
committed
remove error classes
1 parent 8284e4d commit e0612d7

File tree

1 file changed

+122
-147
lines changed

1 file changed

+122
-147
lines changed

llvm/include/llvm/Frontend/HLSL/RootSignatureMetadata.h

Lines changed: 122 additions & 147 deletions
Original file line numberDiff line numberDiff line change
@@ -28,164 +28,139 @@ class Metadata;
2828
namespace hlsl {
2929
namespace rootsig {
3030

31-
template <typename T>
32-
class RootSignatureValidationError
33-
: public ErrorInfo<RootSignatureValidationError<T>> {
34-
public:
35-
static char ID;
36-
StringRef ParamName;
37-
T Value;
38-
39-
RootSignatureValidationError(StringRef ParamName, T Value)
40-
: ParamName(ParamName), Value(Value) {}
41-
42-
void log(raw_ostream &OS) const override {
43-
OS << "Invalid value for " << ParamName << ": " << Value;
44-
}
45-
46-
std::error_code convertToErrorCode() const override {
47-
return llvm::inconvertibleErrorCode();
48-
}
31+
enum class ErrorKind {
32+
Validation,
33+
AppendAfterUnboundedRange,
34+
ShaderRegisterOverflow,
35+
OffsetOverflow,
36+
SamplerMixin,
37+
GenericMetadata,
38+
InvalidMetadataFormat,
39+
InvalidMetadataValue
4940
};
5041

51-
class OffsetAppendAfterOverflow : public ErrorInfo<OffsetAppendAfterOverflow> {
52-
public:
53-
static char ID;
54-
dxil::ResourceClass Type;
55-
uint32_t Register;
56-
uint32_t Space;
57-
58-
OffsetAppendAfterOverflow(dxil::ResourceClass Type, uint32_t Register,
59-
uint32_t Space)
60-
: Type(Type), Register(Register), Space(Space) {}
61-
62-
void log(raw_ostream &OS) const override {
63-
OS << "Range " << getResourceClassName(Type) << "(register=" << Register
42+
template <typename T>
43+
void formatImpl(raw_string_ostream &Buff,
44+
std::integral_constant<ErrorKind, ErrorKind::Validation>,
45+
StringRef ParamName, T Value) {
46+
Buff << "Invalid value for: " << ParamName << ":" << Value;
47+
}
48+
49+
void formatImpl(
50+
raw_string_ostream &Buff,
51+
std::integral_constant<ErrorKind, ErrorKind::AppendAfterUnboundedRange>,
52+
dxil::ResourceClass Type, uint32_t Register, uint32_t Space) {
53+
Buff << "Range " << getResourceClassName(Type) << "(register=" << Register
6454
<< ", space=" << Space << ") "
6555
<< "cannot be appended after an unbounded range ";
66-
}
67-
68-
std::error_code convertToErrorCode() const override {
69-
return llvm::inconvertibleErrorCode();
70-
}
71-
};
56+
}
7257

73-
class ShaderRegisterOverflowError
74-
: public ErrorInfo<ShaderRegisterOverflowError> {
75-
public:
76-
static char ID;
77-
dxil::ResourceClass Type;
78-
uint32_t Register;
79-
uint32_t Space;
80-
81-
ShaderRegisterOverflowError(dxil::ResourceClass Type, uint32_t Register,
82-
uint32_t Space)
83-
: Type(Type), Register(Register), Space(Space) {}
84-
85-
void log(raw_ostream &OS) const override {
86-
OS << "Overflow for shader register range: " << getResourceClassName(Type)
58+
void formatImpl(
59+
raw_string_ostream &Buff,
60+
std::integral_constant<ErrorKind, ErrorKind::ShaderRegisterOverflow>,
61+
dxil::ResourceClass Type, uint32_t Register, uint32_t Space) {
62+
Buff << "Overflow for shader register range: " << getResourceClassName(Type)
8763
<< "(register=" << Register << ", space=" << Space << ").";
88-
}
64+
}
8965

90-
std::error_code convertToErrorCode() const override {
91-
return llvm::inconvertibleErrorCode();
92-
}
93-
};
94-
95-
class OffsetOverflowError : public ErrorInfo<OffsetOverflowError> {
96-
public:
97-
static char ID;
98-
dxil::ResourceClass Type;
99-
uint32_t Register;
100-
uint32_t Space;
101-
102-
OffsetOverflowError(dxil::ResourceClass Type, uint32_t Register,
103-
uint32_t Space)
104-
: Type(Type), Register(Register), Space(Space) {}
105-
106-
void log(raw_ostream &OS) const override {
107-
OS << "Offset overflow for descriptor range: " << getResourceClassName(Type)
66+
void formatImpl(raw_string_ostream &Buff,
67+
std::integral_constant<ErrorKind, ErrorKind::OffsetOverflow>,
68+
dxil::ResourceClass Type, uint32_t Register, uint32_t Space) {
69+
Buff << "Offset overflow for descriptor range: " << getResourceClassName(Type)
10870
<< "(register=" << Register << ", space=" << Space << ").";
109-
}
110-
111-
std::error_code convertToErrorCode() const override {
112-
return llvm::inconvertibleErrorCode();
113-
}
114-
};
115-
116-
class TableSamplerMixinError : public ErrorInfo<TableSamplerMixinError> {
117-
public:
118-
static char ID;
119-
dxil::ResourceClass Type;
120-
uint32_t Location;
121-
122-
TableSamplerMixinError(dxil::ResourceClass Type, uint32_t Location)
123-
: Type(Type), Location(Location) {}
71+
}
12472

125-
void log(raw_ostream &OS) const override {
126-
OS << "Samplers cannot be mixed with other "
73+
void formatImpl(raw_string_ostream &Buff,
74+
std::integral_constant<ErrorKind, ErrorKind::SamplerMixin>,
75+
dxil::ResourceClass Type, uint32_t Location) {
76+
Buff << "Samplers cannot be mixed with other "
12777
<< "resource types in a descriptor table, " << getResourceClassName(Type)
12878
<< "(location=" << Location << ")";
129-
}
130-
131-
std::error_code convertToErrorCode() const override {
132-
return llvm::inconvertibleErrorCode();
133-
}
134-
};
135-
136-
class GenericRSMetadataError : public ErrorInfo<GenericRSMetadataError> {
137-
public:
138-
LLVM_ABI static char ID;
139-
StringRef Message;
140-
MDNode *MD;
141-
142-
GenericRSMetadataError(StringRef Message, MDNode *MD)
143-
: Message(Message), MD(MD) {}
144-
145-
void log(raw_ostream &OS) const override {
146-
OS << Message;
147-
if (MD) {
148-
OS << "\n";
149-
MD->printTree(OS);
150-
}
151-
}
152-
153-
std::error_code convertToErrorCode() const override {
154-
return llvm::inconvertibleErrorCode();
155-
}
156-
};
157-
158-
class InvalidRSMetadataFormat : public ErrorInfo<InvalidRSMetadataFormat> {
159-
public:
160-
LLVM_ABI static char ID;
161-
StringRef ElementName;
162-
163-
InvalidRSMetadataFormat(StringRef ElementName) : ElementName(ElementName) {}
164-
165-
void log(raw_ostream &OS) const override {
166-
OS << "Invalid format for " << ElementName;
167-
}
168-
169-
std::error_code convertToErrorCode() const override {
170-
return llvm::inconvertibleErrorCode();
171-
}
172-
};
173-
174-
class InvalidRSMetadataValue : public ErrorInfo<InvalidRSMetadataValue> {
175-
public:
176-
LLVM_ABI static char ID;
177-
StringRef ParamName;
178-
179-
InvalidRSMetadataValue(StringRef ParamName) : ParamName(ParamName) {}
180-
181-
void log(raw_ostream &OS) const override {
182-
OS << "Invalid value for " << ParamName;
183-
}
184-
185-
std::error_code convertToErrorCode() const override {
186-
return llvm::inconvertibleErrorCode();
187-
}
188-
};
79+
}
80+
81+
void formatImpl(
82+
raw_string_ostream &Buff,
83+
std::integral_constant<ErrorKind, ErrorKind::InvalidMetadataFormat>,
84+
StringRef ElementName) {
85+
Buff << "Invalid format for " << ElementName;
86+
}
87+
88+
void formatImpl(
89+
raw_string_ostream &Buff,
90+
std::integral_constant<ErrorKind, ErrorKind::InvalidMetadataValue>,
91+
StringRef ParamName) {
92+
Buff << "Invalid value for " << ParamName;
93+
}
94+
95+
void formatImpl(raw_string_ostream &Buff,
96+
std::integral_constant<ErrorKind, ErrorKind::GenericMetadata>,
97+
StringRef Message, MDNode *MD) {
98+
Buff << Message;
99+
if (MD) {
100+
Buff << "\n";
101+
MD->printTree(Buff);
102+
}
103+
}
104+
105+
template <typename... ArgsTs>
106+
static void formatErrMsg(raw_string_ostream &Buff, ErrorKind Kind,
107+
ArgsTs... Args) {
108+
switch (Kind) {
109+
case ErrorKind::Validation:
110+
formatImpl(Buff, std::integral_constant<ErrorKind, ErrorKind::Validation>{},
111+
Args...);
112+
break;
113+
case ErrorKind::AppendAfterUnboundedRange:
114+
formatImpl(Buff,
115+
std::integral_constant<ErrorKind,
116+
ErrorKind::AppendAfterUnboundedRange>{},
117+
Args...);
118+
break;
119+
case ErrorKind::ShaderRegisterOverflow:
120+
formatImpl(
121+
Buff,
122+
std::integral_constant<ErrorKind, ErrorKind::ShaderRegisterOverflow>{},
123+
Args...);
124+
break;
125+
case ErrorKind::OffsetOverflow:
126+
formatImpl(Buff,
127+
std::integral_constant<ErrorKind, ErrorKind::OffsetOverflow>{},
128+
Args...);
129+
break;
130+
case ErrorKind::SamplerMixin:
131+
formatImpl(Buff,
132+
std::integral_constant<ErrorKind, ErrorKind::SamplerMixin>{},
133+
Args...);
134+
break;
135+
case ErrorKind::GenericMetadata:
136+
formatImpl(Buff,
137+
std::integral_constant<ErrorKind, ErrorKind::GenericMetadata>{},
138+
Args...);
139+
break;
140+
141+
case ErrorKind::InvalidMetadataFormat:
142+
formatImpl(
143+
Buff,
144+
std::integral_constant<ErrorKind, ErrorKind::InvalidMetadataFormat>{},
145+
Args...);
146+
break;
147+
148+
case ErrorKind::InvalidMetadataValue:
149+
formatImpl(
150+
Buff,
151+
std::integral_constant<ErrorKind, ErrorKind::InvalidMetadataValue>{},
152+
Args...);
153+
break;
154+
}
155+
}
156+
157+
template <typename... ArgsTs>
158+
static llvm::Error createRSError(ErrorKind Kind, ArgsTs... Args) {
159+
std::string Msg;
160+
raw_string_ostream Buff(Msg);
161+
formatErrMsg(Buff, Kind, Args...);
162+
return createStringError(std::move(Buff.str()), inconvertibleErrorCode());
163+
}
189164

190165
class MetadataBuilder {
191166
public:

0 commit comments

Comments
 (0)