@@ -118,38 +118,56 @@ static void try_upgrade_shader_stage(std::vector<std::wstring>& arguments, asset
118
118
if (foundShaderStageArgument != arguments.end () && foundShaderStageArgument + 1 != arguments.end ()) {
119
119
auto foundShaderStageArgumentValueIdx = foundShaderStageArgument - arguments.begin () + 1 ;
120
120
std::wstring s = arguments[foundShaderStageArgumentValueIdx];
121
- if (s.length () >= 6 ) {
122
- if (shaderStageOverrideFromPragma != IShader::ESS_UNKNOWN)
123
- {
124
- // replace first 2 characters if shaderStageOverrideFromPragma != Unknown
125
- auto stageStr = ShaderStageToString (shaderStageOverrideFromPragma);
126
- if (!stageStr) {
127
- logger.log (" invalid shader stage %i" , system::ILogger::ELL_ERROR, shaderStageOverrideFromPragma);
128
- return ;
129
- }
130
- s.replace (0 , 2 , stageStr);
131
- }
132
-
133
- std::vector<std::wstring::iterator> underscorePositions = {};
134
- auto it = std::find (s.begin (), s.end (), ' _' );
121
+ if (s.length () >= 6 ) {
122
+ std::vector<std::wstring::iterator> underscorePositions = {};
123
+ auto it = std::find (s.begin (), s.end (), ' _' );
135
124
while (it != s.end ()) {
136
- underscorePositions.push_back (it);
125
+ underscorePositions.push_back (it);
137
126
it = std::find (it + 1 , s.end (), ' _' );
138
127
}
139
- std::wstring majorVersionString, minorVersionString;
140
- int size = underscorePositions.size ();
141
- auto secondLastUnderscore = underscorePositions[size - 2 ];
142
- auto lastUnderscore = underscorePositions[size - 1 ];
143
- majorVersionString = std::wstring (secondLastUnderscore + 1 , lastUnderscore);
144
- minorVersionString = std::wstring (lastUnderscore + 1 , s.end ());
145
-
146
- int major = std::stoi (majorVersionString);
147
- int minor = std::stoi (minorVersionString);
148
- if (major < MajorReqVersion || (major == MajorReqVersion && minor < MinorReqVersion))
149
- {
150
- arguments[foundShaderStageArgumentValueIdx] = std::wstring (s.begin (), secondLastUnderscore + 1 ) + std::to_wstring (MajorReqVersion) + L" _" + std::to_wstring (MinorReqVersion);
151
- }
152
- }
128
+ if (shaderStageOverrideFromPragma != IShader::ESS_UNKNOWN)
129
+ {
130
+ // replace first 2 characters if shaderStageOverrideFromPragma != Unknown
131
+ auto stageStr = ShaderStageToString (shaderStageOverrideFromPragma);
132
+ if (!stageStr) {
133
+ logger.log (" invalid shader stage %i" , system::ILogger::ELL_ERROR, shaderStageOverrideFromPragma);
134
+ return ;
135
+ }
136
+ if (underscorePositions.size () == 0 )
137
+ {
138
+ logger.log (" incorrect format for shader stage parameter, expecting shader stage, underscore, then version" , system::ILogger::ELL_ERROR, shaderStageOverrideFromPragma);
139
+ return ;
140
+ }
141
+ int len = underscorePositions[0 ] - s.begin ();
142
+ s.replace (0 , len, stageStr);
143
+ }
144
+
145
+ std::wstring majorVersionString, minorVersionString;
146
+ int size = underscorePositions.size ();
147
+ auto secondLastUnderscore = underscorePositions[size - 2 ];
148
+ auto lastUnderscore = underscorePositions[size - 1 ];
149
+ majorVersionString = std::wstring (secondLastUnderscore + 1 , lastUnderscore);
150
+ minorVersionString = std::wstring (lastUnderscore + 1 , s.end ());
151
+ try
152
+ {
153
+ int major = std::stoi (majorVersionString);
154
+ int minor = std::stoi (minorVersionString);
155
+ if (major < MajorReqVersion || (major == MajorReqVersion && minor < MinorReqVersion))
156
+ {
157
+ logger.log (" Upgrading shader stage version number to %i %i" , system::ILogger::ELL_DEBUG, MajorReqVersion, MinorReqVersion);
158
+ arguments[foundShaderStageArgumentValueIdx] = std::wstring (s.begin (), secondLastUnderscore + 1 ) + std::to_wstring (MajorReqVersion) + L" _" + std::to_wstring (MinorReqVersion);
159
+ }
160
+ }
161
+ catch (const std::invalid_argument& e) {
162
+ logger.log (" Parsing shader version failed, invalid argument exception: %s" , system::ILogger::ELL_ERROR, e.what ());
163
+ }
164
+ catch (const std::out_of_range& e) {
165
+ logger.log (" Parsing shader version failed, out of range exception: %s" , system::ILogger::ELL_ERROR, e.what ());
166
+ }
167
+ }
168
+ else {
169
+ logger.log (" invalid shader stage '%s' argument, expecting a string of length >= 6 " , system::ILogger::ELL_ERROR, s);
170
+ }
153
171
}
154
172
}
155
173
0 commit comments