protonscr

wine+dxvk vs wine vs native benchmarks

dxvkclosed performance
doitsujin/dxvk#67 · opened 2018-02-09 by pingubot · updated 2018-09-17 · 30 comments · github
Ppingubot 2018-02-09 github

Hi,

i know dxvk is still at a very early stage of development, but partly it is already working so well that i wanted to open that issue for sharing benchmark numbers where possible.

My System:
Opensuse Tumbleweed
Nivida GTX 970 Nvidia 390.25
Core i5 [email protected]
16 GB Ram

Benchmark/Game used:

Unigine Valley (Ultra settings, no antialiasing, 1920x1080)

wine+dxvk: FPS: 68,8, Min FPS 23,2, Max FPS 106,0, Points: 2874
wine : to slow to be tested, ~ 1/10 of wine+dxvk
native: : FPS: 81,1, Min FPS 24,4, Max FPS 131,5, Points:3393

So with only a few month of developement dxvk makes valley usable (on nvidia you need to work around the shader compiliation issue mentioned in #64 ) and has already ~ 85% of the native performance which is a fantastic achievement already. The gpu is not fully loaded (60-90%) , so there still is some overhead but i am sure optimization is still possible.

Edit: Heaven Numbers added

Benchmark/Game used:

Unigine Heaven (Ultra settings, no antialiasing, no tesselation, 1920x1080)

wine+dxvk: FPS: 76,2; Min FPS 18,4; Max FPS 163,8; Points: 1919
wine : fps cap at 60, so the benchmark would be useless
native: : FPS: 90,0; Min FPS 13,8; Max FPS 173,1; Points: 2275

-> Again, roughly 85% of the native speed. The gpu is partly loaded >90%, but dips down to 60%. The native bench keeps it fully busy .

Unigine Heaven (Ultra settings, 8xAA, no tesselation, 1920x1080)

wine+dxvk: FPS: 39,4; Min FPS 23,0; Max FPS 69,7; Points: 993
wine : fps cap at 60, so the benchmark would be useless
native: : FPS: 59,8; Min FPS 13,7; Max FPS 107,2; Points: 1506

-> This time, only roughly 66% of the native speed. The gpu was loaded > 95% all the time, with native it was 99% all the time. Honestly i expected that the perf gap would be decreasing when you run into the gpu limit, but instead the gap increased, don't know why.

Will prove additional numbers continuously.

Thx
Christian

Qqwertychouskie 2018-02-09 github

In this case even just using more aggressive compiler optimization flags may help. Also compiling Mesa as described at https://github.com/jjaxse2017/Mainline-Mesa-Expermental may also help. Considering dxvk has ~85% performance of native, and it is only using ~85% of the GPU, things are already looking quite good! I wouldn't be surprised if Linux game ports started using dxvk soon :)

SSveSop 2018-02-09 github

What GPU driver are you using?

Qqwertychouskie 2018-02-09 github

@SveSop I would assume the standard Nvidia driver, Nouveau doesn't even have Vulkan support yet: https://www.phoronix.com/scan.php?page=news_item&px=FOSDEM2018-Nouveau-Update.

SSveSop 2018-02-09 github

@qwertychouskie The "standard" driver could be several, as you are not "forced" to use 390.25 :) Was why i asked :)
I crash at a slightly different spot if i try to use dxvk with heaven.. Then again, i have made no attempts at that spir-v-tool thingy tho...

Qqwertychouskie 2018-02-09 github

Ah, driver version, makes sense :)

GGuy1524 2018-02-10 github

I am trying to get valley working, and for some reason, even the recompiled shaders crash the NVIDIA driver

Would any of you guys mind sharing your working shaders so that I can confirm I am generating them correctly? Thanks

EDIT: Nevermind, updating both SPIRV-Tools and my NVIDIA driver fixed the issue

Sssorgatem 2018-02-10 github

@qwertychouskie looking at those instructions for building mesa, it looks like most, if not all of it is done in the mesa-git AUR package in Arch Linux (but it also picks up your cofnigured CFLAGS, in my case also with -march=native).

It seems easier to install Manjaro and then mesa-git from the AUR to try benchmarks than the whole process described there.

GGuy1524 2018-02-10 github

On windows, lowest settings at 1080p, GTAV runs at 60fps on a GTX 960 with the spirv-opt workaround. On wine, it crashes

SSveSop 2018-02-12 github

@Guy1524

EDIT: Nevermind, updating both SPIRV-Tools and my NVIDIA driver fixed the issue

Did you compile the SPIRV-Tools yourself? Cos i could only find the latest binaries from Nov -17.
And what driver are you using? (I'm using 390.25)

Ppchome 2018-02-12 github

@SveSop

master-tot
Continuous build of the latest master branch by Appveyor and Travis CI

Instead of building manually, you can also download the binaries for your platform directly from the master-tot release on GitHub. Those binaries are automatically uploaded by the buildbots after successful testing and they always reflect the current top of the tree of the master branch.

SSveSop 2018-02-13 github

@pchome
Oki, from the looks of:

master-tot
@Khronoswebmaster Khronoswebmaster released this on Nov 9, 2017

I just assumed it was "latest release" nov9, and not a "continous build" :) Will try to update the tools then.

SSveSop 2018-02-13 github

Could have told me i had to repeat the spirv-opt tool again and again until it stopped crashing tho :)

After finally getting this to work, i must say i am pleasantly surprised by the performance so far :) Hopefully the nVidia shader compilation thing will be worked out, cos as i (and the rest of you who have gotten this working) saw when doing this for Valley/Heaven, shaders gets compiled several times during the run (and crash until its fixed with the tool). This is "ok" for a static benchmark like those two examples, but games where shaders tend to be build "all the time", its ofc a tad harder :)

Will do some more testing now that i have figured it out.

SSveSop 2018-02-13 github

@pingubot
Did some benchies with Unigine Valley/Heaven.
System:
Elementary OS Freya (Ubuntu 14.04)
Kernel: 4.15.2-xanmod3 - Custom
I7 2600K @4.2GHz
16GB Ram
MSI GTX 970 1400core/7200mem (nVidia 390.25)

All benchmarks was at 1920x1080 no tesselation/aa. Ultra quality

wine-vulkan(3.1)+dxvk
Valley - 82.5 fps / 3450 score (32.1 min/115.7 max)
Heaven - 92.2 fps / 2322 score (26.7 min/183.6 max)

wine-staging(2.18)
Valley - 78.7 fps / 3293 score (33.5 min/119.9 max)
Heaven - 88.6 fps / 2232 score (28.7 min/160.4 max)

Linux native (OpenGL)
Valley - 85.1 fps / 3558 score (36.5 min/139 max)
Heaven - 94.7 fps / 2384 score (13.2 min/174.7 max)

--
Very close to the native OpenGL performance. Would have been fun to compare this to DX11 under Windows, but i dont have dualboot atm, so no can do for me.

Ddumpsters 2018-02-14 github

I tried on windows now after compiling in arch but it doesn't seem to work anymore, like it won't hook to the game or something, previously it did work like when I posted on #7 (even though I still got weird glitches on skyrim), tried on both Fallout 4 and Skyrim SE and the HUD won't show up even with the env variables (no logs either).

Ddoitsujin maintainer 2018-03-08 github

Closing due to the lack of activity. Feel free to report performance-rlated issues if a game runs (significantly) worse than on wined3d, since that is kind of the goal here.

@dumpsters if you don't get logs, that means that DXVK is not used at all.

Ppingubot 2018-03-16 github

Hi,

just wanting to add another benchmark, the Dirt 2 Demo.

Everything maxed out, 4xMSAA, vsync off:

DXVK (Image-optimized build, 14.03): Avg 34fps, minimum 27fps
Wine 3.3-dev: Avg 24 fps, minimum 18 fps

So dxvk is much faster again, but it is also heavily bottleneced somewhere, cause the gpu is loaded max 50% here..

Cu,
Christia

TTRPB 2018-04-03 github

Has anyone done a comparison between DXVK and wine-pba? Would be interesting to see which is better.

SSveSop 2018-04-03 github

@TomBZombie I have done some benchmarks with Unigine benchmarks (Valley & Heaven), and PBA is a bit better in terms of fps (typically 85 with dxvk and 92 with pba for my system). CPU load is a lot lower with dxvk tho, so for cpu intensive games, i would think that DXVK would be a better solution.

The only "problem" atm with DXVK i guess is compatibility with other DX versions, as DXVK only works with "pure" directx11 programs. I say "pure", as there are games/apps that is DX11, that still uses other DX functions not compatible with dxvk. A example of this would be World of Warcraft as it is now, cos it will use DX10 functions (i guess some shaders.. not sure) when initializing even tho it is set to DX11. This may ofc change in the future with an update to the game engine. (There are other games too that spits out some DX10 errors when starting without me doing any tests of that).

Having almost the same fps with less cpu usage would absolutely be preferred when it comes to wine, and DXVK keeps improving all the time :)

SSveSop 2018-04-03 github

Did some tests today. Not sure what i should make of this tho... With latest DXVK build i pulled earlier today.
Tests were done with "Ultra" settings, "MSAA=None" and "1080p Fullscreen". Compared with wine-staging-3.5, wine-staging-3.5+PBA patches, and wine-staging-3.5+DXVK .dll's.

Valley:
PBA  - 92.5 fps (3870) 34.6/170.5
DXVK - 84.6 fps (3540) 35.4/157.8
Wine - 74.1 fps (3102) 29.4/111.4

Heaven:
PBA  - 91.5 fps (2305) 29.6/170.0
Wine - 85.4 fps (2150) 20.1/159.8
DXVK - 78.1 fps (1968) 28.7/156.7

Heaven Extreme tesselation:
PBA  - 72.9 fps (1835) 24.8/165.3
Wine - 68.7 fps (1729) 18.5/150.8
DXVK - 63.8 fps (1607) 22.7/146.3

Been a while since i did some comparison benchmarks, but seems as regular wine-staging beats DXVK in Unigine Heaven for some reason. Difference between wine-staging vs "PBA" is still around 10 fps, almost 20 in Valley.

FFlyingWombat 2018-05-19 github

I did some benchmarks with Anti-Aliasing today, and DXVK turned out significantly worse than everything else. No AA wasn't a big difference, but still worse. Has anyone else gotten results like this recently? Or is my system screwed up somehow?

First, some system info:

GeForce GTX 970:
info:    Driver: 396.18.11
info:    Vulkan: 1.1.73
linux-4.16.9
wine-staging-git 3.8.r9.g41b4cfa2+wine.3.8.r108.g48aeef69fc-1 
dxvk-git 20180517.3d9f7c7-1

All tests were on Ultra quality at 1920x1080
Heaven had Tessellation disabled.
Valley:

test               - Av FPS; score; min/max
8xAA:
Linux OpenGL       - 49.1; 2055; 27.9/83.3
Wine OpenGL        - 49.1; 2055; 25.9/83.3
Wine DX11-builtin  - 49.5; 2070; 17.2/87.9
Wine DX11-dxvk     - 24.1; 1007; 12.6/51.1

noAA:
Linux OpenGL       - 82.6; 3458; 36.4/138.8
Wine OpenGL        - 79.8; 3340; 27.6/128.9
Wine DX11-builtin  - 68.3; 2859; 26.6/107.3
Wine DX11-dxvk     - 77.8; 3254; 28.3/123.8

Heaven:

8xAA:
Wine OpenGL        - 63.8; 1607; 11.9/113.9
Wine DX11-builtin  - 63.3; 1594; 16.8/114.0
Wine DX11-dxvk     - 32.3;  813; 16.3/ 52.0

noAA:
Wine OpenGL        - 91.4; 2303; 12.0/171.9
Wine DX11-builtin  - 83.8; 2111; 25.5/170.7
Wine DX11-dxvk     - 78.1; 1966; 27.0/148.8

DXVK logs:
Heaven_d3d11_8xAA_dxvk.log
Heaven_d3d11_dxvk.log
Heaven_dxgi_8xAA_dxvk.log
Heaven_dxgi_dxvk.log
Valley_d3d11_8xAA_dxvk.log
Valley_d3d11_dxvk.log
Valley_dxgi_8xAA_dxvk.log
Valley_dxgi_dxvk.log

SSveSop 2018-05-19 github

@FlyingWombat Scores look somewhat similar to mine, but i did not test AA. DXVK probably does not do too well with Unigine engine. Not sure what's up with that horrible AA performance tho, but i might give it a test too.

If you have the time, you could check out the PBA patchset for comparison :)
https://github.com/SveSop/wine-pba-rebased (Patches on top of wine-staging)

SSveSop 2018-05-19 github

@FlyingWombat Hmm.. odd..
I am using 396.24 and tried 8xAA on Valley with wine-staging-3.8, but that was a slideshow with 4'ish fps. Not sure what happened with that tbh. Trying PBA patchset crashed with heap memory problems, but DXVK got 20-25 fps'ish. Did not run the full benchmark tho, due to me not being able to run this with 8xAA on wine-staging.

Some strange setting for my part perhaps? Gonna do some investigating :)

EDIT:
Oki. Found that wine-git (8e9ea7a8a163147012908bad696a539454654d8f) fixed AA issues that wine-3.8 had.. so that was the reason Valley was useless with wine-3.8. Not sure what wine commit that did this, but definitely worth some investigation. Wined3d seems to be slightly ahead of DXVK in those Unigine Benchmarks... xept for Unigine Superposition tho, cos that is just a blurry mess with wined3d still.

Zzaps166 2018-05-19 github

My results (GTX 1080, 3840x2160, DXVK 5cc3afcf302029dd9d2b73a1efa5acca7002bf2f)

Linux + Wine + NVIDIA 396.18.11 (Flipping OFF, Compositor OFF):

  • Tomb Raider DXVK (maximum graphics preset except Tesselation)
    • Menu - 45 FPS
    • Some scene - 45 FPS
    • Graphics test - 38 FPS (33 FPS - 44 FPS)
  • Unigine Valley DXVK - 44.7 FPS (25.9 FPS - 74.1 FPS)
  • Unigine Valley OpenGL - 48.9 FPS (31.4 FPS - 79.8 FPS)

Linux (native apps) + NVIDIA 396.18.11 (Flipping ON, Compositor OFF):

  • Unigine Valley OpenGL - 48.8 FPS (32.6 FPS - 79.5 FPS)
  • Vulkan Examples, Terrain Tesselation - 1016 FPS
  • Vulkan Examples, Subpasses - 169 FPS
  • Vulkan Examples, Texture - 2143 FPS
  • Vulkan Examples, Indirect draw - 106 FPS

Windows + NVIDIA 397.76 (exclusive full screen):

  • Tomb Raider DXVK (maximum graphics preset except Tesselation)
    • Menu - 60 FPS
    • Some scene - 61 FPS
    • Graphics test - 45 FPS (35 FPS - 56 FPS)
  • Tomb Raider DX11 (maximum graphics preset except Tesselation)
    • Menu - 70 FPS
    • Some scene - 82 FPS
    • Graphics test - 62 FPS (48 FPS - 74 FPS)
  • Unigine Valley DXVK - 52.5 FPS (32.5 FPS - 88.5 FPS)
  • Unigine Valley OpenGL - 51.3 FPS (30.1 FPS - 84.9 FPS)
  • Unigine Valley DX11 - 58.1 FPS (32.7 FPS - 97.2 FPS)
  • Vulkan Examples, Terrain Tesselation - 1220 FPS
  • Vulkan Examples, Subpasses - 228 FPS
  • Vulkan Examples, Texture - 3333 FPS
  • Vulkan Examples, Indirect draw - 108 FPS

Unigine Valley is slower on Vulkan that OpenGL on Linux, but faster on Windows than OpenGL. Generally all Vulkan apps which I tested on Linux runs slower. In one UE4 4.19 app I've got ~200 FPS on OpenGL on Linux, ~190 FPS on OpenGL and Vulkan on Windows and ~120 FPS on Vulkan on Linux.

SSveSop 2018-05-19 github

@zaps166 Lets hope this is due to the nVidia team tweaking stuff on their Vulkan compiler.. If not, its kind of bad news i must say :(

@FlyingWombat Did some more testing, and for my GTX970 w/396.24 driver i came up with:

Unigine Valley 8xAA
Staging: 48.1 fps (2011) 26.6/87.9
PBA:      48.2 fps (2015) 26.4/87.4
DXVK:   24.6 fps (1030) 12.8/51.6

REMARK: As this is about DXVK issues, and not "PBA" issues, but for testing and comparing:

I had to use FireRat's patch to tweak the GEO_HEAP and CB_HEAP values for PBA, but that kind of had a detriment in performance for some reason, as using the same values i describe below scored a lot less with noAA.
With 8xAA i was not able to run Unigine Valley with __PBA_GEO_HEAP=512, but had to up it to 1536. (512 is default, and crashed with a error immediately, while 1024 just got a black screen with no error) I also tested __PBA_CB_HEAP=128 but got a slightly worse result than upping that to 256.

Rrandom2324 2018-09-16 github

Radeon 7970
LLVM 8.0.0 svn
Mesa Git

Dirt 3:
All settings maxed out
DXVK 0.72 23fps
Windows 10 132fps

Setting Shadows to High instead of Very High gives a good boost 68fps, where it has just a small impact in Windows 10.
MSAA 4x instead of 8x restores performance to 100fps. Again just a small impact in Win10.

Ddoitsujin maintainer 2018-09-16 github

Mesa doesn't support DCC in combination with MSAA, so a large performance impact is to be expected.

Rrandom2324 2018-09-17 github

So this is worth opening a mesa bug?

Further testing using the integrated benchmark shows the following results:
MSAA OFF, Shadows very high: 29fps
MSAA OFF, Shadows high: 134fps
MSAA 2x, Shadows high: 117fps
MSAA 4x, Shadows high: 96fps
MSAA 8x, Shadows high: 66fps

So very high shadows causing a major performance drop. Should I open an extra bug ticket for this?

Ddoitsujin maintainer 2018-09-17 github

They are aware of the MSAA issue, so no. As for the shadows, please let me take a look at it first, I don't know what the game is doing on very high settings.

Llieff 2018-09-17 github

May be it's GPU mem pressure? With GTX980/4GB and SOTTR I need to drop texture quality Ultra->High to make it stable.
Does dxvk supports some kind of GPU mem de-fragmentaion?
Not sure if it's hard to implement, but gpuopen allocator have this feature https://gpuopen.com/gaming-product/vulkan-memory-allocator/ .

Ddoitsujin maintainer 2018-09-17 github

It doesn't. And it's not as easy as just replacing the memory allocator, it's a huge amount of work because all affected resource need to be copied, all affected views need to be recreated, and all that has to happen in a thread-safe manner.

Nothing extracted yet.