ValveSoftware / Proton

Compatibility tool for Steam Play based on Wine and additional components
Other
24.6k stars 1.07k forks source link

Divinity Original Sin 2 appid 435150 #413

Open FreeLikeGNU opened 6 years ago

FreeLikeGNU commented 6 years ago

D:OS2 will not start after installation (SupportTool.exe). Some users report that using the EoCApp.exe and WINE dll override xaudio2_7 allows the game to run, but for me, I get only as far as a black screen and the game cursor with those modifications.

OS: Ubuntu 18.04 bionic Kernel: x86_64 Linux 4.15.0-32-generic Resolution: 1920x1080 DE: XFCE WM: Xfwm4 CPU: Intel Core i5-3470 @ 4x 6.3GHz GPU: GeForce GTX 1070 driver 396.54 RAM: 2030MiB / 15989MiB

KGOrphanides commented 6 years ago

I'm not having any joy with installation, either. No useful error message at command line, but installation appears to fail during or just after Microsoft DotNet framework.

EoCApp.exe can be made to run using standard Wine 3.0.2, but blackscreens.

Distro: Ubuntu Mate18.04 Kernel: 4.15.0-32-generic Resolution: 1920x1080 CPU: AMD Ryzen 1600 six-core GPU: 4GB AMD Radeon 6990 (Caymen), Padoka driver (see https://launchpad.net/~paulo-miguel-dias/+archive/ubuntu/mesa) RAM: 16GB

nstgc commented 6 years ago

It certainly seems to me as if the issue is .Net. In CrossOver I had been able to run it perfectly by simply specifying the executable (and skipping Steam).

FreeLikeGNU commented 6 years ago

I renamed EoCApp.exe to SupportTool.exe for it to load with proton. I used proton_winedbg_run (modified to override xaudio2_7) with the following results (black screen, game cursor):


./proton_winedbg_run2
wine: Call from 0x7b43c45c to unimplemented function mscoree.dll.CorIsLatestSvc, aborting
wine: Unimplemented function mscoree.dll.CorIsLatestSvc called at address 0x760023:0x7b43c45c (thread 0015), starting debugger...
WineDbg starting on pid 0035
0x000000007bc8f905 DbgBreakPoint+0x1 in ntdll: ret  
Wine-dbg>next
start_process () at /home/proton/proton/wine/dlls/kernel32/process.c:1067
1067        return entry( peb );
Wine-dbg>next
Thread ID=0041 not in our list of threads -> can't rename
Thread ID=0042 not in our list of threads -> can't rename
Thread ID=0043 not in our list of threads -> can't rename
Thread ID=0044 not in our list of threads -> can't rename

https://paste.ubuntu.com/p/XhcsthMtwd/

FreeLikeGNU commented 6 years ago

Tried again with some overrides and taskset -c 1 (as suggested by this workaround: https://bugs.winehq.org/show_bug.cgi?id=29215)

please see this gist: https://gist.github.com/FreeLikeGNU/efb26bebb40fc13a3fb78f2c0b0c78f5

nstgc commented 6 years ago

@FreeLikeGNU Did it work? I'm assuming it failed, but could you clarify?

FreeLikeGNU commented 6 years ago

@nstgc It failed with the same result of black screen and game cursor, but I got more information from the debug output, so maybe a step closer?

nstgc commented 6 years ago

Error logs are indeed a step forward!

notfood commented 6 years ago

I get the exact same error.

Some people have had success by just renaming the app. Most likely a video driver issue.

FreeLikeGNU commented 6 years ago

@notfood and anyone else getting this, it may help to post your system information from Steam's Help menu:

https://steamcommunity.com/sharedfiles/filedetails/?id=390278662

nstgc commented 6 years ago

https://gist.github.com/nstgc/02457d7920931a3f8d69cc7b9fa41a2c

notfood commented 6 years ago

https://gist.github.com/notfood/4937609d291bf79316eb60cc818fde17#file-steam-system-information-txt

FreeLikeGNU commented 6 years ago

Hmm could it be lack of hyperthreading or something about realtek audio chips that DOS2 on WINE does not like? I've tried testing in Mint, Manjaro and Xubuntu (with xaudio2_7 and renamed exe's) with the same results. On the same hardware running Xubuntu and Manjaro I can run Witcher 3 and Skyrim SE just fine.

notfood commented 6 years ago

I don't see a way to enable it. I can play Witcher 3 and Skyrim.

KGOrphanides commented 6 years ago

It's not very likely to be a Realtek audio issue - I'm using an external USB audio device and appear to be having the same difficulties.

In my case, at least, my bet is firmly on some combination of (maybe) DotNet and (very likely) driver issues with my powerful-but-ancient Radeon 6990.

Steam info, and I've switched to the stock radeon driver to provide more representative results while submitting Proton test results: https://gist.github.com/KGOrphanides/c0fe99f0d9824a8ab434907637c07400

sinnate commented 6 years ago

https://gist.github.com/Elisto/b27246d9bfa63f4fbd110616cec1cb2d same problem here black screen + mouse

notfood commented 6 years ago

D:OS2 updated to "Definite Edition" and can't run anymore.

FreeLikeGNU commented 6 years ago

The "bin" folder now contains the frontend. The steam/steamapps/common/Divinity Original Sin 2/ folder now contains "Classic" and "DefEd" folders each with their own set of executable. No luck getting the frontend working so far.

Sethox commented 6 years ago

I got the game to work without any add/winetricks/installation and even skipping the script installation from steam.

Since D:OS2 and D:OS2 Difinitive Edition is DRM free I can run the game without steam, thanks to this I could troubleshoot a little further.

I managed to set up a seperate WINEPREFIX for my own and use Wine 3.7 on it, the game just did not want to start, the black screen, I figure I had to install XACT. Out of curiosity I tried Wine-Staging 14 (cleaning my WINEPREFIX fully) I made it work without installing XACT, just like that, no problem playing the game. Even using Wine 3.14 had the same affect, no problems no extra installations. The problem was, it was without the steam-environment, as I can play the game it feels naked on the multiplayer side, I still want the steam version run like the steam version (how it's supposed to run).

So what I take from this is that I have wait until Valve update Proton to a newer Wine-base version.

Note: I used Lutris for this troubleshooting (Easier to force kill the WINEPREFIX when needed). I also may have LSI (Linux Steam Integration) on but it does not have any affect on this "experiment".

OS: Solus x86_64 Kernel: 4.17.17-87.current Shell: bash 4.4.19 Resolution: 1920x1080 DE: Budgie CPU: Intel i7-2600K (8) @ 3.800GHz GPU: AMD ATI Radeon R9 290 Total Memory: 20040MiB

FreeLikeGNU commented 6 years ago

@Sethox maybe I'm getting a bit off topic here but here is output of my fresh wineprefix of wine-staging 3.14 with DXVK .70 (no xact) with Witcher3 (runs great) and D:OS2 DE (blackscreen). I really dont know what to make of this or the fact that DOS2 runs for some of us but not others. Maybe there is some other system configuration that is blocking this!?

https://gist.github.com/FreeLikeGNU/5d438df7aa8a6b8c851f768e4839722c

FreeLikeGNU commented 6 years ago

after testing a few machines using the same Xubuntu 18.04.1 nvidia 396.54, wine staging 3.14 and DXVK .70 I get: Intel(R) Core(TM) i5-3470 CPU, GTX1070 - fail Intel(R) Core(TM) i5-4590 CPU, GTX 680 - fail Intel(R) Core(TM) i7-3630QM CPU, GTX 670MX - runs great Intel(R) Core(TM) i7-2679QM CPU, GTX670 - runs great

all tested machines run The Witcher 3 in that same prefix fine (except for the minor known texture streaming issue)

ksterker commented 6 years ago

Have not been able to run D:OS2; been trying since it came out. Now I tried with Proton, but results in black screen just like with regular wine (or wine + DXVK).

Ubuntu 18.04 CPU: Intel(R) Core(TM) i5-4460 @ 3.20GHz (family: 0x6, model: 0x3c, stepping: 0x3) GPU: GeForce GTX 950 driver 396.54 RAM: 8GB

Been running games like Witcher 3 or Kingdom Come: Deliverance just fine.

lieff commented 6 years ago

@FreeLikeGNU May be game tries to detect graphics settings on first run? What if copy generated settings from working system to non-working?

Rotscha commented 6 years ago

I'm one of those who never got the game to run with wine. Just like @FreeLikeGNU, the game would would segfault (and create a minidump) and than hang with the black screen.

So I debugged the game a while back, and I'm very sure, that the problem isn't gpu related at all.

What I found out: On game start, during the initialization of the game's audio engine (Audiokinetic Wwise), a new thread is created. When this thread is executed first, it makes a call to some subroutine within the engine. However, unlike on Windows, on Wine the pointer to that subroutine contains an invalid memory address. The call to that address causes the thread to segfault. I assume the game hangs at this point because other threads are waiting for the thread forever to release locked semaphores.

As the crash happens before xaudio2_7.dll is even loaded, installing xact doesn't help in this case.

Sadly, I couldn't find a solution or workaround to get it running. I can only assume it's somewhat related to .NET, which Wwise is based on. Maybe in invalid vtable or something like that.

FreeLikeGNU commented 6 years ago

@Rotscha any idea why it might work on some machines and not others, like perhaps the audio chipset or driver?

EDIT: I disabled my onboard audio via bios, no effect.

notfood commented 6 years ago

Could it be that the people running it have simple 2.1 audio and D:OS2 is trying to do something fancy for 5.1/7.1 users?

Sethox commented 6 years ago

@notfood That is a possibility I did not think myself. Since it's about audio..

My test did involve a headphone so it's basically "2.1". For those that does not work for, what audio setup do you have?

FreeLikeGNU commented 6 years ago

@lieff that was my line of thinking when I used an external drive with xubuntu and the game installed in a known working configuration. This is a portable system I can use to test on lots of hardware quickly with game configuration saved. I built the installation with the non-working hardware tested again on that and then tested with working hardware (and those ran the game). I then ran the game on the non-working hardware again to verify (and hope maybe something changed the games configuration file to work) but results remained the same.

ksterker commented 6 years ago

I'm using a simple stereo setup, nothing fancy at all, hooked to line out of the mainboard. Can't get much simpler than that, but no dice.

Sethox commented 6 years ago

Reading things around and looking at the spreadsheet (https://docs.google.com/spreadsheets/d/1DcZZQ4HL_Ol969UbXJmFG8TzOHNnHoj8Q1f8DIFe8-8/htmlview?sle=true#gid=0)

I notice that some people compile their own proton version direct from source, that seems to work for most of the people. I cannot get it to work with steam's own version (beta or the other), only if I make my own WINEPREFIX with newer mainline wine version.

Edit: I just validated the game folder, and bam more than 30 files "failed to validate", so disregard my message.

FreeLikeGNU commented 6 years ago

I think @Rotscha is on the right track, I wish I had the skills to debug how a game interacts with WINE, my biggest fear it will require a hack that even staging wont touch for it to start up for everyone with a multi-core CPU from at least 2012 and Vulkan capable GPU . (not just those with the right combination of hardware). WineHQ doesn't care about any results that involve DXVK (already had my tests revoked there).

MEXAHOTABOP commented 6 years ago

https://gist.github.com/berenm/3e67cd273c2a530849e52218a1f2e70c

hack/workaround for launching problem with description what caused this

Rotscha commented 6 years ago

I have the strange feeling this is somehow cpu related. Looking at reports from various people, the game seems to generally work on i7 but not on i5. I'm starting to believe, it could be an issue with Hyperthreading.

MinIsMin commented 6 years ago

@Rotscha I have a i5 4210U and disabling hyperthreading works!!

Edit: Divinity just detects (see window title) and uses one core (out of two) while on Windows it used all two (with hyperthreading four).

lieff commented 6 years ago

So it seems some GetInfo about processor function fails in wine.

lieff commented 6 years ago

I have i7 with HT and game runs with wine-3.15 (Staging) but not with Proton 3.7-5 Beta.

Rotscha commented 6 years ago

So, good news. I found the reason, why Wine crashes the game. It has indeed to do with thread affinity. Apply this patch and it should work.

--- dlls/ntdll/thread.c 2018-09-07 12:33:51.689761974 +0200
+++ dlls/ntdll/thread.c 2018-09-07 21:09:33.463365868 +0200
@@ -1290,6 +1290,7 @@
             if (length != sizeof(ULONG_PTR)) return STATUS_INVALID_PARAMETER;
             req_aff = *(const ULONG_PTR *)data;
             if ((ULONG)req_aff == ~0u) req_aff = affinity_mask;
+            else if ((LONG) req_aff < 0) req_aff = affinity_mask & req_aff;
             else if (req_aff & ~affinity_mask) return STATUS_INVALID_PARAMETER;
             else if (!req_aff) return STATUS_INVALID_PARAMETER;
             SERVER_START_REQ( set_thread_info )
kisak-valve commented 6 years ago

Hello @Rotscha, this patch should go to upstream wine if it has not been already.

Rotscha commented 6 years ago

@kisak-valve yes, i will submit the patch to wine as soon as i can. Meanwhile it would be nice, if others could report, if the patch works for them too.

lieff commented 6 years ago

Reactos do simple

                /* Combine masks */
                CombinedAffinity = Affinity & Process->Pcb.Affinity;
                if (CombinedAffinity != Affinity)
                {
                    /* Fail */
                    Status = STATUS_INVALID_PARAMETER;
                }
                else
                {
                    /* Set the affinity */
                    KeSetAffinityThread(&Thread->Tcb, CombinedAffinity);
                }

https://github.com/reactos/reactos/blob/master/ntoskrnl/ps/query.c#L2104 Without "if" series, and gets Pcb.Affinity while wine uses const ULONG_PTR affinity_mask = get_system_affinity_mask();. Is this normal?

notfood commented 6 years ago

@Rotscha Game failed to run for me with that patch.

It passed the issue where it locks, then I got sound, then it wrote minidump and hanged.

Rotscha commented 6 years ago

Hm, damn. The game launches fine for me. I used a fresh prefix with only dxvk installed. No additional winetricks stuff. Patch applied to vanilla wine 3.15

Did you try in a fresh prefix too?

Rotscha commented 6 years ago

Small update:

While the Definitive Edition seems to work fine, the Classic Client (which is included) still hangs on startup. So there must be something more...

One more update: Classic works too now, after installing xact via winetricks.

lieff commented 6 years ago

I disable HT and stock wine stops working as expected. After applying patch to vanilla Wine 3.15 it works. @notfood Is there any configure warnings? It's easy to miss them...

lieff commented 6 years ago

There also some shader warnings

002b:fixme:d3d_shader:shader_sm4_read_instruction_modifier Unhandled modifier 0x800000c2.
002b:fixme:d3d_shader:shader_sm4_read_instruction_modifier Unhandled modifier 0x00155543.

I assume progress bar colors broken because of this: image

Rotscha commented 6 years ago

@lieff Great! Thanks for testing

lieff commented 6 years ago

Also books rendered incorrectly: image

Rotscha commented 6 years ago

That's without dxvk, right?

lieff commented 6 years ago

@Rotscha Always welcome :) It's Proton prefix and dxvk dlls are in place, but DXVK_HUD=1 do not shows HUD, so it seems do not use dx11.

notfood commented 6 years ago

I'm using a clean wineprefix. I tried with dxvk as well. Installed xact and no dice.

The relevant lines:

warn:  DXGI: MakeWindowAssociation: Ignoring flags
0032:fixme:thread:SetThreadIdealProcessorEx (0xfffffffffffffffe, 0x224fdf0, (nil)): stub
002b:fixme:thread:SetThreadIdealProcessorEx (0x3f4, 0x22f9b0, (nil)): stub
0033:fixme:thread:SetThreadIdealProcessorEx (0x410, 0x23bfbc0, (nil)): stub
info:  DxgiVkPresenter: Recreating swap chain: 
  Format:       VK_FORMAT_B8G8R8A8_UNORM
  Present mode: VK_PRESENT_MODE_FIFO_KHR
  Buffer size:  1152x864
0048:fixme:thread:SetThreadIdealProcessorEx (0xfffffffffffffffe, 0x68efdf0, (nil)): stub
0049:fixme:explorerframe:taskbar_list_SetProgressState iface 0x2e62610, hwnd 0x10058, flags 1 stub!
0049:fixme:explorerframe:taskbar_list_SetProgressValue iface 0x2e62610, hwnd 0x10058, ullCompleted 1, ullTotal 64 stub!
004b:fixme:thread:SetThreadIdealProcessorEx (0xfffffffffffffffe, 0x4ddfdf0, (nil)): stub
004b:fixme:msvcp:_Locinfo__Locinfo_ctor_cat_cstr (0x4ddf240 1 C) semi-stub
004b:fixme:msvcp:_Locinfo__Locinfo_ctor_cat_cstr (0x4ddecc0 1 C) semi-stub
004b:fixme:msvcp:_Locinfo__Locinfo_ctor_cat_cstr (0x4ddf400 1 C) semi-stub
004b:fixme:msvcp:_Locinfo__Locinfo_ctor_cat_cstr (0x4ddeae0 1 C) semi-stub
0033:fixme:dbghelp:MiniDumpWriteDump NIY MiniDumpWithHandleData

On a side note, my processor doesn't support HyperThreading. i5 6600 cpu doesn't have that option.

sinnate commented 6 years ago

The patch is working like a glove with my i5-4440 for the classic version try installing xact and directx SDK june 2010