Hi. I’ve recorded a lot of commands in a single command list and it works pretty well. But recently, it has been accidentally crashed and DRED indicates GPU stopped on some random and imprecise commands for each tries. It seems that TDR system removes device. So I guess that the commands are recorded as mush as the GPU can not handle on time. I just roughly cut the commands (not per render pass) into several parts and execute them. As the result, now GPU is not hanged on some commands unreasonably. These are processed on a main thread, a main swapchain for a main window.
But I wonder that why and how just separating commands works? The number of commands before presenting are not changed. There is no waiting by fence between command lists in each frame.
So I’ve found the D3D12_COMMAND_QUEUE_FLAG_DISABLE_GPU_TIMEOUT flag. Re-combine the commands and execute through the queue with that flag, but the crash was occurred.
So I’m curious about these;
- Why does not the flag work?
- Is there any other way to disable GPU timeout? (except modifying TDR settings)
- What does the TDR delay value exactly mean? How does it works?