diff options
author | Laszlo Agocs <laszlo.agocs@qt.io> | 2019-09-07 21:03:53 +0200 |
---|---|---|
committer | Laszlo Agocs <laszlo.agocs@qt.io> | 2019-09-23 12:50:25 +0200 |
commit | 67ce1dd81014836aa8b900fd039adfc7c63414b5 (patch) | |
tree | 077321b519f0616961bb0c3bbd77bcf70333a778 /src/quick/scenegraph/qsgrhisupport.cpp | |
parent | 18955f3c89443d13a0b6dfa8056df1d38d5bbff6 (diff) |
Add an env var to periodically kill the device on d3d
...in order to test the handling of losing the device.
The D3D11 backend of QRhi provides a convenient way to test this.
Hook it up to a QSG_RHI_SIMULATE_DEVICE_LOSS environment variable.
The value is the number of frames to wait before breaking the
ID3D11Device.
We cannot currently recover from a device loss. Hence the importance
of being able to test in a simple way. The rhi code path needs to be
brought up to the level of the direct OpenGL path in this respect,
in separate patches.
Change-Id: I66d6315dc60a9673903da9bed36de0cdd115f4a7
Reviewed-by: Christian Strømme <christian.stromme@qt.io>
Diffstat (limited to 'src/quick/scenegraph/qsgrhisupport.cpp')
-rw-r--r-- | src/quick/scenegraph/qsgrhisupport.cpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/quick/scenegraph/qsgrhisupport.cpp b/src/quick/scenegraph/qsgrhisupport.cpp index e050938cc9..2c5d8fb2ac 100644 --- a/src/quick/scenegraph/qsgrhisupport.cpp +++ b/src/quick/scenegraph/qsgrhisupport.cpp @@ -178,6 +178,10 @@ void QSGRhiSupport::applySettings() m_shaderEffectDebug = qEnvironmentVariableIntValue("QSG_RHI_SHADEREFFECT_DEBUG"); + m_killDeviceFrameCount = qEnvironmentVariableIntValue("QSG_RHI_SIMULATE_DEVICE_LOSS"); + if (m_killDeviceFrameCount > 0 && m_rhiBackend == QRhi::D3D11) + qDebug("Graphics device will be reset every %d frames", m_killDeviceFrameCount); + const char *backendName = "unknown"; switch (m_rhiBackend) { case QRhi::Null: @@ -489,6 +493,10 @@ QRhi *QSGRhiSupport::createRhi(QWindow *window, QOffscreenSurface *offscreenSurf if (backend == QRhi::D3D11) { QRhiD3D11InitParams rhiParams; rhiParams.enableDebugLayer = isDebugLayerRequested(); + if (m_killDeviceFrameCount > 0) { + rhiParams.framesUntilKillingDeviceViaTdr = m_killDeviceFrameCount; + rhiParams.repeatDeviceKill = true; + } rhi = QRhi::create(backend, &rhiParams, flags); } #endif |