Skip to content

Commit b0131d7

Browse files
committed
DLL issue still persists, define.h has missing stuff
1 parent c5d0d29 commit b0131d7

File tree

1 file changed

+42
-16
lines changed

1 file changed

+42
-16
lines changed

src/nbl/asset/utils/CHLSLCompiler.cpp

Lines changed: 42 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -113,36 +113,41 @@ static void try_upgrade_shader_stage(std::vector<std::wstring>& arguments, asset
113113

114114
constexpr int MajorReqVersion = 6,
115115
MinorReqVersion = 7;
116-
116+
auto overrideStageStr = ShaderStageToString(shaderStageOverrideFromPragma);
117117
auto foundShaderStageArgument = std::find(arguments.begin(), arguments.end(), L"-T");
118118
if (foundShaderStageArgument != arguments.end() && foundShaderStageArgument + 1 != arguments.end()) {
119119
auto foundShaderStageArgumentValueIdx = foundShaderStageArgument - arguments.begin() + 1;
120120
std::wstring s = arguments[foundShaderStageArgumentValueIdx];
121121
if (s.length() >= 6) {
122+
std::wstring stageStr, majorVersionString, minorVersionString;
122123
std::vector<std::wstring::iterator> underscorePositions = {};
123124
auto it = std::find(s.begin(), s.end(), '_');
124125
while (it != s.end()) {
125126
underscorePositions.push_back(it);
126127
it = std::find(it + 1, s.end(), '_');
127128
}
128-
if (shaderStageOverrideFromPragma != IShader::ESS_UNKNOWN)
129+
130+
// Bad input check
131+
if (underscorePositions.size() < 2)
129132
{
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);
133+
logger.log("Incorrect -T argument value.\nExpecting string with at least 2 '_' delimiters: between shader stage, version major and version minor.",
134+
system::ILogger::ELL_ERROR);
135+
return;
136+
}
137+
138+
// Stage
139+
stageStr = std::wstring(s.begin(), underscorePositions[0]);
140+
if (shaderStageOverrideFromPragma != IShader::ESS_UNKNOWN) // replace first 2 characters if shaderStageOverrideFromPragma != Unknown
141+
{
142+
if (!overrideStageStr) {
143+
logger.log("Invalid shader stage with int value '%i'.\nThis value does not have a known string representation.",
144+
system::ILogger::ELL_ERROR, shaderStageOverrideFromPragma);
139145
return;
140146
}
141-
int len = underscorePositions[0] - s.begin();
142-
s.replace(0, len, stageStr);
147+
stageStr = std::wstring(overrideStageStr);
143148
}
144149

145-
std::wstring majorVersionString, minorVersionString;
150+
// Version
146151
int size = underscorePositions.size();
147152
auto secondLastUnderscore = underscorePositions[size - 2];
148153
auto lastUnderscore = underscorePositions[size - 1];
@@ -152,23 +157,44 @@ static void try_upgrade_shader_stage(std::vector<std::wstring>& arguments, asset
152157
{
153158
int major = std::stoi(majorVersionString);
154159
int minor = std::stoi(minorVersionString);
155-
if (major < MajorReqVersion || (major == MajorReqVersion && minor < MinorReqVersion))
160+
if (major < MajorReqVersion || (major == MajorReqVersion && minor < MinorReqVersion))
156161
{
162+
// Overwrite the version
157163
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);
164+
arguments[foundShaderStageArgumentValueIdx] = stageStr + L"_" + std::to_wstring(MajorReqVersion) + L"_" + std::to_wstring(MinorReqVersion);
165+
}
166+
else
167+
{
168+
// keep the version as it was
169+
arguments[foundShaderStageArgumentValueIdx] = stageStr + L"_" + majorVersionString + L"_" + minorVersionString;
159170
}
171+
return;
160172
}
161173
catch (const std::invalid_argument& e) {
162174
logger.log("Parsing shader version failed, invalid argument exception: %s", system::ILogger::ELL_ERROR, e.what());
175+
163176
}
164177
catch (const std::out_of_range& e) {
165178
logger.log("Parsing shader version failed, out of range exception: %s", system::ILogger::ELL_ERROR, e.what());
166179
}
180+
181+
// In case of an exception
182+
arguments[foundShaderStageArgumentValueIdx] = stageStr + L"_" + std::to_wstring(MajorReqVersion) + L"_" + std::to_wstring(MinorReqVersion);
183+
return;
167184
}
168185
else {
169186
logger.log("invalid shader stage '%s' argument, expecting a string of length >= 6 ", system::ILogger::ELL_ERROR, s);
170187
}
171188
}
189+
else if (overrideStageStr) { // in case of no -T
190+
// push back default values for -T argument
191+
// can be safely pushed to the back of argument list as output files should be evicted from args before passing to this func
192+
// leaving only compiler flags
193+
arguments.push_back(L"-T");
194+
arguments.push_back(std::wstring(overrideStageStr) + L"_" + std::to_wstring(MajorReqVersion) + L"_" + std::to_wstring(MinorReqVersion));
195+
}
196+
197+
172198
}
173199

174200

0 commit comments

Comments
 (0)