ValveSoftware / Proton

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

FPS Infinite (appid 1256380) #5106

Open Patola opened 2 years ago

Patola commented 2 years ago

Compatibility Report

System Information

I confirm:

steam-1256380.log

Symptoms

Game doesn't run under proton.

Reproduction

Note: the game has a native version. However running it in proton might be advantageous under a number of scenarios. One of these is using the game in VR, since the linux build does not have VR capabilities. Also, it's a free game, so testing it is very easy.

My suspicions of where the problems might be: 52472.762:0140:0170:fixme:msctf:ThreadMgr_ActivateEx Unimplemented flags 0x4 or 52472.762:0140:0144:err:ole:CoMarshalInterface Failed to marshal the interface {ea1ea136-19df-11d7-a6d2-00065b84435c}, hr 0x80004002

kisak-valve commented 2 years ago

Hello @Patola, these look like some lines of interest from the log:

[ERROR] FATAL UNHANDLED EXCEPTION: System.NullReferenceException: Object reference not set to an instance of an object
  at Xenko.Audio.AudioSystem.Destroy () [0x0004b] in <fb366cc5f3dc47ae988732c2710b70d7>:0 
  at Xenko.Core.DisposeBase.Xenko.Core.IReferencable.Release () [0x00015] in <97a4614d4c87402ba31427db1cac05dc>:0 
  at Xenko.Core.DisposeBase.Dispose () [0x00008] in <97a4614d4c87402ba31427db1cac05dc>:0 
  at Xenko.Games.GameBase.Destroy () [0x00064] in <94e706aa2dc04636b07142ce9c2bfe79>:0 
  at Xenko.Engine.Game.Destroy () [0x0000c] in <fb366cc5f3dc47ae988732c2710b70d7>:0 
  at Xenko.Core.DisposeBase.Xenko.Core.IReferencable.Release () [0x00015] in <97a4614d4c87402ba31427db1cac05dc>:0 
  at Xenko.Core.DisposeBase.Dispose () [0x00008] in <97a4614d4c87402ba31427db1cac05dc>:0 
  at GentrieveX.Windows.GentrieveXApp.Main (System.String[] args) [0x0006f] in <f64443f780a6463b9efa0e0a06df42cf>:0 (1)
madewokherd commented 2 years ago

I think the first problem is this:

[0000000000000144:] EXCEPTION handling: System.DllNotFoundException: libxenkoaudio assembly:<unknown assembly> type:<unknown type> member:(null)

libxenkoaudio.dll is present in the x64 directory of the game's files, so I tried copying its contents to the game's directory. Then I got this error:

664145.679:010c:0110:err:vulkan:wine_vkEnumerateDeviceExtensionProperties Layer enumeration not supported from ICD.
[0000000000000110:] EXCEPTION handling: Vortice.Vulkan.VkException: [-6] ErrorLayerNotPresent - Vulkan error occured
madewokherd commented 2 years ago

So the way this is supposed to work, based on source code available online for the engine this game is using, is that static AudioLayer() (https://github.com/stride3d/stride/blob/7e836297cb5930c01e6dfa0183e7f3cc64748fb6/sources/engine/Stride.Audio/Native/AudioLayer.cs#L35) loads libxenkoaudio.dll in the process manually using the full path before static AudioEngine() (https://github.com/stride3d/stride/blob/7e836297cb5930c01e6dfa0183e7f3cc64748fb6/sources/engine/Stride.Audio/AudioEngine.cs#L25) tries to use a pinvoke method. The problem is that Mono tries to resolve the pinvoke for AudioLayer.Init before it calls static AudioLayer().

madewokherd commented 2 years ago

I think I understand the dll loading issue and have a fix for it, but that still leaves the error in wine_vkEnumerateDeviceExtensionProperties.