Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Kim <pk15950@gmail.com>2021-09-10 07:01:14 +0300
committerPeter Kim <pk15950@gmail.com>2021-09-10 07:19:43 +0300
commit82ab2c167844627ccda4ac0e439f322fcea07173 (patch)
treee8a2c4e9f7faf337b8fe8364d7212061a0d09153 /source/blender/windowmanager
parentee3b4e8420928a03e9158489a87d5daa34ee302f (diff)
XR: Re-enable SteamVR OpenGL backend for AMD gpus
Addresses T76082. Since the DirectX backend does not work for AMD gpus (wglDXRegisterObjectNV() fails to register the shared OpenGL-DirectX render buffer, displaying a pink screen to the user), the original solution was to use SteamVR's OpenGL backend, which, as tested recently, seems to work without any issues on AMD hardware. However, the SteamVR OpenGL backend (on Windows) was disabled in fe492d922d6d since it resulted in crashes with NVIDIA gpus (and still crashes, as tested recently), so SteamVR would always use the AMD-incompatible DirectX backend (on Windows). This patch restores use of the SteamVR OpenGL backend for non-NVIDIA (AMD, etc.) gpus while maintaining the DirectX workaround for NVIDIA gpus. In this way, issues are still resolved on the NVIDIA side but AMD users can once again use the SteamVR runtime, which may be their only viable option of using Blender in VR. Reviewed By: Julian Eisel Differential Revision: https://developer.blender.org/D12409
Diffstat (limited to 'source/blender/windowmanager')
-rw-r--r--source/blender/windowmanager/xr/intern/wm_xr.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/source/blender/windowmanager/xr/intern/wm_xr.c b/source/blender/windowmanager/xr/intern/wm_xr.c
index 297205d1e79..8891840cb75 100644
--- a/source/blender/windowmanager/xr/intern/wm_xr.c
+++ b/source/blender/windowmanager/xr/intern/wm_xr.c
@@ -35,6 +35,8 @@
#include "GHOST_C-api.h"
+#include "GPU_platform.h"
+
#include "WM_api.h"
#include "wm_surface.h"
@@ -91,6 +93,11 @@ bool wm_xr_init(wmWindowManager *wm)
if (G.debug & G_DEBUG_XR_TIME) {
create_info.context_flag |= GHOST_kXrContextDebugTime;
}
+#ifdef WIN32
+ if (GPU_type_matches(GPU_DEVICE_NVIDIA, GPU_OS_WIN, GPU_DRIVER_ANY)) {
+ create_info.context_flag |= GHOST_kXrContextGpuNVIDIA;
+ }
+#endif
if (!(context = GHOST_XrContextCreate(&create_info))) {
return false;