@@ -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