Skip to content

Commit 5b392b7

Browse files
committed
added try catch to stoi and more error logs to upgrading shader stage
Commented out the debug code too
1 parent 366ff52 commit 5b392b7

File tree

2 files changed

+53
-35
lines changed

2 files changed

+53
-35
lines changed

src/nbl/asset/utils/CHLSLCompiler.cpp

Lines changed: 47 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -118,38 +118,56 @@ static void try_upgrade_shader_stage(std::vector<std::wstring>& arguments, asset
118118
if (foundShaderStageArgument != arguments.end() && foundShaderStageArgument + 1 != arguments.end()) {
119119
auto foundShaderStageArgumentValueIdx = foundShaderStageArgument - arguments.begin() + 1;
120120
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(), '_');
135124
while (it != s.end()) {
136-
underscorePositions.push_back(it);
125+
underscorePositions.push_back(it);
137126
it = std::find(it + 1, s.end(), '_');
138127
}
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+
}
153171
}
154172
}
155173

tools/nsc/main.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,12 @@ class ShaderCompiler final : public system::IApplicationFramework
2929

3030
auto argc = argv.size();
3131

32-
#ifndef NBL_DEBUG
33-
std::string str = argv[0];
34-
for (auto i=1; i<argc; i++)
35-
str += "\n"+argv[i];
36-
m_logger->log("Arguments Receive: %s", ILogger::ELL_DEBUG, str.c_str());
37-
#endif
32+
//#ifndef NBL_DEBUG
33+
// std::string str = argv[0];
34+
// for (auto i=1; i<argc; i++)
35+
// str += "\n"+argv[i];
36+
// m_logger->log("Arguments Receive: %s", ILogger::ELL_DEBUG, str.c_str());
37+
//#endif
3838

3939
// expect the first argument to be nsc.exe
4040
// second argument should be input: filename of a shader to compile

0 commit comments

Comments
 (0)