Dishonored1 crash

Questions about Wine on Linux
Post Reply
axet
Level 2
Level 2
Posts: 27
Joined: Sat Dec 21, 2019 8:52 am

Dishonored1 crash

Post by axet »

Hello!

I have dishonored1 (dx9) game which is crashing at start. I've tried to reinstall dxvk, reset wine prefix, reinstall the game - nothing helping. Suddenly I figured out that my second desktop can run this exact same wine prefix without issues.

So, I have two machines laptop (debian 12, x11, gnome, amdgpu) and desktop (debian 12, x11, gnome, amdgpu) booth looks like almost identical. Same prefix works on Desktop but failed on Laptop.

Later I figured out that, dishonored1 failed to run on Laptop on ANY other resolution than 1366x768 and works fine at specified resolution in gnome settings. But desktop machine can run it ALL resolutions. Errors:

wine errors:

0154:err:system:NtUserChangeDisplaySettings Changing L"\\\\.\\DISPLAY1" display settings returned -2.
0154:err:system:NtUserChangeDisplaySettings Changing L"\\\\.\\DISPLAY1" display settings returned -2.
0154:err:dbghelp:pe_load_msc_debug_info -Debug info stripped, but no .DBG file in module L"d3d9"



Game errors:

Result failed
at V:\dishonored\UnrealEngine3DLC07\Development\Src\D3D9Drv\Src\D3D9Device.cpp:701
with error D3DERR_NOTAVAILABLE



Similar wine bug: https://bugs.winehq.org/show_bug.cgi?id=39669

Tested on: wine 9.4, wine 9.0.0, wine 8.21, wine 7.22 (freezing before crash), wine works all machines lutris 7.2
axet
Level 2
Level 2
Posts: 27
Joined: Sat Dec 21, 2019 8:52 am

Re: Dishonored1 crash

Post by axet »

Same for wine 9.5
axet
Level 2
Level 2
Posts: 27
Joined: Sat Dec 21, 2019 8:52 am

Re: Dishonored1 crash

Post by axet »

Wine 9.6 same. Removing dxvk has no effect, game crashing with the same message:

017c:err:ntlm:ntlm_LsaApInitializePackage no NTLM support, expect problems
017c:fixme:sync:SetWaitableTimerEx (00000190, 09ABFB2C, 0, 00000000, 00000000, 00000000, 32) semi-stub
0100:fixme:gameux:GameExplorerImpl_VerifyAccess (02CD6668, L"Z:\\Binaries\\Win32\\Dishonored.exe", 01ACF670)
0100:fixme:system:NtUserSystemParametersInfo Unimplemented action: 59 (SPI_SETSTICKYKEYS)
0100:fixme:system:NtUserSystemParametersInfo Unimplemented action: 53 (SPI_SETTOGGLEKEYS)
0100:fixme:system:NtUserSystemParametersInfo Unimplemented action: 51 (SPI_SETFILTERKEYS)
0100:fixme:d3d:debug_d3dformat Unrecognized 0x34324644 (as fourcc: DF24) WINED3DFORMAT!
0100:fixme:d3d:wined3d_get_format Can't find format unrecognized (0x34324644) in the format lookup table.
0100:err:system:NtUserChangeDisplaySettings Changing L"\\\\.\\DISPLAY1" display settings returned -2.
0100:err:dbghelp:pe_load_msc_debug_info -Debug info stripped, but no .DBG file in module L"d3d9"
axet
Level 2
Level 2
Posts: 27
Joined: Sat Dec 21, 2019 8:52 am

Re: Dishonored1 crash

Post by axet »

How can I debug NtUserChangeDisplaySettings calls?
axet
Level 2
Level 2
Posts: 27
Joined: Sat Dec 21, 2019 8:52 am

Re: Dishonored1 crash

Post by axet »

Checking wine source, it seems like NtUserChangeDisplaySettings defined in 'dlls/win32u/sysparams.c', it is calling 'apply_display_settings' from 'dlls/winex11.drv' which is calling 'get_full_mode()' which failed with 0, causing DISP_CHANGE_BADMODE (-2).

Here is a more detailed wine log:

34207.874:0020:0024:trace:system:NtUserEnumDisplaySettings position 0x0, resolution 1440x810, frequency 59, depth 32, orientation 0.
34207.874:0020:0024:trace:system:NtUserChangeDisplaySettings L"\\\\.\\DISPLAY1" 0x1acd254 (nil) 0x4 (nil)
34207.874:0020:0024:trace:system:NtUserChangeDisplaySettings flags=FULLSCREEN
0024: get_process_winstation( )
0024: get_process_winstation() = 0 { handle=0054 }
0024: set_user_object_info( handle=0054, flags=00000000, obj_flags=00000000 )
0024: set_user_object_info() = 0 { is_desktop=0, old_obj_flags=00000001, name=L"WinSta0" }
0024: get_thread_desktop( tid=0024 )
0024: get_thread_desktop() = 0 { handle=0058 }
0024: set_user_object_info( handle=0058, flags=00000000, obj_flags=00000000 )
0024: set_user_object_info() = 0 { is_desktop=1, old_obj_flags=00000000, name=L"" }
0024: get_thread_desktop( tid=0024 )
0024: get_thread_desktop() = 0 { handle=0058 }
0024: set_user_object_info( handle=0058, flags=00000000, obj_flags=00000000 )
0024: set_user_object_info() = 0 { is_desktop=1, old_obj_flags=00000000, name=L"" }
0024: enum_key( hkey=0074, index=-1, info_class=0 )
0024: enum_key() = 0 { subkeys=0, max_subkey=0, max_class=0, values=1, max_value=0, max_data=0, modif=1da9486bb605862 (-14.1162950), total=10, namelen=0, name
=L"", class=L"" }
34207.874:0020:0024:trace:system:trace_devmode dmFields=BITSPERPEL,PELSWIDTH,PELSHEIGHT dmBitsPerPel=32 dmPelsWidth=1280 dmPelsHeight=720
0024: get_thread_desktop( tid=0024 )
0024: get_thread_desktop() = 0 { handle=0058 }
0024: set_user_object_info( handle=0058, flags=00000000, obj_flags=00000000 )
0024: set_user_object_info() = 0 { is_desktop=1, old_obj_flags=00000000, name=L"" }
0024: get_process_winstation( )
0024: get_process_winstation() = 0 { handle=0054 }
0024: set_user_object_info( handle=0054, flags=00000000, obj_flags=00000000 )
0024: set_user_object_info() = 0 { is_desktop=0, old_obj_flags=00000001, name=L"WinSta0" }
0024: get_thread_desktop( tid=0024 )
0024: get_thread_desktop() = 0 { handle=0058 }
0024: set_user_object_info( handle=0058, flags=00000000, obj_flags=00000000 )
0024: set_user_object_info() = 0 { is_desktop=1, old_obj_flags=00000000, name=L"" }
0024: get_thread_desktop( tid=0024 )
0024: get_thread_desktop() = 0 { handle=0058 }
0024: set_user_object_info( handle=0058, flags=00000000, obj_flags=00000000 )
0024: set_user_object_info() = 0 { is_desktop=1, old_obj_flags=00000000, name=L"" }
0024: get_thread_desktop( tid=0024 )
0024: get_thread_desktop() = 0 { handle=0058 }
0024: set_user_object_info( handle=0058, flags=00000000, obj_flags=00000000 )
0024: set_user_object_info() = 0 { is_desktop=1, old_obj_flags=00000000, name=L"" }
0024: enum_key( hkey=0074, index=-1, info_class=0 )
0024: enum_key() = 0 { subkeys=0, max_subkey=0, max_class=0, values=1, max_value=0, max_data=0, modif=1da9486bb605862 (-14.1164310), total=10, namelen=0, name=L"", class=L"" }
014c: *wakeup* signaled=2
0024: get_thread_desktop( tid=0024 )
0024: get_thread_desktop() = 0 { handle=0058 }
014c: close_handle( handle=025c )
014c: close_handle() = 0
0024: set_user_object_info( handle=0058, flags=00000000, obj_flags=00000000 )
0024: set_user_object_info() = 0 { is_desktop=1, old_obj_flags=00000000, name=L"" }
34207.875:0020:014c:trace:sync:GetQueuedCompletionStatus (000001A0,09EBFBCC,09EBFBC8,09EBFBC4,0)
34207.875:0020:014c:trace:sync:NtRemoveIoCompletion (0x1a0, 0x9ebfbc8, 0x9ebfbc4, 0x9ebfb60, 0x9ebfb58)
014c: remove_completion( handle=01a0 )
014c: remove_completion() = PENDING { ckey=00000000, cvalue=00000000, information=00000000, status=00000000 }
014c: select( flags=2, cookie=098ede24, timeout=0, size=8, prev_apc=0000, result={}, data={WAIT_ALL,handles={01a0}}, contexts={} )
014c: select() = TIMEOUT { apc_handle=0000, signaled=1, call={}, contexts={} }
014c: create_timer( access=001f0003, manual=0, objattr={rootdir=0000,attributes=00000080,sd={},name=L""} )
014c: create_timer() = 0 { handle=025c }
34207.875:0020:014c:trace:sync:NtSetTimer (0x25c,0x9ebfb2c,(nil),(nil),00000000,0x00000000,(nil))
014c: set_timer( handle=025c, expire=+0.0010000, callback=00000000, arg=00000000, period=0 )
014c: set_timer() = 0 { signaled=0 }
014c: select( flags=2, cookie=098edf04, timeout=infinite, size=16, prev_apc=0000, result={}, data={WAIT,handles={0198,0118,025c}}, contexts={} )
014c: select() = PENDING { apc_handle=0000, signaled=0, call={}, contexts={} }
34207.875:0020:0024:err:system:NtUserChangeDisplaySettings Changing L"\\\\.\\DISPLAY1" display settings returned -2.
Post Reply