Nvidia's Pascal, DX12 and VKD3D: Slideshow time!

By

So Horizon Zero Dawn had a sale recently on Fanatical, and I thought… OK I’ll grab it! It’s time. I first installed it on my workstation that only has a GTX1060 3GB GPU - not a workhorse but a decent card nonetheless for low-to-medium end gaming. I knew very well that Horizon Zero Dawn is a DX12 game and that Pascal architecture (Nvidia 10xx basically) and earlier versions do not play very well with DX12 games running through vkd3d-proton, the DX12 to Vulkan translation layer.

Still, I could imagine getting somewhere around 30 FPS on low-to-medium settings, and use FSR if necessary to get to better framerates. Nothing prepared me for the performance I was about to experience.

1 FPS at the launch cutscene. At first I thought there was something wrong… Maybe I was using an old version of Proton? No, 6.3-7, seems about right… Switching to ProtonGE: not better.

Alright, then Proton Experimental is probably going to make things a little better? Who knows?

ONE. FPS. STILL.

Damn!

After going into low details and resizing my screen to 1080p (as my monitor is of high resolution), I managed to get to… 3~4 FPS:

https://peertube.linuxrocks.online/w/nj8FR7fpyJPJrhedNQ4DqG

And I am not the only one to report performance issues with Pascal-generation cards from Nvidia. A brief run to ProtonDB and here is what you can find:

Even beast cards like the GTX 1080 seem to be just enough to run the game correctly:

There’s something deeply broken about the VKD3D support on Pascal cards – while it’s clearly not the fault of the Proton developers. They have been forthcoming about this kind of issue:

-YoRHa2B- (Proton developer)

We have some perf hacks that may improve Pascal perf in some situations nowadays (VKD3D_CONFIG=force_static_cbv), but in general, don’t expect that to a) work in all games and b) get you anywhere close to Windows performance, it just won’t happen on those older Nvidia cards.

Doitsujin (Proton Developer, who started with DXVK)

Low D3D12 performance on Nvidia Pascal (and older) GPUs is expected and likely won’t improve much. The hardware has a bunch of limitations that make it very hard to extract good performance. Turing fares better, but only AMD actually runs reasonably well right now.

Might be possible [to get better results], but we’d need help from Nvidia to figure out what’s going on and why it’s so slow. We don’t even fully understand that much. And then we’d need to invest probably several weeks or months into rewriting large parts of the code base yet again to make specifically these GPUs happy, and some issues that are known to impact perf are impossible to fix given design differences between D3D12 and Vulkan as well as hardware limitations.

In other words, not going to happen for an aging GPU architecture that won’t be relevant in a few years.

What’s somewhat unfortunate is that quite a few people are stuck right now with the Pascal generation of GPUs, as the market keeps sucking just as much as last year’s. GPU prices inflated by 3, 4 folds above the MRSP, and manufacturers producting old-gen cards again are not good signs. Recovery does not seem to be on the horizon either, and cards keep flying off the shelves anyway no matter the inflated prices.

In my situation, I can see a single upgrade that would let me play Horizon Zero Dawn at a reasonable cost: I could get rid of my GTX 1060 3GB at about $200 USD and get a GTX1650 super for $360, so an upgrade of about $160 USD. The GTX 1650 Super is a low end Nvidia Turing card that should perform much better on DX12 games with VK3D, and is also slightly superior to my current card on DirectX11 in most games. It’s certainly not the upgrade I was dreaming of, but it may be the only practical thing to do without spending several hundreds more to get a more powerful GPU.

In the meantime, take this is a friendly warning: if you own a Pascal (or older) Nvidia GPU, stay away from DX12 games for now – you WILL be disappointed.