Skip to content
Snippets Groups Projects
Commit e236da41 authored by andreykproductengine's avatar andreykproductengine
Browse files

MAINT-8197 Compliment benchmark crash processing with SEH handling

parent 07f8c156
No related branches found
No related tags found
No related merge requests found
......@@ -377,6 +377,43 @@ bool LLFeatureManager::parseFeatureTable(std::string filename)
F32 gpu_benchmark();
#if LL_WINDOWS
static const U32 STATUS_MSC_EXCEPTION = 0xE06D7363; // compiler specific
U32 exception_benchmark_filter(U32 code, struct _EXCEPTION_POINTERS *exception_infop)
{
if (code == STATUS_MSC_EXCEPTION)
{
// C++ exception, go on
return EXCEPTION_CONTINUE_SEARCH;
}
else
{
// handle it
return EXCEPTION_EXECUTE_HANDLER;
}
}
F32 logExceptionBenchmark()
{
// Todo: make a wrapper/class for SEH exceptions
F32 gbps = -1;
__try
{
gbps = gpu_benchmark();
}
__except (exception_benchmark_filter(GetExceptionCode(), GetExceptionInformation()))
{
// convert to C++ styled exception
char integer_string[32];
sprintf(integer_string, "SEH, code: %lu\n", GetExceptionCode());
throw std::exception(integer_string);
}
return gbps;
}
#endif
bool LLFeatureManager::loadGPUClass()
{
if (!gSavedSettings.getBOOL("SkipBenchmark"))
......@@ -385,7 +422,11 @@ bool LLFeatureManager::loadGPUClass()
F32 gbps;
try
{
#if LL_WINDOWS
gbps = logExceptionBenchmark();
#else
gbps = gpu_benchmark();
#endif
}
catch (const std::exception& e)
{
......@@ -400,11 +441,11 @@ bool LLFeatureManager::loadGPUClass()
LL_WARNS("RenderInit") << "Unable to get an accurate benchmark; defaulting to class 3" << LL_ENDL;
mGPUClass = GPU_CLASS_3;
#else
if (gGLManager.mGLVersion < 2.f)
if (gGLManager.mGLVersion <= 2.f)
{
mGPUClass = GPU_CLASS_0;
}
else if (gGLManager.mGLVersion < 3.f)
else if (gGLManager.mGLVersion <= 3.f)
{
mGPUClass = GPU_CLASS_1;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment