From 96bd85ccf4bfd36cf32c24fb3b4b168dc611447f Mon Sep 17 00:00:00 2001 From: Emily <102429049+emily-is-my-username@users.noreply.github.com> Date: Sun, 29 Sep 2024 02:25:22 +0200 Subject: [PATCH] steam_helper: clean up OpenVR before getting OpenXR extensions in `initialize_vr_data` When using OpenComposite, both OpenVR and OpenXR functions may call the same underlying OpenXR loader. Because the OpenXR loader only supports a single active instance, `initialize_vr_data` currently fails as an OpenXR instance has already been initialized ath the time XR extensions are queried. This commit fixes the problem by cleaning up the temporary OpenVR context *before* initializing OpenXR instead of keeping it open until the end of the call. Fix for: https://github.com/ValveSoftware/Proton/issues/7905 --- steam_helper/steam.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/steam_helper/steam.cpp b/steam_helper/steam.cpp index f99596bc..a083915e 100644 --- a/steam_helper/steam.cpp +++ b/steam_helper/steam.cpp @@ -893,6 +893,11 @@ static DWORD WINAPI initialize_vr_data(void *arg) } } + if (vr_initialized) { + client_core->Cleanup(); + vr_initialized = FALSE; + } + if ((hwineopenxr = LoadLibraryA("wineopenxr.dll"))) { p__wineopenxr_get_extensions_internal = reinterpret_cast