Skip to content

Commit 3f58504

Browse files
properly catch Boost.Wave exceptions
1 parent ff093ee commit 3f58504

File tree

1 file changed

+41
-32
lines changed

1 file changed

+41
-32
lines changed

src/nbl/asset/utils/CHLSLCompiler.cpp

Lines changed: 41 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -166,10 +166,18 @@ std::string CHLSLCompiler::preprocessShader(std::string&& code, IShader::E_SHADE
166166
context.add_macro_definition(define.identifier.data()+core::string("=")+define.definition.data());
167167

168168
// preprocess
169-
std::stringstream stream = std::stringstream();
170-
for (auto i=context.begin(); i!=context.end(); i++)
171-
stream << i->get_value();
172-
core::string resolvedString = stream.str();
169+
core::string resolvedString;
170+
try
171+
{
172+
std::stringstream stream = std::stringstream();
173+
for (auto i=context.begin(); i!=context.end(); i++)
174+
stream << i->get_value();
175+
resolvedString = stream.str();
176+
}
177+
catch (...)
178+
{
179+
preprocessOptions.logger.log("Boost.Wave exception caught!",system::ILogger::ELL_ERROR);
180+
}
173181

174182
// for debugging cause MSVC doesn't like to show more than 21k LoC in TextVisualizer
175183
if constexpr (true)
@@ -217,34 +225,35 @@ core::smart_refctd_ptr<ICPUShader> CHLSLCompiler::compileToSPIRV(const char* cod
217225
std::wstring targetProfile(SHADER_MODEL_PROFILE);
218226

219227
// Set profile two letter prefix based on stage
220-
switch (stage) {
221-
case asset::IShader::ESS_VERTEX:
222-
targetProfile.replace(0, 2, L"vs");
223-
break;
224-
case asset::IShader::ESS_TESSELLATION_CONTROL:
225-
targetProfile.replace(0, 2, L"ds");
226-
break;
227-
case asset::IShader::ESS_TESSELLATION_EVALUATION:
228-
targetProfile.replace(0, 2, L"hs");
229-
break;
230-
case asset::IShader::ESS_GEOMETRY:
231-
targetProfile.replace(0, 2, L"gs");
232-
break;
233-
case asset::IShader::ESS_FRAGMENT:
234-
targetProfile.replace(0, 2, L"ps");
235-
break;
236-
case asset::IShader::ESS_COMPUTE:
237-
targetProfile.replace(0, 2, L"cs");
238-
break;
239-
case asset::IShader::ESS_TASK:
240-
targetProfile.replace(0, 2, L"as");
241-
break;
242-
case asset::IShader::ESS_MESH:
243-
targetProfile.replace(0, 2, L"ms");
244-
break;
245-
default:
246-
hlslOptions.preprocessorOptions.logger.log("invalid shader stage %i", system::ILogger::ELL_ERROR, stage);
247-
return nullptr;
228+
switch (stage)
229+
{
230+
case asset::IShader::ESS_VERTEX:
231+
targetProfile.replace(0, 2, L"vs");
232+
break;
233+
case asset::IShader::ESS_TESSELLATION_CONTROL:
234+
targetProfile.replace(0, 2, L"ds");
235+
break;
236+
case asset::IShader::ESS_TESSELLATION_EVALUATION:
237+
targetProfile.replace(0, 2, L"hs");
238+
break;
239+
case asset::IShader::ESS_GEOMETRY:
240+
targetProfile.replace(0, 2, L"gs");
241+
break;
242+
case asset::IShader::ESS_FRAGMENT:
243+
targetProfile.replace(0, 2, L"ps");
244+
break;
245+
case asset::IShader::ESS_COMPUTE:
246+
targetProfile.replace(0, 2, L"cs");
247+
break;
248+
case asset::IShader::ESS_TASK:
249+
targetProfile.replace(0, 2, L"as");
250+
break;
251+
case asset::IShader::ESS_MESH:
252+
targetProfile.replace(0, 2, L"ms");
253+
break;
254+
default:
255+
hlslOptions.preprocessorOptions.logger.log("invalid shader stage %i", system::ILogger::ELL_ERROR, stage);
256+
return nullptr;
248257
};
249258

250259
std::vector<LPCWSTR> arguments = {

0 commit comments

Comments
 (0)