doitsujin / dxvk

Vulkan-based implementation of D3D8, 9, 10 and 11 for Linux / Wine
zlib License
13.18k stars 851 forks source link

War Thunder (Not Native Version) #359

Closed jarrard closed 5 years ago

jarrard commented 6 years ago

EDIT: only 32bit client works, and gives better FPS with higher settings then NATIVE client. EDIT2: only 64bit client works for me now, I'm ok with this.

This game has a opengl native version but since v1.77 it has been pretty terrible performance because the developer refuses to move from OpenGL version 3.3. (presumably for MacOS sake even thought they have implemented Metal on that platform).

As such I wanted to get this running on DXVK but it doesn't appear to even launch, the issue could be Wine related.

Software information

Warthunder, Mostly max, have tried to launch on low settings also.

System information

Apitrace file(s)

Log files

Relevant errors:

00a5:err:winediag:wined3d_dll_init Setting multithreaded command stream to 0.
00a5:err:ole:RevokeDragDrop invalid hwnd (nil)
00d7:err:seh:setup_exception stack overflow 1680 bytes in thread 00d7 eip 000000007bc7c3a9 esp 0000000000140f80 stack 0x140000-0x141000-0x240000
Assert( Assertion Failed: Illegal termination of worker thread 'SocketThread' ):c:\buildslave\steam_rel_client_win32\build\src\tier0\threadtools.cpp:3126
\src\common\workthreadpool.cpp (399) : Assertion Failed: pWorkThread->m_bFinished is false but thread is not running
Assert( Assertion Failed: pWorkThread->m_bFinished is false but thread is not running ):c:\buildslave\steam_rel_client_win32\build\src\common\workthreadpool.cpp:399

The game just closes itself at this point. This game is free for anyone to try and test it out. No idea what the issue is. If anyone can figure out whats going on that be great, would love to test this one.

ghost commented 6 years ago

Try to run it with wined3d (without dxvk), if it will still not work - that's probably an issue with wine itself

jarrard commented 6 years ago

Yeah I think I have tried it before without dxvk and it does the same thing. So unfortunately its probably some wine problem and since it has a native option it will likely be ignored/removed from their db.

Its a shame because Gaijin really ruined the native client with v1.77, guess I'll need to wait until Vulkan update (they claim their doing it, someday....)

Nerellus commented 6 years ago

War Thunder works here with wine-staging+dxvk (33e511485c1e6814eccbf679ea866e40b082729f).

2018-05-08_02 59 31_i3shot

I haven't tested it extensively. The 64-bit client doesn't launch for me, so use a 32-bit wine prefix or launch the 32-bit aces.exe (located at /path/to/War Thunder/win32/aces.exe) directly.

doitsujin commented 6 years ago

@jarrard in my experience, wine devs do care about applications that have a native Linux version if they highlight some missing features or bugs. Same goes for DXVK, although I generally treat games that have a decent native version as lower-priority than Windows-only games.

@portentum you might want to share your exact wine setup and maybe game configuration for others.

Nerellus commented 6 years ago

@doitsujin I'll try to give an example for others. It's just a barebones 32-bit wine prefix though.

This is for loose dxvk dlls.

Again, I haven't tested the game extensively so I don't know if there are settings that will not work. The defaults worked for the screenshot above, I then closed the game and increased the settings to high. The game launched and ran as before. Performance so far seems much higher than the native Linux OpenGL client.

jarrard commented 6 years ago

Yeah I tried only 64bit client. Will give 32bit a go.

UPDATE: Yep it works, and on Ultra it runs better then Native Linux with medium settings, LMAO. Just as I suspected.. Had a sound issue at first, but fixed that somehow.

You don't need a 32bit prefix, works in 64bit prefix if 32bit dxvk files are also installed. Looks good non the less, might post this on the WT forums sometime.

There is 1 minor issue, in hangar there is a dark square around the tank/plane, it does not exist when actually playing so I don't think its serious. This game works with and without the new NV Compiler.

ghost commented 6 years ago

@doitsujin the proble with War Thunder - Linux port has very shitty performance, so with DXVK you can get a lot of improvement :)

ghost commented 6 years ago

Hmm, strange, War Thunder freezes shortly (2-4 seconds) after loading main menu for me... (GTX 750). But that's probably a wine-staging/wine problem:

0032:fixme:heap:RtlSetHeapInformation 0x110000 0 0x33fde8 4 stub
0032:fixme:heap:RtlSetHeapInformation 0x2a60000 0 0x33fde8 4 stub
0032:fixme:heap:RtlSetHeapInformation 0x2950000 0 0x33fde8 4 stub
0032:fixme:toolhelp:CreateToolhelp32Snapshot Unimplemented: heap list snapshot
0032:fixme:toolhelp:Heap32ListFirst : stub
0032:fixme:dbghelp:elf_search_auxv can't find symbol in module
0032:fixme:dbghelp:elf_search_auxv can't find symbol in module
0032:fixme:dbghelp:elf_search_auxv can't find symbol in module
0032:fixme:dbghelp:elf_search_auxv can't find symbol in module
0032:fixme:dbghelp:elf_search_auxv can't find symbol in module
0032:fixme:d3d:wined3d_dxtn_init Wine cannot find the txc_dxtn library, DXTn software support unavailable.
003a:fixme:ver:GetCurrentPackageId (0x380fe9c (nil)): stub
003a:fixme:ole:CoInitializeSecurity ((nil),-1,(nil),(nil),0,3,(nil),0,(nil)) - stub!
003a:fixme:wbemprox:wbem_locator_ConnectServer unsupported flags
003a:fixme:wbemprox:client_security_SetBlanket 0xf4e2d82c, 0x31ec100, 10, 0, (null), 3, 3, (nil), 0x00000000
003a:fixme:wbemprox:client_security_Release 0xf4e2d82c
0032:fixme:nvapi:unimplemented_stub function 0x694d52e is unimplemented!
0032:fixme:nvapi:unimplemented_stub function 0x7f9b368 is unimplemented!
0032:fixme:nvapi:unimplemented_stub function 0x7f9b368 is unimplemented!
0032:fixme:nvapi:unimplemented_stub function 0x7f9b368 is unimplemented!
0032:fixme:nvapi:unimplemented_stub function 0x7f9b368 is unimplemented!
0032:fixme:nvapi:unimplemented_stub function 0x7f9b368 is unimplemented!
info:  Enabled instance layers:
info:  Enabled instance extensions:
info:    VK_KHR_surface
info:    VK_KHR_win32_surface
0032:fixme:vulkan:wine_vkGetInstanceProcAddr Unsupported device or instance function: "vkCreateDebugReportCallbackEXT".
0032:fixme:vulkan:wine_vkGetInstanceProcAddr Unsupported device or instance function: "vkDestroyDebugReportCallbackEXT".
0032:fixme:vulkan:wine_vkGetInstanceProcAddr Unsupported device or instance function: "vkDebugReportMessageEXT".
info:  GeForce GTX 750:
info:    Driver: 396.18.8
info:    Vulkan: 1.1.73
info:    Memory Heap[0]: 
info:      Size: 2048 MiB
info:      Flags: 0x1
info:      Memory Type[7]: Property Flags = 0x1
info:      Memory Type[8]: Property Flags = 0x1
info:    Memory Heap[1]: 
info:      Size: 5939 MiB
info:      Flags: 0x0
info:      Memory Type[0]: Property Flags = 0x0
info:      Memory Type[1]: Property Flags = 0x0
info:      Memory Type[2]: Property Flags = 0x0
info:      Memory Type[3]: Property Flags = 0x0
info:      Memory Type[4]: Property Flags = 0x0
info:      Memory Type[5]: Property Flags = 0x0
info:      Memory Type[6]: Property Flags = 0x0
info:      Memory Type[9]: Property Flags = 0x6
info:      Memory Type[10]: Property Flags = 0xe
info:  D3D11CoreCreateDevice: Probing D3D_FEATURE_LEVEL_11_0
info:  D3D11CoreCreateDevice: Using feature level D3D_FEATURE_LEVEL_11_0
warn:  Vulkan extension VK_EXT_vertex_attribute_divisor not supported
warn:  Vulkan extension VK_KHR_maintenance2 not supported
info:  Enabled device extensions:
info:    VK_KHR_descriptor_update_template
info:    VK_KHR_sampler_mirror_clamp_to_edge
info:    VK_KHR_maintenance1
info:    VK_KHR_shader_draw_parameters
info:    VK_KHR_swapchain
0032:err:nvapi:NvAPI_D3D11_SetDepthBoundsTest Failed to get wined3d device handle!
warn:  DXGI: MakeWindowAssociation: Ignoring flags
info:  DxgiVkPresenter: Recreating swap chain: 
  Format:       VK_FORMAT_B8G8R8A8_UNORM
  Present mode: VK_PRESENT_MODE_IMMEDIATE_KHR
  Buffer size:  1920x1080
0032:fixme:nvapi:unimplemented_stub function 0xdcb616c3 is unimplemented!
0032:fixme:nvapi:unimplemented_stub function 0xdcb616c3 is unimplemented!
0032:fixme:nvapi:unimplemented_stub function 0xdcb616c3 is unimplemented!
0032:fixme:nvapi:unimplemented_stub function 0x7f9b368 is unimplemented!
0032:fixme:nvapi:unimplemented_stub function 0xbaaabfcc is unimplemented!
0032:fixme:nvapi:unimplemented_stub function 0x6ff81213 is unimplemented!
0032:fixme:nvapi:unimplemented_stub function 0x7f9b368 is unimplemented!
0032:fixme:thread:SetThreadIdealProcessor (0x1e4): stub
0032:fixme:thread:SetThreadIdealProcessor (0x1ec): stub
0032:fixme:win:GetRegisteredRawInputDevices (pRawInputDevices=(nil), puiNumDevices=0x33f8f8, cbSize=12) stub!
0032:fixme:win:GetRegisteredRawInputDevices (pRawInputDevices=0x94b1b8f0, puiNumDevices=0x33f8f8, cbSize=12) stub!
0032:fixme:win:GetRegisteredRawInputDevices (pRawInputDevices=(nil), puiNumDevices=0x33fa44, cbSize=12) stub!
0032:fixme:win:GetRegisteredRawInputDevices (pRawInputDevices=0x94b1b8f0, puiNumDevices=0x33fa44, cbSize=12) stub!
0032:err:ole:CoGetClassObject class {22420dba-2927-4d71-b6b8-028982a62b72} not registered
0032:err:ole:CoGetClassObject no class object {22420dba-2927-4d71-b6b8-028982a62b72} could be created for context 0x1
0054:fixme:avrt:AvSetMmThreadCharacteristicsW (L"Audio",0x4c2fe74): stub
0032:fixme:nvapi:unimplemented_stub function 0xe3640a56 is unimplemented!
0032:fixme:nvapi:unimplemented_stub function 0x7f9b368 is unimplemented!
0032:fixme:imm:ImmGetOpenStatus (0x32044e8): semi-stub
0032:fixme:imm:ImmReleaseContext (0x2006a, 0x32044e8): stub
^C0069:fixme:console:CONSOLE_DefaultHandler Terminating process 31 on event 0
ghost commented 6 years ago

Update: it doesn't freeze while run with vsync on AND IT RUNS SO SMOOTHLY OH!

jarrard commented 6 years ago

I don't get any freezing without vsync (the hanger is fps capped). Perhaps your videocard is just pushing itself too hard with a uncapped framerate?

And yes v1.77 patch ruined it for nvidia cards under Linux(native). I use to get 70-80fps all the time at max settings, now I cannot get that with medium-low settings, and the framerate smoothing is terrible (desynced frame render times).

ghost commented 6 years ago

@jarrard I didn't have this issue in other games, and it hangs in War Thunder exactly at the moment when FPS counter in the bottom left corner appears

jarrard commented 6 years ago

well its likely the nvidia drivers have very different code from a 750 vs 1080ti so bugs may only appear in select series.

This can be flagged as 32bit working, 64bit not (wine related bug).

davvvve1 commented 6 years ago

Im a noob , but i think wine needs more dotnet stuff in 64 bit .

ghost commented 6 years ago

@davvvve1 no, .net is not related to that issue.

jarrard commented 6 years ago

-Game sometimes will freeze just spawning in a vehicle in general. But can happen at any time at random. (new compiler may resolve this)

-There is a black texture on ground in hangar (only), occurs also with new compiler.

-There is some skipping or desyncing of frames as you can get pulsing and skippy effect even with good framerate.

Enabling NV newcompiler seems to help but I don't know if its a full solution just yet, loads more testing required. Might introduce other issues such as odd dark shadowing on bushes at close range (could be game engine issue).

jediafr commented 6 years ago

Got it running on wine 3.8 staging with 32 bits vulkan. Nvidia Gtx 950 / Vulkan 1.1.70. 105/120 fps on average. good. Artefacts on the aluminium texture (it is rendered in black instead). Dont play on fullscreen : switching windows shall make you loose the Tab key and the Esc key.

jarrard commented 6 years ago

Yes its established the 32bit version works, the launcher will determine which version to run on launch automatically unless you edit the config.blk file.

00Asgaroth00 commented 6 years ago

How do you force the 32-bit client by editing config.blk?

jediafr commented 6 years ago

Hi,

I pointed wine to execute the aces.exe in my 32bits folder (i.e) SteamLibrary/steamapps/common/War Thunder/win32

The config.blk is not used in this case but to be imported if you want to keep your shorcuts bindings from one WT to another...

On Mon, May 28, 2018 at 2:29 PM, 00Asgaroth00 notifications@github.com wrote:

How do you force the 32-bit client by editing config.blk?

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/doitsujin/dxvk/issues/359#issuecomment-392514276, or mute the thread https://github.com/notifications/unsubscribe-auth/AS0R5RdCT5yT7zosx8-rlOXpST9VKyLmks5t2-2dgaJpZM4T18-Y .

-- Kinds regards,

Jean-denis.

bobwya commented 6 years ago

@jarrard

Speaking as one of the WineHQ AppDB admins... As doitsujin stated the WineHQ AppDB is quite happy to accept Windows applications that have a native Linux version available.

It would be pretty pointless to refuse to support these... In fact they can be more useful, then Windows-only applications, e.g. for performance testing!

jarrard commented 6 years ago

I can't get any useful debug info from why the 64bit version doesn't work. I will look at it again soon and see what it says. It quits very early on so barely initializes anything.

I added a bug report, at present I don't have much more info to provide other then whats given. Could be something real simple so I will wait until someone with more experience responds to it. https://bugs.winehq.org/show_bug.cgi?id=45265

Closing this issue since 32bit works well and the 64bit issue is unrelated to DXVK.

mik13ST commented 6 years ago

If you are running Arch or just keep getting empty WT error window before launching aces.exe, check that you have lib32-vulkan-icd-loader package. https://wiki.archlinux.org/index.php/Vulkan

LAKostis commented 5 years ago

JFYI - win64 client runs just fine with latest wine-staging (4.3 and 4.4) + dxvk 1.0.1. No more crashes!

jarrard commented 5 years ago

good to know, I'll give it a try sometime.

jarrard commented 5 years ago

JFYI - win64 client runs just fine with latest wine-staging (4.3 and 4.4) + dxvk 1.0.1. No more crashes!

Trying this with lutris now and win64 client and it crashes when logging in. TKG 4.3 Wine DXVK 1.0.1

Not sure what the issue is....

No idea, maybe you need special depends for the network part to work in wine? it freezes always on login. Try low graphics. No luck.

jarrard commented 5 years ago

BINGO, It was esync, game does not like esync for some reason. Maybe I have it setup wrong for it.

jarrard commented 5 years ago

Using the 64bit client now, and DXVK 1.1 causes it to crash just after login screen as it pans to hangar. DXVK 1.0.2 however works fine!

This is with TKG4.4

doitsujin commented 5 years ago

@jarrard please bisect. Also, next time, please open a new issue instead of re-opening an unrelated one.

doitsujin commented 5 years ago

Can't reproduce, game starts up fine here (note that I'm using the Steam version). Bildschirmfoto-661

jarrard commented 5 years ago

I was using Lutris included DXVK 1.1, so maybe that isn't same. Also I just launch via win64/aces.exe and use tkg-4.4 for prefix.

The game doesn't start up within linux steam for me with steamplay so lutris is only way it works atm.

doitsujin commented 5 years ago

I'm using Windows steam with wine-tkg 4.5 (not the very latest build, few days old).

Anyway, please bisect DXVK, I am unable to debug it.

What's your GPU/driver/whatever anyway? Some info would always be useful...

jarrard commented 5 years ago

Well it seems Lutris removed 1.1 DXVK so maybe it was compiled wrong, I'm going to manually install it now and test. 418.56-6 dkms driver on a 1080TI

doitsujin commented 5 years ago

I removed 1.1. It wasn't compiled wrong, it is just so broken that it shouldn't be shipped to a wider audience, and this bug is part of the problem.

jarrard commented 5 years ago

Do you still want me to bisect it? I dunno if I can do it now, haven't really done bisections before but I can certainly do it tomorrow sometime.

doitsujin commented 5 years ago

I can reproduce the crash with Vulkan validation layers enabled, but don't get any output from the layers because they get redirected somehow.

Anyway, of course I want to fix all the regressions, unless you want to complain that the next release still breaks the game.

doitsujin commented 5 years ago

False alarm, the validation layers crash because they report VK_EXT_host_query_reset as supported without providing the actual functionality. Still cannot reproduce the problem.

jarrard commented 5 years ago

Ok, well I just compiled the latest master and tested it (esync must be disabled or it crashes on login) and it still crashes while panning into hangar.

So I guess I'll bisect it, got any easy to follow guides I can use to bisecting? lol

doitsujin commented 5 years ago

https://git-scm.com/docs/git-bisect

Works fine for me with esync btw.

jarrard commented 5 years ago

ESYNC didn't work for myself and several others over at warthunder forum, most use nvidia hardware so that could be the issue. (esync works with most other games fine)

doitsujin commented 5 years ago

Well, if you're unwilling to do it then I'm unable to fix it, sorry. Please open a new issue if you get more info.

jarrard commented 5 years ago

EDIT: I'll work on figuring out git bisect, I have found some more useful guides. :)

jp7677 commented 5 years ago

EDIT: I'll work on figuring out git bisect, I have found some more useful guides. :)

Hi @jarrard, if you are able to clone and build then you're certainly able to bisect, it is much simpler than you think once you get what bisecting does. Essentially it is really just a kind of simple wizard within git that checks out several versions between two points in the git history and asks you to build/test every checked out commit plus report back if you experienced the regression you were looking for.

jarrard commented 5 years ago

Testing now, sorry it took so long for me to get to it.

I've already found the bisect that causes the crash, but will continue testing rest.

War Thunder DXVK GIT Good: [0d889e0dcd41d2b848cabf5fd584ce0638d0eaeb] [dxvk] Implement depth-stencil unpacking [03881dde72be7c8fbfd754847705bc92aca031f7] [dxvk] Implement blitImage function [8f7e6065838ff6822631a923ce4cc6f4fb4a8fda] [dxvk] Enable VK_EXT_conditional_rendering if available [acdb989cfa1847ac896670936b15ef857de20f6c] [dxvk] Implement conditional rendering [7e16c4cda1ecd08cc0151a23b52cb053c30fde96] [d3d11] Remove unused revision field from D3D11Query

War Thunder DXVK GIT Bad: [3a3d7fb3782948c3373f3448e5ff42d837a119ae] [d3d11] Properly implement SetPredication [d81146e3d20280e7a3621568fc48dc4744a63482] [d3d11] Allocate predicate buffer for predicates

:040000 040000 8c7afe748c1d982c38dc44882c7fa63d88245404 121eb1f55c0eca9f404777341798953059ce0463 M src

The bad bisects tested causes war thunder to crash after login when its panning to the hangar. They seem to be new d3d11 implementations? I hope this helps.

doitsujin commented 5 years ago

@jarrard which commit did it mark as the "first bad" commit?

FWIW I cannot reproduce the problem on my Nvidia machine.

jarrard commented 5 years ago

d81146e I believe, that's what it said was first bad one but in actual practice of testing 3a3d7fb was first I marked as bad. So not sure which is correct.

Is your nvidia machine 10 series card? maybe this is specific to 10 series cards?

doitsujin commented 5 years ago

@jarrard can you test this build please: dxvk-no-predication.tar.gz

It effectively disables predication. War Thunder actually uses this feature (it's the only game I know of that does).

jarrard commented 5 years ago

Yes that one appears to work, no hang when panning to hangar vehicle at startup.

doitsujin commented 5 years ago

Weird. I asked a few users to test this and it works fine (without disabling predication) on a GTX 1050, GTX 980 Ti, and my old GTX 670. You're the only one having issues with it so far.

ForlornWongraven commented 5 years ago

BTW the native linux client has a vulkan implementation that you can enable via commandline. It outperforms wine + dxvk. https://www.reddit.com/r/Warthunder/comments/8ul51x/howto_run_war_thunder_with_vulkan/

jarrard commented 5 years ago

The native vulkan client crashes after 1-3 battles, its extremely unstable and often has window manager conflicts. (confirmed by countless people in the wt linux forum)

As for why Predication doesn't work for me, I dunno, I'm using the arch provided driver, I do have a reshade enabled (lumasharpen) but the issue still happens even when that is disabled.