summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrey Kleshchev <andreykproductengine@lindenlab.com>2021-03-30 22:42:40 +0300
committerAndrey Kleshchev <andreykproductengine@lindenlab.com>2021-03-31 09:25:27 +0300
commit022ff9819336a9beab744f2d25baa51a249e998e (patch)
tree3c9e4b783c688c81b455fea18675643ac5c37340
parentd353c9ae0fe575788f537c72dc9d22834bef8bdb (diff)
SL-14990 ig75icd64 and other intel crashes
Obsolete driver detection
-rw-r--r--indra/newview/llappviewer.cpp40
-rw-r--r--indra/newview/skins/default/xui/en/notifications.xml6
2 files changed, 46 insertions, 0 deletions
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 297925d0f0..ef3759905b 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -1115,6 +1115,46 @@ bool LLAppViewer::init()
}
}
+#if LL_WINDOWS && ADDRESS_SIZE == 64
+ if (gGLManager.mIsIntel)
+ {
+ // Check intel driver's version
+ // Ex: "3.1.0 - Build 8.15.10.2559";
+ std::string version = ll_safe_string((const char *)glGetString(GL_VERSION));
+
+ const boost::regex is_intel_string("[0-9].[0-9].[0-9] - Build [0-9]{1,2}.[0-9]{2}.[0-9]{2}.[0-9]{4}");
+
+ if (boost::regex_search(version, is_intel_string))
+ {
+ // Valid string, extract driver version
+ std::size_t found = version.find("Build ");
+ std::string driver = version.substr(found + 6);
+ S32 v1, v2, v3, v4;
+ S32 count = sscanf(driver.c_str(), "%d.%d.%d.%d", &v1, &v2, &v3, &v4);
+ if (count > 0 && v1 <= 10)
+ {
+ LL_INFOS("AppInit") << "Detected obsolete intel driver: " << driver << LL_ENDL;
+ LLUIString details = LLNotifications::instance().getGlobalString("UnsupportedIntelDriver");
+ std::string gpu_name = ll_safe_string((const char *)glGetString(GL_RENDERER));
+ details.setArg("[VERSION]", driver);
+ details.setArg("[GPUNAME]", gpu_name);
+ S32 button = OSMessageBox(details.getString(),
+ LLStringUtil::null,
+ OSMB_YESNO);
+ if (OSBTN_YES == button && gViewerWindow)
+ {
+ std::string url = LLWeb::escapeURL(LLTrans::getString("IntelDriverPage"));
+ if (gViewerWindow->getWindow())
+ {
+ gViewerWindow->getWindow()->spawnWebBrowser(url, false);
+ }
+ }
+ }
+ }
+ }
+#endif
+
+ // Obsolete? mExpectedGLVersion is always zero
#if LL_WINDOWS
if (gGLManager.mGLVersion < LLFeatureManager::getInstance()->getExpectedGLVersion())
{
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 2f4da4f9b7..cac41dac2f 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -9580,6 +9580,12 @@ You do not appear to have the proper hardware requirements for [APP_NAME]. [APP_
If you continue to have problems, please visit the [SUPPORT_SITE].
</global>
+ <global name="UnsupportedIntelDriver">
+The installed Intel graphics driver for [GPUNAME], version [VERSION], is significantly out of date and is known to cause excessive rates of program crashes. You are strongly advised to update to a current Intel driver
+
+Do you want to check the Intel driver website?
+ </global>
+
<global name="UnsupportedCPUAmount">
796
</global>