ValveSoftware / Proton

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

On Proton 8.0-3 when having multiple audio inputs some games crash #6964

Closed Plarpoon closed 1 year ago

Plarpoon commented 1 year ago

This issue comes from the realization that many games are connected by this same bug, as discussed on the Deep Rock Galactic issue page and the Remnant: From the ashes one. I would like for others in this issue with a different hardware configuration from mine to test this out and report if they can confirm this bug being reproduced as-well, so we can identify with precision exactly what is causing it.

The current idea is that games made with Unreal 4 or using a specific plugin for voice communications in it are what are causing this issue. If you can test this out with many other games as I did until now we should get a more clear idea!

In this screenshot we can see an example of invalid configuration for playing some specific games on Proton 8: image

As you can see here we have the Yeti Stereo Microphone, Trust QHD Webcam and Game Capture HD60 S+ which are all enabled as input devices.

If you want to reproduce this bug you just need to have more than on input device that's enabled and start either of the verified as bugged games, Deep Rock Galactic and Remnant: from the Ashes for now. You can have anything you want other than "Off" into the profile, I used Analog Stereo Input but that's not the only one that I tested it with. You can use even odd profiles, as long as it's not deactivated it will crash the game.

I have made the same exact experiment but this time with many output audio devices, the problem does not exist in that case.

I have tested changing the profile of my only output device to Stereo to remove the 7.1 channel issue but that didn't solve anything either.

Here is a link to the currently most recent comment about it. You can find under this message the list of my current configuration:

This is what is printed out as a result of lshw -C sound (click on this to see my audio hardware configuration) > *-multimedia > description: Audio device > product: Advanced Micro Devices, Inc. [AMD/ATI] > vendor: Advanced Micro Devices, Inc. [AMD/ATI] > physical id: 0.1 > bus info: pci@0000:03:00.1 > logical name: card2 > logical name: /dev/snd/controlC2 > logical name: /dev/snd/hwC2D0 > logical name: /dev/snd/pcmC2D3p > logical name: /dev/snd/pcmC2D7p > logical name: /dev/snd/pcmC2D8p > logical name: /dev/snd/pcmC2D9p > version: 00 > width: 32 bits > clock: 33MHz > capabilities: pm pciexpress msi bus_master cap_list > configuration: driver=snd_hda_intel latency=0 > resources: irq:193 memory:fcb20000-fcb23fff > *-multimedia > description: Multimedia audio controller > product: CMI8788 [Oxygen HD Audio] > vendor: C-Media Electronics Inc > physical id: 4 > bus info: pci@0000:08:04.0 > logical name: card1 > logical name: /dev/snd/controlC1 > logical name: /dev/snd/pcmC1D0c > logical name: /dev/snd/pcmC1D0p > logical name: /dev/snd/pcmC1D1c > logical name: /dev/snd/pcmC1D1p > version: 00 > width: 32 bits > clock: 33MHz > capabilities: pm bus_master cap_list > configuration: driver=snd_virtuoso latency=32 maxlatency=24 mingnt=2 > resources: irq:24 ioport:e000(size=256) > *-usb:1 > description: Audio device > product: Blue Microphones Yeti Stereo Microphone Consumer Control > vendor: Blue Microphones > physical id: 4 > bus info: usb@1:4 > logical name: card5 > logical name: /dev/snd/controlC5 > logical name: /dev/snd/pcmC5D0c > logical name: /dev/snd/pcmC5D0p > logical name: input5 > logical name: /dev/input/event5 > version: 1.00 > serial: REV8 > capabilities: usb-1.10 audio-control usb > configuration: driver=usbhid maxpower=100mA speed=12Mbit/s > *-usb:1 > description: Audio device > product: USB Audio > vendor: Generic > physical id: 6 > bus info: usb@3:6 > logical name: card6 > logical name: /dev/snd/controlC6 > logical name: /dev/snd/pcmC6D0c > logical name: /dev/snd/pcmC6D0p > logical name: /dev/snd/pcmC6D1c > logical name: /dev/snd/pcmC6D1p > logical name: /dev/snd/pcmC6D2c > logical name: /dev/snd/pcmC6D2p > logical name: /dev/snd/pcmC6D3p > version: 0.03 > capabilities: usb-2.00 audio-control > configuration: driver=snd-usb-audio maxpower=100mA speed=480Mbit/s > *-multimedia > description: Audio device > product: Rembrandt Radeon High Definition Audio Controller > vendor: Advanced Micro Devices, Inc. [AMD/ATI] > physical id: 0.1 > bus info: pci@0000:16:00.1 > logical name: card3 > logical name: /dev/snd/controlC3 > logical name: /dev/snd/hwC3D0 > logical name: /dev/snd/pcmC3D3p > logical name: /dev/snd/pcmC3D7p > version: 00 > width: 32 bits > clock: 33MHz > capabilities: pm pciexpress msi bus_master cap_list > configuration: driver=snd_hda_intel latency=0 > resources: irq:195 memory:fc980000-fc983fff > *-usb:0 > description: Audio device > product: CPH2399 > vendor: OnePlus > physical id: 1 > bus info: usb@7:2.1.1 > logical name: card7 > logical name: /dev/snd/controlC7 > logical name: dmmidi7 > logical name: midi7 > logical name: /dev/snd/midiC7D0 > version: 2.23 > serial: RCZHHMTOEMV4DEJJ > capabilities: usb-2.00 audio-control > configuration: driver=snd-usb-audio maxpower=500mA speed=480Mbit/s > *-usb:2 > description: Video > product: Trust QHD Webcam > vendor: SC > physical id: 3 > bus info: usb@7:2.1.3 > logical name: card4 > logical name: /dev/snd/controlC4 > logical name: /dev/snd/pcmC4D0c > version: 0.10 > serial: 202001010001 > capabilities: usb-2.00 > configuration: driver=snd-usb-audio maxpower=500mA speed=480Mbit/s > *-usb > description: Video > product: Game Capture HD60 S+ > vendor: Elgato > physical id: 4 > bus info: usb@8:2.1.4 > logical name: card0 > logical name: /dev/snd/controlC0 > logical name: /dev/snd/pcmC0D0c > version: 0.01 > serial: 0007EC43F3000 > capabilities: usb-3.00 > configuration: driver=snd-usb-audio maxpower=800mA speed=5000Mbit/s

This is my Steam Runtime System Information: https://gist.github.com/Plarpoon/71f189689e369fb75f884ff845760f02

This is my current setup: image Mesa version: Mesa 23.1.3 Driver: AMD Radeon RX 7900 XTX (gfx1100, LLVM 16.0.6, DRM 3.52, 6.4.3-1-default)

ivyl commented 1 year ago

Thanks for the logs and detailed report!

I have 0fd9:006a Elgato Systems GmbH Game Capture HD60 S+ and it's not enough to make the game crash. I've tried having 1-4 input audio devices enabled. I'm on a slightly newer PipeWire (Server Name: PulseAudio (on PipeWire 0.3.75)).

What the two games have in common is built-in voice chat. I wouldn't be surprised if they were using the same plugin / middleware. On Linux the games don't allow you to select the input device. The selection list is just empty, not even the default device. I think that's an important clue and I'm trying to look into what the game queries and why it might be the case.

The game also calls EnumAudioEndpoints(eCapture) 8 times in short succession which is weird.

ivyl commented 1 year ago

Can you share a log of the crash, preferably with Deep Rock Galactic, with PROTON_LOG=+pulse,+mmdevapi,+dsound %command%?

Plarpoon commented 1 year ago

Hi @ivyl, I just came back from the holidays, I did mention that in another issue. Sorry I kept you on hold but I was really far away from the computer :)

I have good news, the issue seems to be solved, I don't know why but it is solved. Here is the log file you wanted:

steam-548430.log

After you mentioned being on a newer version of pipewire I realized it was some days I hadn't done any update so I just synced with my distro's newest releases.

I updated my kernel from 6.4.3-1 to 6.4.8-1 and this is my Steam Runtime System Information

Hope everything is alright with you, as said I can now enter into the game successfully so something has changed.

rcbevans commented 1 year ago

Can you share a log of the crash, preferably with Deep Rock Galactic, with PROTON_LOG=+pulse,+mmdevapi,+dsound %command%?

I think the same crash is happening in Dying Light 2, and Remnant: From the Ashes. Logs are available there.

Assuming it's the same issue, the problem is not resolved in latest Proton Experimental, at least not in Dying Light 2 and Remnant: From the Ashes.

EDIT:

I just tried using pavucontrol to set the configuration of my secondary audio input (BRIO Ultra HD Webcam) to Off and the games all now launch. You appear to be totally right that it's down to having multiple audio input devices.

Plarpoon commented 1 year ago

I don't own DL2 but I can confirm the issue with Remnant and DRG. Both of them tested recently and still yield the same results!

rcbevans commented 1 year ago

After using pavucontrol to set the secondary (unused) input device configuration to "Off", the games launch using the Proton 8/Experimental default dsound.dll. Tested with both DL2 and Remnant.

Plarpoon commented 1 year ago

@rcbevans Yes, that's the conclusion I came with my previous report too. With Pavucontrol disabling all my audio input sources except the BlueYeti microphone fixed it.

@kisak-valve actually was the one who made me realize first that it's very likely an Unreal plugin bug that handles voice comms shared between games.

Plarpoon commented 1 year ago

@kisak-valve does this count as a successful retest? Or is that something different that's done internally separately?

ivyl commented 1 year ago

Hi. The dsound fixes were accepted in Wine's upstream and I've cherry-picked them into Proton. Those should be available on Proton Experimental's bleeding-edge branch (may require Steam restart to pick up the latest update, experimental-bleeding-edge-8.0-55994-20230915 or newer) in ~15 minutes. If this fixes the problem for you feel free to close this issue :-)

The fixes will trickle into the next experimental and later on into 8.0-5.

Plarpoon commented 1 year ago

I have just tested it with all games, this was a complete success and everything works amazingly. I am going to close this ticket now as it's officially resolved.

Thank you everyone, especially thanks to @ivyl and @kisak-valve for helping out a lot in discovering what the problem was and fixing it!

If I can do anything at all in the future to help test things out just ping me and I will gladly help!

Thanks again everyone!

P.s. As written before this post, the fix will come out officially on Proton 8.0-5, it's also currently temporarily available on the bleeding-edge beta channel of Experimental.