Solved the "rendering device lost" mystery, possibly

This post is long and somewhat technical, so… Tl;dr: One or more of the following will probably fix the issue: Fullscreen rather than borderless window, limit GPU load to 60%, disable all overlays (including Geforce Experience) and gamer-gear software, use a single monitor.

Disclaimer: Parts of this is speculation, but seemingly well-founded. I don’t know for sure how the game engine or video drivers are built, and haven’t even tried getting official confirmation.

Having never had this crash before, it suddenly happened in two placements in a row yesterday (my SR took quite a beating from disconnecting from 40% of them). As I had recently made a few changes to my setup I had a decent idea of where to look, so I started troubleshooting, and a day later I’m not at all surprised a generic solution is so elusive. There are basically countless contributing factors, with some randomness thrown in for good measure, but if you have the following combination you will see this issue frequently (and the standard “disable overlays” is not always enough, while sometimes completely unnecessary):

  • You’re GPU-bound, so you have a very high GPU utilization. My 1080 GTX was at 100% utilization, not quite keeping up with my i9-9900k when FPS limit was 300.
  • You’re playing in borderless windowed mode. Which you probably are if…
  • You have more than one monitor. I got one the same day as the crashes happened.
  • You run something that interferes in the slightest with the graphics pipeline. This is not limited to overlays, but can be anything from stuff like Lightsync to a background application stealing focus for a fraction of a second.

What appears to be happening is this: the Overwatch graphics engine seems to make very good use of multi-threaded rendering, which requires CPU-GPU synchronization. In D3D11 this should be done automatically by the driver, but it appears that nVidia have taken some liberties in the name of speed. As long as nothing interferes with the device state (drawing at an unexpected time for example) everything works, but if something does at the wrong time everything goes out of sync. At high load, and particularly at high frame rates, there are a lot of long, “wrong times”.

Overlays work by injecting draw-calls at some generic point in the program-flow, disrupting the expected state. In windowed mode, your state is more or less shared with every other visible application, and any process can unexpectedly interrupt your access to the GPU. With multiple monitors you have a lot of other visible applications (some, like most browsers, using additional hardware acceleration) throwing wrenches in your pipeline.

You can see how all of this combines to create a scenario where lost synchronization is almost a given, with a device reset (which is what the error message means) being the only way to bring it back in line.

If (it’s not like I’ve read the source code for either Overwatch or the Geforce drivers) this is in fact what’s happening, and everything I’ve seen in the logs support it, it is ultimately a driver issue, and not an Overwatch issue.

Could Blizzard stop it from happening? Sure, they could implement a work-around, but not in a way that wouldn’t lower the performance for everyone regardless of if they have the issue or not. It’s quite simple to fix it yourself, when you know what to do.

Changing to “true” fullscreen rather than bordered window will probably be enough. If not, or if you don’t want to, lower the quality and/or throttle your framerate until you’re peaking at 50-60% GPU load (gpu-z is your friend) while playing. If you’re still getting “Rendering device lost”, disable all overlays (discord, steam, geforce experience) and LightSync-like stuff. Last hope is to disconnect any additional monitors.

If you’re running fullscreen on a single monitor, have no overlays or other gamer-stuff running, peak at 60% gpu and still crash, something is probably broken.

2 Likes