Windows: Disable shader disk cache for Intel HD Graphics 620

Set Qt::AA_DisableShaderDiskCache when the feature "disable_program_cache"
(modeled after the Chromium driver bug list) is present and set it for the
Intel HD Graphics 620 card.

Task-number: QTBUG-64697
Change-Id: Ibba588d2ab296b5c959ab8ee9712b47ec7cc906e
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
This commit is contained in:
Friedemann Kleint 2018-09-03 12:45:05 +02:00
parent fd6370d89f
commit dff9bb2f9b
4 changed files with 22 additions and 1 deletions

View File

@ -141,6 +141,18 @@
"features": [
"disable_desktopgl", "disable_d3d11", "disable_d3d9"
]
},
{
"id": 12,
"description": "Intel HD Graphics 620 crash in conjunction with shader caches (QTBUG-64697)",
"vendor_id": "0x8086",
"device_id": [ "0x5916" ],
"os": {
"type": "win"
},
"features": [
"disable_program_cache"
]
}
]
}

View File

@ -418,6 +418,10 @@ QWindowsStaticOpenGLContext *QWindowsStaticOpenGLContext::doCreate()
}
const QWindowsOpenGLTester::Renderers supportedRenderers = QWindowsOpenGLTester::supportedRenderers();
if (supportedRenderers.testFlag(QWindowsOpenGLTester::DisableProgramCacheFlag)
&& !QCoreApplication::testAttribute(Qt::AA_DisableShaderDiskCache)) {
QCoreApplication::setAttribute(Qt::AA_DisableShaderDiskCache);
}
if (supportedRenderers & QWindowsOpenGLTester::DesktopGl) {
if (QWindowsStaticOpenGLContext *glCtx = QOpenGLStaticContext::create()) {
if ((supportedRenderers & QWindowsOpenGLTester::DisableRotationFlag)

View File

@ -301,6 +301,10 @@ QWindowsOpenGLTester::Renderers QWindowsOpenGLTester::detectSupportedRenderers(c
qCDebug(lcQpaGl) << "Disabling rotation: " << gpu;
result |= DisableRotationFlag;
}
if (features.contains(QStringLiteral("disable_program_cache"))) {
qCDebug(lcQpaGl) << "Disabling program cache: " << gpu;
result |= DisableProgramCacheFlag;
}
srCache->insert(qgpu, result);
return result;
#endif // !QT_NO_OPENGL

View File

@ -83,7 +83,8 @@ public:
GlesMask = Gles | AngleBackendMask,
SoftwareRasterizer = 0x0020,
RendererMask = 0x00FF,
DisableRotationFlag = 0x0100
DisableRotationFlag = 0x0100,
DisableProgramCacheFlag = 0x0200
};
Q_DECLARE_FLAGS(Renderers, Renderer)