@@ -66,48 +66,15 @@ bool isLegalShaderModel(Triple &T) {
66
66
return false ;
67
67
}
68
68
69
- struct ShaderModel {
70
- StringRef TargetKind;
71
- unsigned Major;
72
- unsigned Minor;
73
- bool OfflineLibMinor = false ;
74
- };
75
-
76
- std::optional<ShaderModel> GetShaderModelFromString (StringRef Profile) {
69
+ std::optional<std::string> tryParseProfile (StringRef Profile) {
70
+ // [ps|vs|gs|hs|ds|cs|ms|as]_[major]_[minor]
77
71
SmallVector<StringRef, 3 > Parts;
78
72
Profile.split (Parts, " _" );
79
73
if (Parts.size () != 3 )
80
74
return std::nullopt;
81
75
82
- unsigned long long Major = 0 ;
83
- if (llvm::getAsUnsignedInteger (Parts[1 ], 0 , Major))
84
- return std::nullopt;
85
-
86
- unsigned long long Minor = 0 ;
87
- bool isOfflineLibMinor = false ;
88
- if (Parts[0 ] == " lib" && Parts[2 ] == " x" )
89
- isOfflineLibMinor = true ;
90
- else if (llvm::getAsUnsignedInteger (Parts[2 ], 0 , Minor))
91
- return std::nullopt;
92
-
93
- ShaderModel ret;
94
- ret.TargetKind = Parts[0 ];
95
- ret.Major = Major;
96
- ret.Minor = Minor;
97
- ret.OfflineLibMinor = isOfflineLibMinor;
98
-
99
- return ret;
100
- }
101
-
102
- std::optional<std::string> tryParseProfile (StringRef Profile) {
103
- std::optional<ShaderModel> SM = GetShaderModelFromString (Profile);
104
- if (!SM.has_value ()) {
105
- return std::nullopt;
106
- }
107
- // [ps|vs|gs|hs|ds|cs|ms|as]_[major]_[minor]
108
-
109
76
Triple::EnvironmentType Kind =
110
- StringSwitch<Triple::EnvironmentType>(SM. value (). TargetKind )
77
+ StringSwitch<Triple::EnvironmentType>(Parts[ 0 ] )
111
78
.Case (" ps" , Triple::EnvironmentType::Pixel)
112
79
.Case (" vs" , Triple::EnvironmentType::Vertex)
113
80
.Case (" gs" , Triple::EnvironmentType::Geometry)
@@ -121,11 +88,21 @@ std::optional<std::string> tryParseProfile(StringRef Profile) {
121
88
if (Kind == Triple::EnvironmentType::UnknownEnvironment)
122
89
return std::nullopt;
123
90
91
+ unsigned long long Major = 0 ;
92
+ if (llvm::getAsUnsignedInteger (Parts[1 ], 0 , Major))
93
+ return std::nullopt;
94
+
95
+ unsigned long long Minor = 0 ;
96
+ if (Parts[2 ] == " x" && Kind == Triple::EnvironmentType::Library)
97
+ Minor = OfflineLibMinor;
98
+ else if (llvm::getAsUnsignedInteger (Parts[2 ], 0 , Minor))
99
+ return std::nullopt;
100
+
124
101
// dxil-unknown-shadermodel-hull
125
102
llvm::Triple T;
126
103
T.setArch (Triple::ArchType::dxil);
127
104
T.setOSName (Triple::getOSTypeName (Triple::OSType::ShaderModel).str () +
128
- VersionTuple (SM. value (). Major , SM. value (). Minor ).getAsString ());
105
+ VersionTuple (Major, Minor).getAsString ());
129
106
T.setEnvironment (Kind);
130
107
if (isLegalShaderModel (T))
131
108
return T.getTriple ();
@@ -279,43 +256,6 @@ HLSLToolChain::TranslateArgs(const DerivedArgList &Args, StringRef BoundArch,
279
256
DAL->AddJoinedArg (nullptr , Opts.getOption (options::OPT_O), " 3" );
280
257
}
281
258
282
- if (DAL->hasArg (options::OPT_fnative_half_type)) {
283
-
284
- bool HVArgIsValid = true ;
285
- bool TPArgIsValid = true ;
286
-
287
- const StringRef HVArg =
288
- DAL->getLastArgValue (options::OPT_std_EQ, " hlsl2021" );
289
-
290
- const StringRef TPArg =
291
- DAL->getLastArgValue (options::OPT_target_profile, " " );
292
- std::optional<ShaderModel> parsedTargetProfile =
293
- GetShaderModelFromString (TPArg);
294
-
295
- unsigned long long HV_year;
296
- StringRef HV_year_str = HVArg.drop_front (4 );
297
- if (HV_year_str != " 202x" ) {
298
- llvm::getAsUnsignedInteger (HV_year_str, 0 , HV_year);
299
- if (HV_year < 2021 )
300
- HVArgIsValid = false ;
301
- }
302
-
303
- if (!parsedTargetProfile.has_value ())
304
- // This should be unreachable, target profile validation happens
305
- // before this point.
306
- return DAL;
307
- else {
308
- if (parsedTargetProfile.value ().Major < 6 ||
309
- (parsedTargetProfile.value ().Major == 6 &&
310
- parsedTargetProfile.value ().Minor < 2 ))
311
- TPArgIsValid = false ;
312
- }
313
-
314
- // if the HLSL Version is not at least 2021, or the shader model is not at
315
- // least 6.2, then enable-16bit-types is an invalid flag.
316
- if (!(HVArgIsValid && TPArgIsValid))
317
- getDriver ().Diag (diag::err_drv_hlsl_enable_16bit_types_option_invalid);
318
- }
319
259
return DAL;
320
260
}
321
261
0 commit comments