HansKristian-Work / vkd3d-proton

Fork of VKD3D. Development branches for Proton's Direct3D 12 implementation.
GNU Lesser General Public License v2.1
1.8k stars 185 forks source link

Street Fighter 6 low fps #1348

Open manliodp opened 1 year ago

manliodp commented 1 year ago

Hello, first thanks for your effort and time dedicated on this great project. I'm having a weird issue with Street Fighter 6 where the game is not able to maintain 60fps. My PC is not high spec but it's enough at least for the LOW settings: AMD Ryzen 5 4500 AMD RX 6400 4GB 16GB DDR4 3200 These specs are more powerful than the DECK that is able to run the game flawlessly.

As you can see in the screenshots the GPU is capped at 99%, MAX frequency but very LOW wattage (17W). VRAM is 75%. Readeontop shows a GPU pipeline blocked only on Shader Interpolation (99%) while other parameters are between 50-75%.

If I start a match with LOWEST settings the game runs at a steady 60fps and even if I change the settings to NORMAL or HIGH on the fly, the games continues to run at 60fps without a single hiccup.

HIGH settings changed on the fly after starting a match with LOWEST settings (60FPS) Screenshot_HIGH_AFTER_START_LOWEST

If I start a match with LOW, NORMAL or HIGH settings the game fps drop to around 10-17, even if I change the settings to LOWEST.

Match started with LOW settings (44FPS) Screenshot_LOW_FROM_START

Match started with NORMAL settings (18FPS) Screenshot_NORMAL_FROM_START

Another weird thing is that using 720p instead of 1080p resolution doesn't make any difference, frame rate pacing issues are always present in LOW, NORMAL or HIGH presets. The power consumption seems to be always very low and never over 20W while the GPU should be capable to reach 53W max, this even with at maximum GPU frequency.

I really don't know how to debug as proton logs doesn't seem to have any apparent error. Please let me know if I can add anything else to this issue to help better understanding the problem.

I admit this is very confusing to understand and at the same time difficult to explain for me because things seems to be very random.

Let me also add that this happens with Proton Experimental, Hotfix and also GE variants.

Thanks

manliodp commented 1 year ago

I've some news about this issue.

First, I've installed windows to understand which performance I could have expected from my specs and I've got:

Resolution 1080P.

Now I can state that my hardware is more than capable to run this game so for sure it's a "translation" issue or bad code of the beta version of the game.

Second I've found that on linux, using gamescope in fullscreen mode but with a lower resolution than 1080P, I get constant 60 fps everywhere.

E.g.: gamescope -f -w 1600 -h 900 -U -- %command%

The same command but with 1080P values produces frame rate pacing problems.

This is an acceptable temp workaround which makes the game more than playable under linux.

Last considerations, the game is still in beta and not very available so I understand/hope that the bulk of the refinements will be done for sure in June when it'll be released.

Thanks

HansKristian-Work commented 1 year ago

I have observed that it's easy to exceed the VRAM limit in some situations, which means you'll start to hit system memory and things slow down a lot. I don't know exactly where that threshold is, but once you start to hit GTT allocations, they often don't go back into VRAM again. When changing settings, it's likely it's allocating a bunch of new resources before freeing the old ones. That could explain it.

WDDM is better at dealing with high VRAM pressure situations like this, and there isn't much we can do in vkd3d-proton to mitigate.

I would suggest trying to look at radeontop where it will show the amount of memory tied to GTT. If GTT spikes up a bit when the slowdown triggers, that would be a good indication this is the issue.

manliodp commented 1 year ago

Thanks for your input, please find below radeontop samples while the game is running fullhd on 2 different backdrops, GTT value seems pretty consistent in each case with very limited oscillation of few MBs:

18fps radeontop

56fps radeontop2

Thanks

manliodp commented 1 year ago

Ok, I've found where the issue lies, and the guilty winner is.. RADV :) Using AMDVLK I get good performance (60fps) and constant framerates but some graphical artifacts that affect gameplay, so still no joy for me :D Just for info, radeontop numbers for AMDVLK are higher for VRAM and GTT but performance is good and coherent.

Thanks

Edit: it seems artifacts appear randomly, some matches start perfect and artifacts begin to appear later while other times they're present from the start