HansKristian-Work / vkd3d-proton

Fork of VKD3D. Development branches for Proton's Direct3D 12 implementation.
GNU Lesser General Public License v2.1
1.86k stars 194 forks source link

Deus Ex: Mankind Divided #1492

Open JIStream opened 1 year ago

JIStream commented 1 year ago

The game freezes seemingly randomly during gameplay, sound keeps going. Also semi-consistently freezes when going to tab menu into documents section (emails, notes and other stuff is in there). DX11 version doesn't suffer from these issues.

Software information

Tried on Proton 7.0-6, Experimental, GE-53 and 34, all produce same results. I suspect that these lines from log are important (the game froze on opening documents section):

3514.952:003c:0050:fixme:ntoskrnl:kernel_object_from_handle No constructor for type L"Section"
3514.953:003c:0050:fixme:ntoskrnl:kernel_object_from_handle No constructor for type L"Section"
3514.953:003c:0050:fixme:ntoskrnl:kernel_object_from_handle No constructor for type L"Section"
3514.954:003c:0050:fixme:ntoskrnl:kernel_object_from_handle No constructor for type L"Section"
3514.954:003c:0050:fixme:ntoskrnl:kernel_object_from_handle No constructor for type L"Section"
3514.955:003c:0050:fixme:ntoskrnl:kernel_object_from_handle No constructor for type L"Section"
winevulkan/queue_signaller_worker: Fence wait failed, vr -4.
winevulkan/queue_signaller_worker: Fence wait failed, vr -4.
3591.735:0108:0120:fixme:oleacc:find_class_data unhandled window class: L"#32769"
3633.664:0108:0120:fixme:oleacc:find_class_data unhandled window class: L"#32769"

System information

Log files

steam-337000.log

runar-work commented 1 year ago

Got the following in my kernel log when it froze in the menu:

[  730.401301] NVRM: GPU at PCI:0000:08:00: GPU-a8fb3a3a-9dd5-b430-1b78-cb1f1ecd6079
[  730.401308] NVRM: Xid (PCI:0000:08:00): 13, pid='<unknown>', name=<unknown>, Graphics Exception on GPC 0: SAVE_RESTORE_ADDR_OOB
[  730.401323] NVRM: Xid (PCI:0000:08:00): 13, pid='<unknown>', name=<unknown>, Graphics Exception: ESR 0x500900=0x80000001
[  730.401341] NVRM: Xid (PCI:0000:08:00): 13, pid='<unknown>', name=<unknown>, Graphics Exception on GPC 1: SAVE_RESTORE_ADDR_OOB
[  730.401357] NVRM: Xid (PCI:0000:08:00): 13, pid='<unknown>', name=<unknown>, Graphics Exception: ESR 0x508900=0x80000001
[  730.401377] NVRM: Xid (PCI:0000:08:00): 13, pid='<unknown>', name=<unknown>, Graphics Exception on GPC 2: SAVE_RESTORE_ADDR_OOB
[  730.401394] NVRM: Xid (PCI:0000:08:00): 13, pid='<unknown>', name=<unknown>, Graphics Exception: ESR 0x510900=0x80000001
[  730.401628] NVRM: Xid (PCI:0000:08:00): 13, pid=3200, name=DXMD.exe, Graphics Exception: ChID 00f4, Class 0000c597, Offset 00000000, Data 00000000

I didn't get any random hangs while playing, so I'm not sure if that's a separate issue.

Adding VKD3D_CONFIG=force_initial_transition to the launch options solved the menu problem for me, at least.

runar-work commented 1 year ago

It would be great if you could try the VKD3D_CONFIG=force_initial_transition option and report back if it fixes your freeze issues.

JIStream commented 1 year ago

It seems it helped with the menu freeze, still hanged after around ~30-40 minutes of gameplay though. I'll attach the log file from latest Proton-GE with this freeze. Thanks for your help.

steam-337000.log

JIStream commented 1 year ago

Found one more area where the game crashes somewhat consistently. Shooting Range inside TF29 headquarters, had 3 consecutive crashes there during the target practice. Also, not sure if it's just a placebo but disabling steam overlay made the game less prone to freeze, it only froze 2 times after 3-4 hours of gameplay whereas before it usually did after 30 minutes to 1 hour. (I saw something about steam overlay crashing in system log, not sure if it's what triggers the problem or it just crashes after the game hanged). Attaching proton log with those 3 crashes from shooting range.

steam-337000.log

doitsujin commented 1 year ago

FWIW the D3D12 renderer of this game is known to be extremely buggy to the point where it's half-broken even on Windows (lots of broken things going on like out-of-bounds index buffer access etc which can lead to random geometry being rendered), not sure if it's worth spending a lot of time on this.

I'd strongly recommend just using D3D11 for this game.

JIStream commented 1 year ago

Well, other from the crashes in the shooting range it mostly plays alright, haven't noticed anything weird. DX11 stutters a lot. I'll stick to DX12 and switch to DX11 for problematic areas like shooting range if more of those exist.

mbriar commented 1 year ago

If you use DXVK 2.0 or newer and a driver with GPL support this game stutters much less in dx11 mode than dx12 and also has better performance, just like on windows.

JIStream commented 1 year ago

Latest Nvidia driver should support it but DX11 still stutters for me. Also I didn't notice it precompiling anything in the main menu (cpu usage was super low, so I assume no compilation). I'll try one more time.

Edit: Tried it, it's not stuttering non-stop (I would consider this playable) but definitely still does when entering new parts of the map, opening new computers or menus, DX12 has none of this, in fact I think it has no stutters at all.

Also, went to shooting range, and it's not DX12 at fault here, it crashes with DX11 too.

Edit2: Googled some more and shooting range is just bugged, it's a known glitch in the game, has nothing to do with anything at all.

shmerl commented 1 year ago

Not sure if related, but I encountered another weird issue with DX12 renderer for it. Just trying GOG version for the first time and noticed that after re-running the game, it just hangs unless I clean Mesa shader cache.

vkd3d-proton shows such errors:

3112.974:0020:02a0:fixme:vkd3d-proton:vkd3d_dxbc_compiler_check_index_range: Unhandled index range write mask 0x1 (0xf).
3112.974:0020:02a0:fixme:vkd3d-proton:vkd3d_dxbc_compiler_emit_dcl_index_range: Ignoring dcl_index_range 0x2 3.
3112.974:0020:0298:fixme:vkd3d-proton:vkd3d_dxbc_compiler_check_index_range: Unhandled index range write mask 0x1 (0xf).
3112.974:0020:0298:fixme:vkd3d-proton:vkd3d_dxbc_compiler_emit_dcl_index_range: Ignoring dcl_index_range 0x2 3.
3112.974:0020:027c:fixme:vkd3d-proton:vkd3d_dxbc_compiler_check_index_range: Unhandled index range write mask 0x1 (0xf).
3112.974:0020:027c:fixme:vkd3d-proton:vkd3d_dxbc_compiler_emit_dcl_index_range: Ignoring dcl_index_range 0x2 3.
3112.974:0020:0248:fixme:vkd3d-proton:vkd3d_dxbc_compiler_check_index_range: Unhandled index range write mask 0x1 (0xf).
3112.974:0020:0248:fixme:vkd3d-proton:vkd3d_dxbc_compiler_emit_dcl_index_range: Ignoring dcl_index_range 0x2 3.
3112.974:0020:02c0:fixme:vkd3d-proton:vkd3d_dxbc_compiler_check_index_range: Unhandled index range write mask 0x1 (0xf).
...

And dmesg shows such ones:

[ 2792.399459] amdgpu 0000:48:00.0: amdgpu: failed to get a new IB (-512)
[ 2792.399460] amdgpu 0000:48:00.0: amdgpu: failed to clear page tables on GEM object close (-512)

I managed to work around it by simply disabling shader cache for the game with MESA_SHADER_CACHE_DISABLE=true.

Thanks for the DX11 suggestion - I switched the game to that and now it works without disabling shader cache fine.