Multi-projection systems typically have a high GPU load an with that a “TDR error” is fairly common.
Table of Contents
Why does a TDR occur?
This is one of the most common stability problems in graphics occurs when a computer “hangs”, or when it appears to be completely “frozen” – mostly it kills the main graphics application in this process.
Another incarnation of a TRD error looks like this:
In order to prevent any rendering or GPU computation from locking the system, the Windows Operating System kills the GPU driver whenever a rendering takes more than a few seconds. When the driver is killed, the application using it crashes automatically. Since we can’t possibly know how long a rendering or computation will take (it depends on the GPU, the drivers, the OS, the mesh size, the texture size, etc.), we cannot put a limit on how much the computer can process and avoid the crash.
- This issue is founded in the GPU hardware and operating system. This issue has nothing do do with VIOSO Anyblend!
- Having VIOSO Anyblend running does not generate a TDR error, but often together is a GPU demanding application the GPU load can get too high to be processed.
This issue is discussed widely among the gaming community, suffering from TDR errors obviously pretty often. With game engines entering the Pro-AV market and media servers becoming 3D applications as well, TDR issues happen on VIOSO hardware as well.
There is a comprehensive explanation how to detect and debug provided by Microsoft: https://docs.microsoft.com/en-us/windows-hardware/drivers/display/timeout-detection-and-recovery
There are three typical solutions around:
- Reduce load
This is the most obvious and most secure solution. Since TDR remarks an overload of the GPU hardware, try to reduce the load by deactivating not required features from the GPU-using application, reduce resolution where applicable, deactivate monitors, previews, etc. - Update the GPU driver
This is the most often mentioned solution. While that might be a solution for gaming environments, we do not recommend bluntly updating a driver on a VIOSO engine. - Change TDR detection on registry level
We cover the TDR handling on registry level in the next chapter.
Change TDR detection on registry level
If you cannot get rid of the TDR error by adjusting the GPU load (which is always the recommended way), you might alter the way how Windows handles the GPU driver. This is of course a risky path and therefore needs to be done with great care.
You need to can change the TDR values by increasing the TDR Delay : change both ” TdrDelay ” and ” TdrDdiDelay ” to a higher value (like 60 seconds). Note that the TDR Registry Keys can be reset to their default value by Windows updates or GPU Drivers updates.
1) TdrLevel – Specifies the initial level of recovery. The default is to recover on timeout, which is represented by value 3.
The default length is 2 seconds, but if you know that you need more time that can be increased.
KeyPath : HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\GraphicsDrivers KeyValue : TdrLevel ValueType : REG_DWORD ValueData : 0 - Detection disabled OR 3 - Recover on timeout
2) TdrDelay – Specifies the number of seconds that the GPU can delay the preempt request from the GPU scheduler.
This is effectively the timeout threshold. The default value is 2 seconds. Both of these are accessible via registry entries, which Microsoft conveniently covers here: https://docs.microsoft.com/de-de/windows-hardware/drivers/display/tdr-registry-keys
KeyPath : HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\GraphicsDrivers KeyValue : TdrDelay ValueType : REG_DWORD ValueData : Number of seconds to delay; 2 seconds is the default
Neither of these keys exists normally in the registry, so they have to be added manually. Here is what they look like, if added and set to match the defaults (for the same behavior as if the keys did not exist):
Note that two different keys will have to be created/edited.
Please note that editing the registry can have serious, unexpected consequences that can prevent the system from starting and may require to reinstall the whole operating system if you are unsure of how to modify it. The registry keys mentioned in this page shouldn’t create these kind of issues however. VIOSO takes no responsibility for any damage caused to your system by modifying the system registry.
Follow this procedure:
1. Open the Run window
Click on Start then Run or press the Windows and R key.
It will open the Run window. Type regedit
in the text field and press “OK”.
2. Navigate to the GraphicsDrivers registry key
The registry window will open. In the left pane, navigate in the tree to the GraphicsDrivers key by going into:
Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers
Be sure to stay on GraphicsDrivers
and to not click on the Registry keys below before going through the next steps.
3. Add or Edit the TdrDelay value
If the TdrDelay value doesn’t exist yet, right-click in the right pane and choose New > DWORD (32bit) Value
. Name it TdrDelay
. The case is important, be sure to follow it (and check that there are no other characters such as trailing space).
In the right pane , double click on the value TdrDelay
. Change the Base
setting to Decimal
. Set the value to something else than the default 2
(we recommend 60
).
This value indicates in seconds how long the operating system will wait before considering that the GPU is unresponsive during a computation.
4. Add or Edit the TdrDdiDelay value
If the TdrDdiDelay
value does not exist, right-click in the right pane and choose New & DWORD (32bit) Value
. Name it TdrDdiDelay
. The case if important, be sure to follow it (and check that there are no other characters such as spaces).
In the right pane, double click on the value TdrDdiDelay
. Change the Base
setting to Decimal
. Set the value to something else than the default 5
(we recommend 60
).
This value indicates in seconds how long the operating system will wait before considering that a software took too much time to leave the GPU drivers.
Hexadecimal is the default value, simply switch to decimal to display the right value. Note that 3C (Hexadecimal) equals to 60 (Decimal).
5. Finish and Restart
The right pane should now looks like this:
Close the Registry editor. Restart the computer.
The TdrValue is only applied at when the computer start, so to force a refresh a reboot is necessary.
6. How to revert the TDR to its default values ?
There are two ways to revert the TDR to its default values :
- Set the
TdrDelay
to2
seconds and theTdrDdiDelay
to5
seconds, by following the steps described above. - Or Remove the
TdrDelay
andTdrDdiDelay
keys from the registry entry.