protonscr

[OpenXR missing feature/extension] Not implemented xrConvertWin32PerformanceCounterToTimeKHR causes Falcon BMS in-game recenter view command causes game freeze.

protonclosed
ValveSoftware/Proton#8699 · opened 2025-05-15 by XenoPL · updated 2026-01-19 · 5 comments · github
XXenoPL 2025-05-15 github

When running Falcon BMS 4.37.7 in VR using OpenXR API, attempt to recenter VR position by in-game "SIM: VR Camera Rotation Reset" command causes game to freeze. In debug window I can see error:
OpenXR exception XrResult = -6 xrConvertWin32PerformanceCounterToTimeKHR_(m_instance, &qpcTimeNow, &xtTimeNow)

I'm able to reproduce this issue using two different OpenXR runtime libs:

  • SteamVR 2.11 + alvr 20.13.0
  • monado + WiVRn 0.24.1

This issue is not present when OpenVR api is used nor it happens when game is run on Windows (tested both with ALVR+SeamVR and VirtualDesktop.

Steps to reproduce:

  • in Falcon BMS Launcher, map "SIM: VR Camera Rotation Reset" to key combo or game controller button, select VirtualReality OpenXR API and click launch button
  • Select any scenario to enter actual gameplay, example: select "Tactical Engagement", then second mission from the list, click 'Commit", on next screen click "Takeoff" buton
  • once in the cockpit press mapped key combo/button to recenter view.

Expected result:
Camera position/rotation is reset to game default position

Actual result :
Image freezes in HMD, game stops responding to keyboard/mouse/joystick inputs, if debug was enabled, in debug window error can be seen.

System specs:
CPU: R7 9800X3D
RAM: 64GB
GPU: Saphire Nitro+ RX 7900XTX
HMD: Pico 4 Ultra

OS: Fedora 42 x64
kernel: 6.14.5
driver: mesa 25.0.4

SteamVR 2.11 (2.10 froze on UI -> 3D world transition)
ALVR 20.13.0
WiVRn 0.24.1

Falcon BMS 4.37 update 7

Kkisak-valve maintainer 2025-05-15 github

Hello @XenoPL, we're using one issue report per unofficially supported game title, so I've gone ahead and transferred this issue report to https://github.com/ValveSoftware/Proton/issues/3991#issuecomment-2850969831.

XXenoPL 2025-05-28 github

Digging trough the log I found crash happens due to unimplemented extension: openxr:xrConvertWin32PerformanceCounterToTimeKHR

5700.517:0264:0324:warn:seh:dispatch_exception "[01:34:04.198] 804 INPUT: SimVRHMDReset (DOWN)\n" 5700.517:0264:0324:fixme:openxr:xrConvertWin32PerformanceCounterToTimeKHR unimplemented 5700.517:0264:0324:warn:debugstr:OutputDebugStringA "[01:34:04.198] 804 [OpenXR Exception]: XrResult = -6, Origin: xrConvertWin32PerformanceCounterToTimeKHR_(m_instance, &qpcTimeNow, &xrTim eNow)\n" 5700.517:0264:0324:warn:seh:dispatch_exception "[01:34:04.198] 804 [OpenXR Exception]: XrResult = -6, Origin: xrConvertWin32PerformanceCounterToTimeKHR_(m_instance, &qpcTimeNow, &xrTimeNow) \n"

Full log (couldn't attach, too big?): https://nextcloud.x-s.com.pl/index.php/s/oH2ijQ8cXAfgyHi

XXenoPL 2025-05-29 github

Looking at wineopenxr/openxr.c file it's one of two not implemented extensions:

  • wine_xrConvertTimeToWin32PerformanceCounterKHR(XrInstance instance, XrTime time, LARGE_INTEGER *performanceCounter)
  • wine_xrConvertWin32PerformanceCounterToTimeKHR(XrInstance instance, const LARGE_INTEGER *performanceCounter, XrTime *time)

My assumption is any app that relies on those extension will crash. IMHO it's more a matter of Proton openxr missing feature rather than problem with unsupported app. Would that make it valid bug report worth reopening?

XXenoPL 2025-06-09 github

Going further down the rabbit hole, I've looked up what Monado does. There, if Monado is compiled for Win32 target, for Time<->PerfCounters conversion use equation:
XRTime(ns)=PerfCounter(ticks)*ns_per_tick

where :
ns_per_tick = 1,000,000,000 / QueryPerformanceFrequency which is Windows function.

1,000,000$ question is: does Wine/Proton provide equivalent function?

XXenoPL 2026-01-19 github

Upstream links