@@ -23,10 +23,26 @@ namespace {
23
23
24
24
const unsigned OfflineLibMinor = 0xF ;
25
25
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
+
26
34
bool isLegalShaderModel (Triple &T) {
27
35
if (T.getOS () != Triple::OSType::ShaderModel)
28
36
return false ;
29
37
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
+
30
46
auto Kind = T.getEnvironment ();
31
47
32
48
switch (Kind) {
@@ -37,69 +53,29 @@ bool isLegalShaderModel(Triple &T) {
37
53
case Triple::EnvironmentType::Domain:
38
54
case Triple::EnvironmentType::Geometry:
39
55
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 ;
76
64
} 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 ;
97
76
} break ;
98
- default :
99
- return false ;
100
77
}
101
-
102
- return true ;
78
+ return false ;
103
79
}
104
80
105
81
std::string tryParseProfile (StringRef Profile) {
0 commit comments