From 5b26b6a1d4df17642c68ae883096a865fdc70bc6 Mon Sep 17 00:00:00 2001 From: Paul Gofman Date: Sun, 29 Sep 2024 02:25:22 +0200 Subject: [PATCH] steam_helper: clean up OpenVR before getting OpenXR extensions in `initialize_vr_data` Patch written by Emily <102429049+emily-is-my-username@users.noreply.github.com> https://github.com/ValveSoftware/Proton/pull/8126 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 Signed-off-by: Paul Gofman --- 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