Skip to content

Commit 12984dd

Browse files
author
Xiang Li
committed
Code claneup for isLegalShaderMode.
1 parent 6c53c95 commit 12984dd

File tree

1 file changed

+36
-60
lines changed

1 file changed

+36
-60
lines changed

clang/lib/Driver/ToolChains/HLSL.cpp

Lines changed: 36 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,26 @@ namespace {
2323

2424
const unsigned OfflineLibMinor = 0xF;
2525
const unsigned MaxShaderModel6Minor = 7;
26+
27+
bool isLegalVersion(VersionTuple Version, unsigned Major, unsigned MinMinor,
28+
unsigned MaxMinor) {
29+
VersionTuple Min(Major, MinMinor);
30+
VersionTuple Max(Major, MaxMinor);
31+
return Min <= Version && Version <= Max;
32+
}
33+
2634
bool isLegalShaderModel(Triple &T) {
2735
if (T.getOS() != Triple::OSType::ShaderModel)
2836
return false;
2937

38+
auto Version = T.getOSVersion();
39+
if (Version.getBuild())
40+
return false;
41+
if (Version.getSubminor())
42+
return false;
43+
if (!Version.getMinor())
44+
return false;
45+
3046
auto Kind = T.getEnvironment();
3147

3248
switch (Kind) {
@@ -37,69 +53,29 @@ bool isLegalShaderModel(Triple &T) {
3753
case Triple::EnvironmentType::Domain:
3854
case Triple::EnvironmentType::Geometry:
3955
case Triple::EnvironmentType::Pixel:
40-
case Triple::EnvironmentType::Compute:
41-
case Triple::EnvironmentType::Library:
42-
case Triple::EnvironmentType::Amplification:
43-
case Triple::EnvironmentType::Mesh:
44-
break;
45-
}
46-
47-
auto Version = T.getOSVersion();
48-
if (Version.getBuild())
49-
return false;
50-
if (Version.getSubminor())
51-
return false;
52-
53-
auto OMinor = Version.getMinor();
54-
if (!OMinor.hasValue())
55-
return false;
56-
57-
unsigned Minor = OMinor.getValue();
58-
unsigned Major = Version.getMajor();
59-
60-
switch (Major) {
61-
case 4:
62-
case 5: {
63-
switch (Minor) {
64-
case 0:
65-
case 1:
66-
switch (Kind) {
67-
case Triple::EnvironmentType::Vertex:
68-
break;
69-
default:
70-
return false;
71-
}
72-
break;
73-
default:
74-
return false;
75-
}
56+
case Triple::EnvironmentType::Compute: {
57+
if (isLegalVersion(Version, 4, 0, 1))
58+
return true;
59+
if (isLegalVersion(Version, 5, 0, 1))
60+
return true;
61+
62+
if (isLegalVersion(Version, 6, 0, MaxShaderModel6Minor))
63+
return true;
7664
} break;
77-
case 6: {
78-
switch (Kind) {
79-
default:
80-
break;
81-
case Triple::EnvironmentType::Library: {
82-
if (Minor < 3)
83-
return false;
84-
} break;
85-
case Triple::EnvironmentType::Amplification:
86-
case Triple::EnvironmentType::Mesh: {
87-
if (Minor < 5)
88-
return false;
89-
} break;
90-
}
91-
if (Minor == OfflineLibMinor) {
92-
if (Kind != Triple::EnvironmentType::Library)
93-
return false;
94-
} else if (Minor > MaxShaderModel6Minor) {
95-
return false;
96-
}
65+
case Triple::EnvironmentType::Library: {
66+
VersionTuple SM6x(6, OfflineLibMinor);
67+
if (Version == SM6x)
68+
return true;
69+
if (isLegalVersion(Version, 6, 3, MaxShaderModel6Minor))
70+
return true;
71+
} break;
72+
case Triple::EnvironmentType::Amplification:
73+
case Triple::EnvironmentType::Mesh: {
74+
if (isLegalVersion(Version, 6, 5, MaxShaderModel6Minor))
75+
return true;
9776
} break;
98-
default:
99-
return false;
10077
}
101-
102-
return true;
78+
return false;
10379
}
10480

10581
std::string tryParseProfile(StringRef Profile) {

0 commit comments

Comments
 (0)