ValveSoftware / Proton

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

EVERSLAUGHT (appid 1530750, VR) #5037

Open Patola opened 3 years ago

Patola commented 3 years ago

Compatibility Report

System Information

I confirm:

Symptoms

There are two problems.

Reproduction

The attached proton log was generated with the game being run with the other game's actions.json.

steam-1530750.log

Patola commented 3 years ago
warn:debugstr:OutputDebugStringA "Error [GENERAL | xrCreateInstance | OpenXR-Loader] : LoaderInstance::CreateInstance, no support found for requested extension: XR_KHR_win32_convert_performance_counter_time\n"
warn:debugstr:OutputDebugStringA "Error [GENERAL | xrCreateInstance | OpenXR-Loader] : xrCreateInstance failed\n"
Patola commented 3 years ago

@gofman have you got any success? I've seen your pull request for dxvk and made a proton build with that patch, and I also found the two methods listed for XR_KHR_win32_convert_performance_counter_time (xrConvertWin32PerformanceCounterToTimeKHR and xrConvertTimeToWin32PerformanceCounterKHR) and made them return XR_SUCCESS but OpenXR-Loader still says the extension is unsupported. What should I change in the code for the extension to show as supported (even being only a stub)?

gofman commented 3 years ago

Yes, I've got some success but it needs a hack to work. A straightforward way would be to just implement the extension on top of XR_KHR_convert_timespec_time but it looks like Linux Steam OpenXR doesn't support the Linux counterpart extension yet. The game doesn't actually use the extension, only requests it.

I am likely to put this ugly hack for now (to show some love for the second game using OpenXR known to me), but I am also looking at improving a bit of some stuff around. I will share the build here once I finalize it.

Update: With all those tweaks hacks and fixes around the game seem to work perfectly here. I am not sure if I will include a fix at once for the first issue you mentioned (actions.json warning) but it is harmless, controllers work regardless of that issue. That is due to the combination of redundant (and wrong) action manifest file path in game Steam info and the fact that Proton has to initialize OpenVR at start regardless of the game actually uses it. OpenXR controller bindings do not use those manifests, that is OpenVR thing only.

gofman commented 3 years ago

I have uploaded test build here: https://www.codeweavers.com/xfer/gofman/builds/exper-everslaught.tgz Unlock code: testbuild

All the discussed issues with the game should be fixed there.

The game will hang on exit if exited through game menu ('Exit game' through Steam overlay should terminate it fine). It is currently the fate of every OpenXR game, they all will hang in xrDestroyInstance() and that happens even with OpenXR SDK Vulkan sample compiled natively on Linux.

Patola commented 3 years ago

@gofman thanks, it worked perfectly (had to exit the game via the exit button on steam, as you said). Would you mind showing the commit that accomplishes this? Even if it's in not a good state. I'd like it to compare to my attempts and understand the issue.

gofman commented 3 years ago

The relevant part is this (there are also another bit related to input error, but the game already works without). Plus dxvk patch that you found already without which the game sort of works but renders noise only. The game initally breaks on not finding the extension queried through xrEnumerateInstanceExtensionProperties(). If you just show it the extension it will break right after on xrCreateInstance() as native xrCreateInstance apparently does not support XR_KHR_win32_convert_performance_counter_time (and should not). The first two patches do the right thing by exporting XR_KHR_win32_convert_performance_counter_time if XR_KHR_convert_timespec_time (Linux analog for that extension) is supported, and swapping the Windows one to the Linux one in wine_xrCreateInstance(). These have no effect though as XR_KHR_convert_timespec_time is not supported, so the third patch pretends it is.

There should also be actual implementation here for the currently stubbed functions but the game doesn't use it, and I can't even test the real implementation without the extension support.

patches.zip

Patola commented 3 years ago

I deeply appreciate your explanation, thank you. I have made a build based upon proton 6.3-5 with the 3 openxr patches + the dxvk patch and it worked perfectly. It is in my winefork releases page: https://github.com/Patola/wine/releases/tag/6.3-everslaught -- the patches are also there, in a zip file.

crodar33 commented 2 years ago

Hi, I have same issue with "Epic Roller Coasters" and "Conquest", but on test build this games doesn't work (run, connected to VR, but hung). No any errors in proton log. On 6.3 proton error XR_KHR_win32_convert_performance_counter_time

gofman commented 2 years ago

I had a look at these games and Everslaught and Conquest just worked for me with Proton Experimental. There was a problem with "Epic Roller Coasters" though, I didn't see any hang but it renders just black screen. I've made the fix for the latter and it should hopefully work in the latest Proton Experimental [bleeding-edge] beta branch (updated today).

crodar33 commented 2 years ago

hi @gofman I have switched to "bleeding-edge" and cleaned "compatdata" for games. After run I got error in log

1549.480:0088:008c:warn:debugstr:OutputDebugStringA "Error [GENERAL | | OpenXR-Loader] : C:\openxr\wineopenxr64.json library C:\windows\system32\wineopenxr.dll does not appear to exist\n"

then I again cleaned compatdata, run on 5.13 (because I saw this file is created for this version), then run on "bleeding-edge" and game started, connected to VR, but hung with steamVR (after each test I have rebooted), no visible errors in log steam_logs-5.13-beta.zip steam_logs-beta.zip Is steamVR beta can cause this issues, on what version is better to check? steam not beta Also I can test and provide more logs if you say me what to do

gofman commented 2 years ago

in both logs, 2391.424:0088:008c:warn:debugstr:OutputDebugStringA "Error [GENERAL | | OpenXR-Loader] : C:\openxr\wineopenxr64.json library C:\windows\system32\wineopenxr.dll does not appear to exist\n" That's in both logs so probably the same for any openxr game in your setup.

Although wineopenxr.dll itself was loaded and unloaded right before that. Something weird is probably happening with initialization.

Also, 2388.767:0030:0034:fixme:service:scmdatabase_autostart_services Auto-start service L"MountMgr" failed to start: 2 and the same for a few other services looks weird. Do you have any specifics in installation (like, NTFS)? Which VR hardware do you have? Actually, full system info would be interesting. I'd suggest to try a clean prefix but you said it was already the case.

Can you please attach WINEDEBUG=+pid,+loaddll,+timestamp,+seh,+steam,+openxr,+vrclient,+steamclient %command%?

Also, there is Unity log in the prefix which is sometimes helpful. It is called Player.log and is buried in the prefix in users/steamuser/..., I think the easiest is to do 'find ./ -iname player.log' from there.

crodar33 commented 2 years ago

I ran it with WINEDEBUG=+pid,+loaddll,+timestamp,+seh,+steam,+openxr,+vrclient,+steamclient %command% and collected all logs steam_logs.zip system info:

System:    Host: box Kernel: 5.13.0-22-generic x86_64 bits: 64 Desktop: KDE Plasma 5.22.5 Distro: Ubuntu 21.10 (Impish Indri) 
Machine:   Type: Desktop Mobo: Micro-Star model: B450 GAMING PLUS MAX (MS-7B86) v: 3.0 serial: <superuser required> 
           UEFI: American Megatrends v: H.50 date: 11/07/2019 
CPU:       Info: 8-Core model: AMD Ryzen 7 2700 bits: 64 type: MT MCP cache: L2: 4 MiB 
           Speed: 1378 MHz min/max: 1550/3200 MHz Core speeds (MHz): 1: 1378 2: 1375 3: 1550 4: 1378 5: 1377 6: 1381 7: 1550 
           8: 1555 9: 1528 10: 1378 11: 1377 12: 1377 13: 1549 14: 1556 15: 1378 16: 1377 
Graphics:  Device-1: NVIDIA TU116 [GeForce GTX 1660 SUPER] driver: nvidia v: 495.44 
           Device-2: Logitech Webcam C270 type: USB driver: snd-usb-audio,uvcvideo 
           Display: x11 server: X.Org 1.20.13 driver: loaded: nvidia resolution: 1: 3840x2160~60Hz 2: 1920x1080~60Hz 
           OpenGL: renderer: NVIDIA GeForce GTX 1660 SUPER/PCIe/SSE2 v: 4.6.0 NVIDIA 495.44 
Audio:     Device-1: NVIDIA TU116 High Definition Audio driver: snd_hda_intel 
           Device-2: Advanced Micro Devices [AMD] Family 17h HD Audio driver: snd_hda_intel 
           Device-3: Logitech Webcam C270 type: USB driver: snd-usb-audio,uvcvideo 
           Sound Server-1: ALSA v: k5.13.0-22-generic running: yes 
           Sound Server-2: PulseAudio v: 15.0 running: yes 
           Sound Server-3: PipeWire v: 0.3.32 running: yes 
Network:   Device-1: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet driver: r8169 
           IF: enp34s0 state: up speed: 100 Mbps duplex: full mac: 00:d8:61:ff:0a:f6 
           IF-ID-1: br-0328376683ef state: down mac: 02:42:20:8f:ba:9f 
           IF-ID-2: br-0aa55e8b58a2 state: down mac: 02:42:29:a0:c3:3c 
           IF-ID-3: br-1f92f829ac58 state: down mac: 02:42:b2:0a:5c:20 
           IF-ID-4: br-2476a28cc80a state: down mac: 02:42:58:2a:b1:fa 
           IF-ID-5: br-2d4ab8bbe19d state: down mac: 02:42:bb:55:67:60 
           IF-ID-6: br-65817414b39b state: down mac: 02:42:b8:aa:0d:1e 
           IF-ID-7: br-812e459f3280 state: down mac: 02:42:67:a2:36:54 
           IF-ID-8: br-a1b478e00569 state: down mac: 02:42:1a:f3:de:56 
           IF-ID-9: br-b454702c0ab9 state: down mac: 02:42:eb:0e:af:97 
           IF-ID-10: br-b94fe81ff0d1 state: down mac: 02:42:b9:12:bf:8b 
           IF-ID-11: br-bb9b3cbcdb57 state: down mac: 02:42:b4:8d:48:e7 
           IF-ID-12: br-cd194a4b61fa state: down mac: 02:42:06:bb:c2:6c 
           IF-ID-13: br-d42c9f928a81 state: down mac: 02:42:1b:99:c1:42 
           IF-ID-14: br-d77766f89919 state: down mac: 02:42:89:e6:0c:65 
           IF-ID-15: docker0 state: down mac: 02:42:bb:1c:b9:d6 
           IF-ID-16: tun0 state: unknown speed: 10 Mbps duplex: full mac: N/A 
Bluetooth: Device-1: Cambridge Silicon Radio Bluetooth Dongle (HCI mode) type: USB driver: btusb 
           Report: hciconfig ID: hci1 state: up address: 00:1A:7D:DA:71:0A bt-v: 2.1 
Drives:    Local Storage: total: 2.06 TiB used: 988.04 GiB (46.8%) 
           ID-1: /dev/nvme0n1 vendor: Silicon Power model: SPCC M.2 PCIe SSD size: 953.87 GiB 
           ID-2: /dev/sda vendor: Kingston model: SA400S37240G size: 223.57 GiB 
           ID-3: /dev/sdb vendor: Western Digital model: WD10EZEX-00KUWA0 size: 931.51 GiB 
Partition: ID-1: / size: 938.68 GiB used: 241.89 GiB (25.8%) fs: ext4 dev: /dev/nvme0n1p2 
Swap:      ID-1: swap-1 type: partition size: 20 GiB used: 0 KiB (0.0%) dev: /dev/sdb2 
Sensors:   System Temperatures: cpu: 53.1 C mobo: 39.0 C gpu: nvidia temp: 53 C 
           Fan Speeds (RPM): fan-1: 0 fan-2: 2380 fan-3: 0 fan-4: 0 fan-5: 0 fan-6: 0 gpu: nvidia fan: 28% 
Info:      Processes: 457 Uptime: 2h 1m Memory: 31.3 GiB used: 8.08 GiB (25.8%) Shell: Bash inxi: 3.3.06
libntfs-3g883/impish,now 1:2017.3.23AR.3-3ubuntu5 amd64 [установлен, автоматически]
ntfs-3g/impish,now 1:2017.3.23AR.3-3ubuntu5 amd64 [установлен]

VR hardware HTC vive pro

gofman commented 2 years ago

Not sure what is happening here... now it is completely different, no notion of failing services or Unity debug messages about failing to create instances. It seems it renders a few frames and then stops.

Your system info has partition info about root fs only which is ext4, what about the other disks? Don't you have NTFS used with Proton by any chance?

crodar33 commented 2 years ago

no, I don't use NTFS, all games is placed on ext4 other games like beat saber, arizona sunshine, angry birds working fine if it need to do some test in specific order, I can do it

gofman commented 2 years ago

Not sure I have much of easy ideas without reproducing it. Maybe there is something between Steam openxr and Nvidia, but can be just anything else as well. Can you please archive ~/.config/openvr/logs/ and ~/.local/share/Steam/logs directories and attach that?

A good sanity check would be to run some native OpenXR program from Steam and see if that works but that is somewhat convoluted and requires some dedication as there is no native Linux XR games out there. I used to work with XR native sample as following:

UPDATE: the games which work are all probably OpenVR games, not OpenXR.

crodar33 commented 2 years ago

I haven't ~/.local/share/Steam/logs dir, but I think you asked about .steam/debian-installation/logs/ openvr.zip steam_steam-logs.zip I will try find some OpenXR app, or try to run it from SDK, need some time to do it )

gofman commented 2 years ago

Can you please also attach vulkaninfo output?

crodar33 commented 2 years ago

vulkaninfo vulkaninfo.zip

gofman commented 2 years ago

I don't have a knowledge of or access to native Steam VR internals but from the Steam VR logs it looks likely that there is between Steam VR and native setup. Things like: Чт дек 30 2021 13:48:27.833928 - ASSERT: "Required vulkan device extension is unavailable: VK_KHR_external_memory_fd" at /data/src/common/vrcommon/vulkan.cpp:208. Чт дек 30 2021 13:48:27.834151 - ASSERT: "Required vulkan device extension is unavailable: VK_KHR_external_semaphore_fd" at /data/src/common/vrcommon/vulkan.cpp:208.

repeated twice. That's probably normal when there are multiple devices and some (like integrated GPU) don't have necessary extensions but you don't seem to have one from vulkaninfo.

Then, Чт дек 30 2021 13:51:41.357066 - Transitioning XrSession from XR_SESSION_STATE_READY to XR_SESSION_STATE_SYNCHRONIZED

Is the last transition message. Normally there are XR_SESSION_STATE_SYNCHRONIZED to XR_SESSION_STATE_VISIBLE and XR_SESSION_STATE_VISIBLE to XR_SESSION_STATE_FOCUSED right after. Session state transition is not controlled by app or Proton XR. While some actions from those can potentially influence that it looks more likely to me that the issue is not related to Proton.

If it is possible to try with native XR SDK sample as I described this could probably indicate exactly if OpenXR works at all at that setup and there is still a room for Proton issue or it doesn't.

crodar33 commented 2 years ago

hello_xr was run perfectly:

./hello_xr --graphics Vulkan
[01:27:52.712][Info   ] Press any key to shutdown...
[01:27:52.721][Info   ] Available Layers: (0)
[01:27:52.793][Info   ] Instance RuntimeName=SteamVR/OpenXR RuntimeVersion=0.1.0
[01:27:52.793][Info   ] Available View Configuration Types: (1)
[01:27:52.793][Info   ] Available Environment Blend Mode count : (1)
[01:27:52.793][Info   ] Environment Blend Mode (XR_ENVIRONMENT_BLEND_MODE_OPAQUE) : (Selected)
[01:27:52.796][Warning] No validation layers found in the system, skipping
[01:27:52.947][Info   ] INFO: (INSTANCE 0x565002f7a860) [Loader Message] Failed to find vkGetDeviceProcAddr in layer libVkLayer_MESA_device_select.so
[01:27:53.024][Info   ] Loaded vertex shader
[01:27:53.024][Info   ] Loaded fragment shader
[01:27:53.716][Info   ] Available reference spaces: 3
[01:27:53.727][Info   ] System Properties: Name=SteamVR/OpenXR : lighthouse VendorId=10462
[01:27:53.727][Info   ] System Graphics Properties: MaxWidth=1912 MaxHeight=2124 MaxLayers=16
[01:27:53.727][Info   ] System Tracking Properties: OrientationTracking=True PositionTracking=True
[01:27:53.727][Info   ] Creating swapchain for view 0 with dimensions Width=1912 Height=2124 SampleCount=1
[01:27:53.744][Info   ] Creating swapchain for view 1 with dimensions Width=1912 Height=2124 SampleCount=1
[01:27:53.746][Info   ] XrEventDataSessionStateChanged: state XR_SESSION_STATE_UNKNOWN->XR_SESSION_STATE_IDLE session=94901651931600 time=1943703926619
[01:27:53.746][Info   ] XrEventDataSessionStateChanged: state XR_SESSION_STATE_IDLE->XR_SESSION_STATE_READY session=94901651931600 time=1943703959470
[01:27:53.889][Info   ] XrEventDataSessionStateChanged: state XR_SESSION_STATE_READY->XR_SESSION_STATE_SYNCHRONIZED session=94901651931600 time=1943876201126
[01:27:58.576][Info   ] XrEventDataSessionStateChanged: state XR_SESSION_STATE_SYNCHRONIZED->XR_SESSION_STATE_VISIBLE session=94901651931600 time=1948563172986
[01:27:58.576][Info   ] XrEventDataSessionStateChanged: state XR_SESSION_STATE_VISIBLE->XR_SESSION_STATE_FOCUSED session=94901651931600 time=1948563203367
[01:27:58.597][Info   ] Grab action is bound to nothing
[01:27:58.598][Info   ] Quit action is bound to nothing
[01:27:58.598][Info   ] Pose action is bound to nothing
[01:27:58.598][Info   ] Vibrate action is bound to nothing
[01:27:58.598][Info   ] Grab action is bound to nothing
[01:27:58.598][Info   ] Quit action is bound to nothing
[01:27:58.598][Info   ] Pose action is bound to nothing
[01:27:58.598][Info   ] Vibrate action is bound to nothing
[01:27:58.598][Info   ] Grab action is bound to nothing
[01:27:58.598][Info   ] Quit action is bound to nothing
[01:27:58.598][Info   ] Pose action is bound to nothing
[01:27:58.598][Info   ] Vibrate action is bound to nothing
[01:27:58.598][Info   ] Grab action is bound to nothing
[01:27:58.598][Info   ] Quit action is bound to nothing
[01:27:58.598][Info   ] Pose action is bound to nothing
[01:27:58.598][Info   ] Vibrate action is bound to nothing
[01:28:11.681][Info   ] XrEventDataSessionStateChanged: state XR_SESSION_STATE_FOCUSED->XR_SESSION_STATE_VISIBLE session=94901651931600 time=1961668710235
[01:28:11.681][Info   ] XrEventDataSessionStateChanged: state XR_SESSION_STATE_VISIBLE->XR_SESSION_STATE_SYNCHRONIZED session=94901651931600 time=1961668762427
  s^C

also added application into steam as extended game, have added parameters and it have run cross steam and it was quest for me to build it and run :D