UE4 games on DXVK and Wine/Proton with AVX vs AVX2... Performance difference?

They refuse to offer multi rendering thread support to DX11 titles unless they acquire the studio.

Would you like the steam version to test?

IDK if that’s any help, the OpenGL renderer is already inferior to the DX11 renderer in terms of it’s missing the effects that bottleneck DXVK in the first place.

cant hurt to try?

Actually it does if they restricted cross currency gifting. Had a huge headache with EposVox about that a week ago.

ok

If you can get me a Humble key for Steam, that might bypass the restrictions. Currently it’s price on Steam is over the 10% safety limit for cross currency gifting. Certain games can also specify from the dev that cross currency gifting is banned. Bioshock Inf doesn’t look to be that way, but it’s over the 10% threshold.

Huh, humble requires linking steam to get keys.
Not sure if that affects market? I’m in EU (kinda)

Nope, no dice.

Well, good luck with the gaming bud

Turns out the Steam version for Windows uses CEG DRM, which doesn’t work at all on Proton. Thank goodness I got the GoG version. Now if only GoG had the Linux version…

1 Like

Okay, getting back on topic here, there’s almost no information on if Wine allows passthrough of AVX instructions at all. For all I know, DXVK and the game is limited to SSE instructions through Wine. Would this explain some of the slowness?

I found out why Bioshock was so sluggish. Lutris and Steam have different logic when it comes to Esync enablement:

Unfortunately enabling Esync makes the game crash every 10 minutes. So it’s chicken or egg… Do you want stable sluggish performance or fast performance that crashes every 10 minutes?

2 Likes

I’ve about had it debugging Unreal Engine games with DXVK and Wine. It’s unstable and runs like crap in some stable configurations… I may just play all my Unreal games in VFIO from now on. That’s the least amount of headaches.

Big reveal:

So it turns out if your clocksource is anything other than tsc, (especially if it’s HPET) your UE4 over Wine and DXVK framerate will plummet. So it LITERALLY favors tsc clocksource rather than hpet. HPET is especially bad, being the worst option that reduces the MOST performance from UE4. I don’t know if the xen clocksource would behave different.

Try it yourself, set clocksource=hpet in your kernel boot arguments and watch UE4 in Wine and DXVK performance plummet off a cliff. I tested with an Intel 10920X and found it was the difference between 70fps and 5-10fps. using clocksource=acpi_pm didn’t take as bad of a hit to performance, but it still lost performance as opposed to using clocksource=tsc tsc=reliable.

And it turned out my 4960X system was using HPET not by choice, but because it doesn’t support tsc as a clock source. (kernel panic when I tried to enable tsc) This is where most of the performance loss was. So if you want to play UE4 games properly, you must have tsc clocksource support. acpi_pm loses less performance, but still loses performance vs tsc.

This is a weird thing to have because tsc desyncs between cores for system timers, but using a constant timer (a high precision one) causes UE4 to perform like crap. This means there needs to be work to make UE4 work better with HPET especially.

So it comes down to two things: Unoptimized games favor single core clock speed, and UE4 favors tsc clocksource over everything else. The Wine devs should make the HPET experience better, because most modern processors now default to tsc clocksource and nobody finds out the bugs only affecting hpet.

2 Likes

The final word on my 4960X bottleneck with Breathedge:

Latest DXVK, differing GPUs and Drivers, but same bottleneck in performance:

RX 580, Mesa 20.2.0, mesa_glthread=true, ACO:
45-48fps average

1660 Ti, Nvidia Vulkan Driver 440.48.02:
38-42fps average

Looks like on Nvidia, where the single thread performance is bad and relies too much on single thread, (the reason why War Thunder native runs like crap on Nvidia) turning off HPET doesn’t help as much. However, the RX 580 and Mesa 20.2.0, with multithreading and ACO on does benefit from HPET off.

The 10920X was still worth it. It could go upwards to 70fps in the most unoptimized section.

The Zen 3 5800X might be the first AMD CPU to play that game without issue.

Looks like Tech YES City found AVX2 CPUs are starting to become more relevant:

DXVK makes this problem worse on CPUs with AVX and not AVX2, and HPET makes it even worse on top of that.

I was considering a Xeon V2 but my board doesn’t support it, even though it has a C606 chipset…

Okay, I have a 5800X.

Lowest average in Breathedge was still 68-70fps, now bound by API limits and not IPC.

Crap. This means if the DX11 API is at it’s limit, DXVK performance will obviously not be good performing. Flight Simulator 2020 might be absolutely terrible in DXVK, and I wouldn’t doubt big cities like Lorville in Star Citizen would slideshow on even decent hardware over DXVK.

Even if you throw the fastest single core IPC at Wine games, Unreal Engine doesn’t give a optimized path for DXVK to work with and will forever run like crap if the API hits a bottleneck before your IPC becomes the bottleneck. Same with UE3 and DX9 with Bioshock Infinite and Hat in Time.

Breathedge especially got my blood boiling when a Media Foundation patch that worked perfectly in 18.04.5, totally stopped working in 20.04.1. What’s weirder is GE 5.8-2 works with both 20.04 and 18.04, but 20.04 does not work with GE 5.9 and GE 5.21. What’s even weirder is 20.04 runs PC Building Simulator on GE 5.21fine.

That’s a lost cause though because I’ve had enough of those guys’ toxicity.

TL;DR: Want more performance out of Unreal Engine 3 and 4 games? Run it in GPU Passthrough. API limits with DXVK will be your hard stop for performance when API bottlenecked. This is an inherent flaw in Unreal Engine to DXVK translation that cannot be solved.

It’s not over yet. DXVK-git just enabled SSE3 instructions and performance regressed 10fps vs the previous builds without it enabled. My OC 10920X used to hit 80fps on the 1.0.0.2 patch of Breathedge, now it only hits 70fps. Whether this is DXVK or Wine 6.5 causing the problems, we will never know, because I’m tired of dealing with performance regressions like this SPECIFICALLY with Unreal Engine. Wine 6.5 is broken in other ways too, like start.exe failing.

BTW, found out those Media Foundation patches require clearcpuid=514 NOT to be present. Then everything is rosy.

1 Like

This is nuts man! :sweat_smile: I get why you’re sick and tired of that…

I’ve noticed some games having tremendous improvements with DX12 renderer but not vulkan. One example is SCUM which launches with DX11 by default, but DX12 is pretty great with no real performance dips at 4k high settings, BUT Vulkan on the other hand is not much better then DX11…

SCUM may run better under Linux with DX12, unfortunately the game has EasyAntiLinux implementation like a allot of other games I play so its unfortunate. A linux build may come down the pipe, one day…

DX12 and VKD3D is still very much work in progress, and the only one you should pay attention to is VKD3D-Proton.

Surprised to learn Sea of Thieves is also UE4 so that’s a likely candidate for performance testing. (if you have friends)