Putting this here as a note for devs:
The game has a handful of vertex buffers that are >1MB which end up getting uploaded multiple times per frame. Not only is it slow to copy that much data, we also end up exceeding the staging buffer limit. The game even maps those buffers at least once per frame with size = 0.
The best solution in my opinion is to upload only the necessary data at draw time for POOL_SYSMEM + USAGE_DYNAMIC buffers.
@K0bin thank you for digging into the problem
Issue seems to be replicable on steam deck too checking protondb unless you drop down to an older version of proton that uses wined3d instead. Troublesome considering the game is currently marked as "deck verified"
The issue might not have shown much when the game was verified. Testing 6.3-8 on Deck the perf drop isn't too bad and doesn't go below 50. With 7.0-6 and 8.0-4 it's much more noticeable going down into the low 20's and seems to stay there for longer.
Looking at the verification date it was probably tested with 7.0-2 but haven't tested that myself sepcifically
It'll be fixed soon anyway.
Just tested the game using the main branch build and the performance issues have gone. Thank you, folks
proton 8.0-4x1 2023-12
Shank 2 with DXVK is performing worse compared to WineD3D. To reproduce the slowdown you can just start a new campaign and play for less than 5 minutes (after leaving the initial vehicle, it's possible to notice). The fps is dropping below 40 sometimes (I'm using a 6700 XT with a 1080p resolution).
I've tried also the following DXVK properties:
d3d9.cachedDynamicBuffers=Trueandd3d9.floatEmulation=Strict(but no gains)Software information
Game: Shank 2
Settings: maxed out at 1080p
System information
Apitrace file(s)
For instructions on how to use apitrace, see: https://github.com/doitsujin/dxvk/wiki/Using-Apitrace
Log files