Skip to content

Commit fd2d804

Browse files
committed
try_upgrade_shader_stage fix
1 parent 574ff45 commit fd2d804

File tree

1 file changed

+40
-24
lines changed

1 file changed

+40
-24
lines changed

src/nbl/asset/utils/CHLSLCompiler.cpp

Lines changed: 40 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -109,30 +109,46 @@ static void try_upgrade_hlsl_version(std::vector<std::wstring>& arguments, syste
109109
}
110110

111111

112-
static void try_upgrade_shader_stage(std::vector<std::wstring> &arguments, asset::IShader::E_SHADER_STAGE shaderStageOverrideFromPragma, system::logger_opt_ptr& logger) {
113-
auto foundShaderStageArgument = std::find(arguments.begin(), arguments.end(), L"-T");
114-
if (foundShaderStageArgument != arguments.end()) {
115-
auto foundShaderStageArgumentValueIdx = foundShaderStageArgument - arguments.begin() + 1;
116-
std::wstring s = arguments[foundShaderStageArgumentValueIdx];
117-
if (s.length() >= 6) {
118-
//TODO replace first 2 if shaderStageOverrideFromPragma != Unknown
119-
120-
//TODO fix this parsing in case 6_10 gets released
121-
//Even though they could name it 7_0 at that point
122-
123-
auto it = std::find(s.begin(), s.end(), '_');
124-
while (it != s.end())
125-
{
126-
127-
}
128-
/* int argument_version = (targetProfile[3] - '0') * 10 + (targetProfile[5] - '0');
129-
if (argument_version < 67)
130-
{
131-
targetProfile.replace(3, 3, L"6_7");
132-
arguments[foundShaderStageArgumentValueIdx] = targetProfile;
133-
}*/
134-
}
135-
}
112+
static void try_upgrade_shader_stage(std::vector<std::wstring>& arguments, asset::IShader::E_SHADER_STAGE shaderStageOverrideFromPragma, system::logger_opt_ptr& logger) {
113+
114+
constexpr int MajorReqVersion = 6,
115+
MinorReqVersion = 7;
116+
117+
auto foundShaderStageArgument = std::find(arguments.begin(), arguments.end(), L"-T");
118+
if (foundShaderStageArgument != arguments.end() && foundShaderStageArgument + 1 != arguments.end()) {
119+
auto foundShaderStageArgumentValueIdx = foundShaderStageArgument - arguments.begin() + 1;
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(), '_');
135+
while (it != s.end())
136+
underscorePositions.push_back(it);
137+
std::wstring majorVersionString, minorVersionString;
138+
int size = underscorePositions.size();
139+
auto secondLastUnderscore = underscorePositions[size - 2];
140+
auto lastUnderscore = underscorePositions[size - 1];
141+
majorVersionString = std::wstring(secondLastUnderscore + 1, lastUnderscore);
142+
minorVersionString = std::wstring(lastUnderscore + 1, s.end());
143+
144+
int major = std::stoi(majorVersionString);
145+
int minor = std::stoi(minorVersionString);
146+
if (major < MajorReqVersion || (major == MajorReqVersion && minor < MinorReqVersion))
147+
{
148+
arguments[foundShaderStageArgumentValueIdx] = std::wstring(s.begin(), secondLastUnderscore + 1) + std::to_wstring(MajorReqVersion) + L"_" + std::to_wstring(MinorReqVersion);
149+
}
150+
}
151+
}
136152
}
137153

138154

0 commit comments

Comments
 (0)