danoon2/Boxedwine

Audiosurf 1 crashes on Vulkan renderer, and won't load past loading screen in OpenGL

Opened this issue ยท 17 comments

In Boxedwine, Audiosurf 1 gets stuck on running and then crashes on the vulkan renderer. The actual game window doesn't even open. Is there a way I can find a log or something to help debug?

Also, on OpenGL, the game itself gets stuck on its own loading screen, but I'd like to get Vulkan up and running first.

The short answer is that Vulkan doesn't work yet.

It's been a while since I worked on Vulkan. I feel like it was getting pretty close but I also never saw it create a window. While working on it, I got distracted by also getting Wine 6/7 to work. Turns out Wine 6/7 required shared memory to work between the Wine and wineserver processes. I finally got that fixed and that should also help Vulkan, but I haven't returned to Vulkan yet.

As for the game, it looks like it should work on Wine. It is a newer game that what I normally test with. If it tries to use the network or display a web page during that initial load, that might be a source of problem. But that is just a guess. I don't install gekko as part of Boxedwine yet since networking doesn't work well.

The short answer is that Vulkan doesn't work yet.

It's been a while since I worked on Vulkan. I feel like it was getting pretty close but I also never saw it create a window. While working on it, I got distracted by also getting Wine 6/7 to work. Turns out Wine 6/7 required shared memory to work between the Wine and wineserver processes. I finally got that fixed and that should also help Vulkan, but I haven't returned to Vulkan yet.

As for the game, it looks like it should work on Wine. It is a newer game that what I normally test with. If it tries to use the network or display a web page during that initial load, that might be a source of problem. But that is just a guess. I don't install gekko as part of Boxedwine yet since networking doesn't work well.

@danoon2 Impressive guess! I'm pretty sure it does display a webpage on the loading screen. That would explain why that webpage doesn't ever show up, though it's a bit strange that the loading bar gets 3/4 of the way done before it freezes.
I'm fairly sure the game does work on Wine, so if network is the issue here, it'd make sense. What is gekko?

No rush on returning to Vulkan. I'd love to see a Vulkan backend happen, but I would like to do what I can to get the game working on here, to add it to our repertoire.

I also very much appreciate your quick response.

The short answer is that Vulkan doesn't work yet.
It's been a while since I worked on Vulkan. I feel like it was getting pretty close but I also never saw it create a window. While working on it, I got distracted by also getting Wine 6/7 to work. Turns out Wine 6/7 required shared memory to work between the Wine and wineserver processes. I finally got that fixed and that should also help Vulkan, but I haven't returned to Vulkan yet.
As for the game, it looks like it should work on Wine. It is a newer game that what I normally test with. If it tries to use the network or display a web page during that initial load, that might be a source of problem. But that is just a guess. I don't install gekko as part of Boxedwine yet since networking doesn't work well.

@danoon2 Impressive guess! I'm pretty sure it does display a webpage on the loading screen. That would explain why that webpage doesn't ever show up, though it's a bit strange that the loading bar gets 3/4 of the way done before it freezes. I'm fairly sure the game does work on Wine, so if network is the issue here, it'd make sense. What is gekko?

No rush on returning to Vulkan. I'd love to see a Vulkan backend happen, but I would like to do what I can to get the game working on here, to add it to our repertoire.

I also very much appreciate your quick response.

Maybe it's not gekko, but gecko

Oh, Gecko! Had to google that. Is there an option to install this myself? And will that possibly get the Audiosurf changelog on the loading screen to work?

I haven't tried in a while, but if you want, here is a list of the versions that matches each wine version

https://wiki.winehq.org/Gecko

Since Boxedwine is an x86 (32-bit) emulator, make sure you use the x86 version of Gecko and not the x64 version (even if Boxedwine is the 64-bit build)

I'll try installing one of those msi files (specifically wine-gecko-2.47.2-x86.msi since that one goes with Wine 6?) in the container with AS1 in it then? Would the ie8 Winetricks dll also work?

Running the msi through "Install using a setup program", nothing happens, and no difference with ie8.

I looked more into this and I wasn't able to get the MSI to work either. I don't remember how I've installed it in the past, but on the that same gecko page, next to the msi, there is a tar file. You can download that, use something like 7-zip, and extract it to you wine filesystem / container. It should go in the root/share/wine folder and look like this.

gecko

By default, I go out of my way to make Boxedwine not use Gecko and to not ask about downloading it when updating the .wine folder by overriding an environment variable. To get Gecko to load, you will need to compile from source and comment out this line

envValues.push_back("WINEDLLOVERRIDES=mscoree,mshtml=");

envValues.push_back("WINEDLLOVERRIDES=mscoree,mshtml=");

Fortunately, I've already compiled Boxedwine from source! I commented this line out, but the only folders I have in my [container name]/root/ are dev, home, mnt, proc, tmp, and var. No share. Should I just create [container name]/root/share/wine?

Yes, you will need to create the file structure and unzip gecko into it.

The game now actually crashes earlier, but under the "NEWS" box, the URL to the changelog shows up.

The last couple log lines:

00b8:err:winediag:SECUR32_initNTLMSP ntlm_auth was not found or is outdated. Make sure that ntlm_auth >= 3.0.25 is in your path. Usually, you can find it in the winbind package of your distribution.
00b8:err:winediag:load_gssapi_krb5 Failed to load libgssapi_krb5, Kerberos SSP support will not be available.
00b8:fixme:msvcrt:__clean_type_info_names_internal (...) stub
00b8:err:winediag:SECUR32_initNTLMSP ntlm_auth was not found or is outdated. Make sure that ntlm_auth >= 3.0.25 is in your path. Usually, you can find it in the winbind package of your distribution.
00b8:err:winediag:load_gssapi_krb5 Failed to load libgssapi_krb5, Kerberos SSP support will not be available.
00b8:fixme:msvcrt:__clean_type_info_names_internal (...) stub
Creating Window for OpenGL: 875x656

I'm thinking adding gecko fixed the issue, but we're missing some HTTPS library or something.

EDIT: To be clear, the game didn't crash before on OpenGL, it'd get stuck. The game is now crashing rarely and getting stuck most of the time. It gets stuck and/or crashes at an earlier time in loading, the loading bar is shorter. The difference is we now see a URL.

I wrote a dll to auto-skip the loading screen using the game's WM_COPYDATA API. The game loads all dlls in the channels folder, so I put it there. Somehow this dll stops the game from loading entirely in Boxedwine. The window doesn't open, Boxedwine shows as "Launching", then it closes and reopens. Running the game on my actual computer with this dll works just fine. I use "Release x86" as my target.

duckfromdiscord/as-skipper

The message sending code has to run on another thread, which may be a source of the error.

I fixed a bug where .msi's wouldn't launch, turns out I needed to call "/bin/wine start app.msi" instead of just "/bin/wine app.msi"

Awesome, that should help gecko installations in the future!

Is there a way to find out why the game won't launch with certain dlls (like as-skipper and as-scrobbler) that do run on, for example, Linux with Proton? The logs show Launching "/bin/wine" "Audiosurf.exe" and then immediately exit.

If we can get as-skipper to work, we can find out whether the loading screen changelog really is the problem, since the command I'm sending to the game might try and skip that.

Do you use visual studio? If so, I'd recommend just running the debug target, it will spit out a lot more info in console window. I show files that failed to open (don't exist), keep in mind, linux/wine will try multiple locations, so all those failed to open paths are probably not interesting. But I like this info because if it crashes, you might get lucky and see the last few failures and 1 of them might help.

I'm using Visual Studio, yes.

With the dll in the folder, in debug, I get a sequence of access violations, I disable "break on this type of exception" and eventually the log shows each dll in channels being loaded, including as-skipper.dll.so. Five dlls later, right after concrt140.so, there's a page fault, and then Could not find /usr/bin/addr2line shows up 3 times, once for a game dll and twice for ntdll.dll.so. Then a message box appears with some letters in it.

Without the dll, the log is way different. After 5 minutes of loading, and the game opening, I notice wine: Unhandled page fault on write access to 00000004 at address [some address] (thread 00bc), starting debugger... and I get Unhandled exception thrown: read access violation. this->_Mypair._Myval2._Myhead was nullptr. I also disabled breaking for these, but it didn't work, so I can't get past them.

That addr2line error doesn't show up when that dll isn't there. Is it possible that program is missing from one of the filesystems, and for some really strange reason, only my dll calls some function in wine that needs it? Seems pretty unlikely but that's the only thing I can come up with just looking over these logs.

Is there anything in specific I can look for that would help debug more effectively?