doitsujin / dxvk

Vulkan-based implementation of D3D8, 9, 10 and 11 for Linux / Wine
zlib License
12.62k stars 805 forks source link

Valkyria Chronicles 4 low performance #1421

Open JulianGro opened 4 years ago

JulianGro commented 4 years ago

Valkyria Chronicles 4 runs with far worse performance than on windows.

Software information

Valkyria Chronicles 4

System information

Apitrace file(s)

Log files

The game uses directx11. Forcing directx9 fallback doesn't work(game doesn't start). Performance on my linux machine is around 40 fps ingame. It feels a lot lower than that, so I would assume that there is issues with the frametime. I have had between 20-30 fps before, when my graphics card was running at 8x rather than 16x. The framerate climbs up to 300fps in the menu and in 3d conversations. Performance on the windows machine with the apitrace is consistently worse, but that makes sense considering its specs.

When I played the game on windows ~2 years ago, I was constantly hitting the 120 fps cap that I set.

doitsujin commented 4 years ago

I checked the apitrace, the game isn't doing anything special so there's really nothing to improve on the DXVK side. Doesn't really look like our issue, best way to confirm would be to check with DXVK on Windows if that's possible. Also, please check if you're GPU-limited (DXVK_HUD=gpuload).

wined3d should works fine with wine-staging since that implements deferred contexts, might also be worth checking whether that is any better, but I doubt it.

I have had between 20-30 fps before, when my graphics card was running at 8x rather than 16x.

What do you mean by "8x" and "16x"?

For future reference, DXVK_LOG_LEVEL=debug isn't very useful 99% of the time, info is more than enough.

Edit: Tagging as Nvidia because everyone on the internet complaining about performance seems to be using an Nvidia GPU, but not sure if there's anything to it.

SveSop commented 4 years ago

I have had between 20-30 fps before, when my graphics card was running at 8x rather than 16x.

What do you mean by "8x" and "16x"?

For future reference, DXVK_LOG_LEVEL=debug isn't very useful 99% of the time, info is more than enough.

Edit: Tagging as Nvidia because everyone on the internet complaining about performance seems to be using an Nvidia GPU, but not sure if there's anything to it.

Only reasonable concept of 8x and 16x considering things with GPU is setting the PCIe to 8x rather than 16x (ie PCIe "lanes"). I guess that might be what he meant.

Why it seems all problems has to do with nVidia is simply because "everyone" that are serious at gaming IS using a nVidia card... (muuuhahahahaaha cough haha)

doitsujin commented 4 years ago

Upon closer inspection, it looks like this game allocates all vertex buffers and index buffers in system memory. This is a game bug, and working around this in DXVK would incur a performance penalty for all other games as well, so I'm not particularly inclined to do that.

This works better on AMD since we can write directly into a small VRAM region there, but on Nvidia we'd have to dispatch a separate copy, and the decision making process would have to happen in the most performance-critical function in the entire API that gets called anything up to 10000 times per frame by some games. I don't want to punish those games because this one is being dumb.

JulianGro commented 4 years ago

I guess that would explain why going from 8 to 16 pcie lanes made such a difference. The question would still be why it would run so much better on windows then. I guess I might try DXVK on windows.

JulianGro commented 4 years ago

So I ran the game on windows on the same machine as on linux. DirextX11 performance was stable ~200fps DXVK performance was slightly lower than on linux ~35fps ingame and around 100fps less than before in menus. Updating graphics drivers didn't help. I made a new apitrace on this machine as well. The other machine probably doesn't have a lot of vram, so that could be playing a role here.

Apitrace file(s)

Log files

doitsujin commented 4 years ago

The question would still be why it would run so much better on windows then.

Because the Nvidia driver works around the problem by copying the buffers around.