We observe numerous crashes related to DX12, which ultimately lead to
FD3D12Viewport::ResizeInternal. Judging by the call stack, most of them also involve
FFXFrameInterpolationSlateRenderer::UpdateFullscreenState at one of the stages. In this case, FSR may not work at all (i.e., the player either disabled the upscaler or selected a different one).
Also, all these crashes seem to have several sources or occur randomly throughout the game (including when starting the game or entering the main menu). Also visible on all hardware and regardless of GPU/CPU vendor.
Perhaps someone has encountered something similar and can suggest a source or what the problem might be? Because from my point of view, it seems very strange that disabled FSR somehow contributes to such crashes.
To clarify FFXFrameInterpolationSlateRenderer is part of the interpolation layer and its possible those hooks are active even if you have the upscaling/frame generation feature disabled. We will not be able to provide additional support on the FSR front and would recommend talking to the vendor if there are issues there.
For the non-FSR path, can you please try reproducing the crash with -d3ddebug and provide us the log from that run?
Please see this page for rendering crash debugging guidance:
You can use the command-line argument “-d3ddebug” on PC with all build configurations. However, doing it with Development/Test/Debugging builds can yield more useful logs and debug information.
Are you able to reproduce this in Development builds?
We have the same issue with one of out projects. It seems AMD FSR plugin always registers FFXFrameInterpolationSlateRenderer (as well as always creates FFXFrameInterpolationModule implementation) regardless of are you actually using FSR FG or not. Apparently, this has to be sent/escalated to AMD FSR representatives to make sure Unreal integration works as intended.
I also have feeling (no exact repro steps), that setting upscaler to DLSS first (not touching FSR FG) may cause the crash on resize as well.
Could you clarify regarding “-d3ddebug” as I don’t quite understand. Does this argument work in shipping builds? Or are Development/Test/Debugging required?
No, we can’t reproduce it, but our QA team is working on it. We are also working on getting additional information from players. As soon as we receive logs with this flag, we will send them to you.
One of the players caught it and was able to send us a log with “-d3ddebug”.
He also sent the following description:
Bug Description: Crash on switching screen mode
How can the bug be re-created: I am unsure how to recreate this bug on other computers. I have a fairly high-end PC and this has never occured in other games.
We also suspect that Intel/Nvidia/AMD frame generators may be causing crashes, as they may not be completely disabled, as is the case with XeFG. So, in our next game patch, we will disable them and see if such crashes continue
It has now been 36 hours since the patch was released to players, and we can see that 99.9% of crashes of this type have disappeared. To achieve this, we disabled the Streamline and StreamlineDLSSG plugins. We also disabled XeFG (r.XeFG.OverrideSwapChain=False).
We also learned from our colleagues that frame generators generally have many problems, and for this reason we do not plan to use them at this time
So even if AMD’s frame generator prepares hooks and other things, nothing is stopping it now (I mean the other frame generators)
AMD FSR FI does not require swapchain override, but it’s for “better frame pacing” (as per docs). Setting this var requires game restart to take effect
Intel XeFG requires swapchain override and game restart to take effect
NVIDIA FG (DLSSG) requires swapchain override, but it can do that on fly (recreating swapchain on demand) so does not require game restart
I assume the best solution is to disable 2 cvars overiding swapchain in DefaultEngine.ini:
and when needed, set cvars accordingly and prompt user to restart the game to take effect. At least we are testing it now.
It’s not an Unreal Engine issue per se, and I completely understand the mainline to improve TSR, though it would be great, if we have unified way in Unreal Engine to support different Upscaler, Low Latency and Frame Generation technologies without meshing plugins altogether.