@@ -166,10 +166,18 @@ std::string CHLSLCompiler::preprocessShader(std::string&& code, IShader::E_SHADE
166
166
context.add_macro_definition (define.identifier .data ()+core::string (" =" )+define.definition .data ());
167
167
168
168
// 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
+ }
173
181
174
182
// for debugging cause MSVC doesn't like to show more than 21k LoC in TextVisualizer
175
183
if constexpr (true )
@@ -217,34 +225,35 @@ core::smart_refctd_ptr<ICPUShader> CHLSLCompiler::compileToSPIRV(const char* cod
217
225
std::wstring targetProfile (SHADER_MODEL_PROFILE);
218
226
219
227
// 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 ;
248
257
};
249
258
250
259
std::vector<LPCWSTR> arguments = {
0 commit comments