Is this plain wine without esync/fsync? If yes, that would be an obvious place to start looking for what seems to be a cpu-bottleneck that is not necessarily caused by just vkd3d-proton.
Yes, it's a plain Wine. Never had this issue before with 6800 XT though, and from what I've read from Wine developers, the need for fsync is pretty rare and often it can make things only worse. Never heard of CP2077 needing it too.
I can also try bumping CPU governor to performance to see if that makes a difference.
fsync being a benefit over esync is rare, either of those being a massive benefit over default wine-server sync is very common. Now you have more gpu headroom, so you can hit a cpu bottleneck more easily.
I'll take a look. Did Wine land fsync support already behind some variable? Upstream kernels have needed interfaces already with futex2, right? I'm using 6.2.0.
No, fsync isn't in upstream wine, but the required interface is in the kernel since 5.14 or something.
Looks like Wine staging should have esync, I'll give it a try. What happened to upstreaming fsync, something didn't work out or it's not ready yet?
fsync and esync almost with certancy won't be upstreamed.
winesync/ntsync/fastsync (it's had a few names) might be at some point. But that's another matter.
As mbriar said a test with esync or fsync might be interesting.
Hm, the game doesn't even start with current Wine staging. I'll try this a bit later, may be with upstream Wine with only esync or fsync patches applied.
OK, built Wine 8.2 with just esync patches and enabled it. It does help!

Framerate went from 112 fps to around 130 fps.
Also tested DX12 version of the Witcher 3 - esync also massively helps there. Thanks for the tip that it's still useful. I thought esync / fsync kind of was needed only for some rare edge cases.
You can look at perf top -s comm,dso,symbol -p $cp77_pid i guess to see if anything sticks out why it's still cpu limited (best with symbols compiled in for vkd3d-proton and radv), but tbh, I wouldn't expect that every, or even most, games can max out a 7900XTX at only 1440p without RT.
esync/fsync is basically a requirement for acceptable perf for any game that's highly multi-threaded. Win32 thread synchronization primitives are quite slow with default wineserver sync.
Thanks, I'll close it since it's not a vkd3d-proton issue. Will look more with perf at some point.
I figured out what was going on. Somehow FSR got enabled, that's why GPU wasn't loaded even with esync. Without FSR it gets full load.
winesync/ntsync/fastsync (it's had a few names) might be at some point. But that's another matter.
Where can I track this? It would be nice to have such improvident in the upstream.
LGD?
The Linux Gaming Dev discord
Nothing extracted yet.
I just tested CP2077 with Sapphire Pulse RX 7900 XTX and noticed that in comparison with 6800 XT while performance is better, GPU is also not fully loaded, which potentially means performance isn't as good as it could be if GPU was loaded more.
Set up:
6800 XT (full GPU load)

7900 XTX 75%-90% load (not sure what it depends on):

Could it be an issue with vkd3d-proton not using resources better?