mirror of
https://gitlab.freedesktop.org/monado/monado.git
synced 2025-01-15 11:25:26 +00:00
st/oxr: Wire up Win32 OpenGL
This commit is contained in:
parent
a681252ac1
commit
570f27d486
|
@ -91,6 +91,14 @@ if(ANDROID)
|
|||
target_sources(st_oxr PRIVATE oxr_session_gfx_gles_android.c)
|
||||
target_link_libraries(st_oxr PRIVATE aux_android)
|
||||
endif()
|
||||
if(WIN32)
|
||||
target_link_libraries(st_oxr PRIVATE kernel32)
|
||||
target_compile_definitions(st_oxr PRIVATE XR_USE_PLATFORM_WIN32)
|
||||
endif()
|
||||
|
||||
if(WIN32 AND XRT_HAVE_OPENGL)
|
||||
target_sources(st_oxr PRIVATE oxr_session_gfx_gl_win32.c)
|
||||
endif()
|
||||
|
||||
if(WIN32)
|
||||
target_compile_definitions(st_oxr PRIVATE XR_USE_PLATFORM_WIN32)
|
||||
|
|
|
@ -270,6 +270,12 @@ XrResult
|
|||
oxr_verify_XrGraphicsBindingOpenGLXlibKHR(struct oxr_logger * /*log*/, const XrGraphicsBindingOpenGLXlibKHR * /*next*/);
|
||||
#endif // defined(XR_USE_PLATFORM_XLIB) && defined(XR_USE_GRAPHICS_API_OPENGL)
|
||||
|
||||
#if defined(XR_USE_PLATFORM_WIN32) && defined(XR_USE_GRAPHICS_API_OPENGL)
|
||||
XrResult
|
||||
oxr_verify_XrGraphicsBindingOpenGLWin32KHR(struct oxr_logger * /*log*/,
|
||||
const XrGraphicsBindingOpenGLWin32KHR * /*next*/);
|
||||
#endif // defined(XR_USE_PLATFORM_WIN32) && defined(XR_USE_GRAPHICS_API_OPENGL)
|
||||
|
||||
#if defined(XR_USE_GRAPHICS_API_VULKAN)
|
||||
XrResult
|
||||
oxr_verify_XrGraphicsBindingVulkanKHR(struct oxr_logger * /*log*/, const XrGraphicsBindingVulkanKHR * /*next*/);
|
||||
|
|
|
@ -1097,6 +1097,13 @@ oxr_session_populate_gl_xlib(struct oxr_logger *log,
|
|||
struct oxr_session *sess);
|
||||
#endif // XR_USE_PLATFORM_XLIB
|
||||
|
||||
#ifdef XR_USE_PLATFORM_WIN32
|
||||
XrResult
|
||||
oxr_session_populate_gl_win32(struct oxr_logger *log,
|
||||
struct oxr_system *sys,
|
||||
XrGraphicsBindingOpenGLWin32KHR const *next,
|
||||
struct oxr_session *sess);
|
||||
#endif // XR_USE_PLATFORM_WIN32
|
||||
#endif // XR_USE_GRAPHICS_API_OPENGL
|
||||
|
||||
#if defined(XR_USE_GRAPHICS_API_OPENGL) || defined(XR_USE_GRAPHICS_API_OPENGL_ES)
|
||||
|
|
|
@ -722,6 +722,21 @@ oxr_session_create_impl(struct oxr_logger *log,
|
|||
}
|
||||
#endif
|
||||
|
||||
#if defined(XR_USE_PLATFORM_WIN32) && defined(XR_USE_GRAPHICS_API_OPENGL)
|
||||
XrGraphicsBindingOpenGLWin32KHR const *opengl_win32 = OXR_GET_INPUT_FROM_CHAIN(
|
||||
createInfo, XR_TYPE_GRAPHICS_BINDING_OPENGL_WIN32_KHR, XrGraphicsBindingOpenGLWin32KHR);
|
||||
if (opengl_win32 != NULL) {
|
||||
if (!sys->gotten_requirements) {
|
||||
return oxr_error(log, XR_ERROR_GRAPHICS_REQUIREMENTS_CALL_MISSING,
|
||||
"Has not called xrGetOpenGLGraphicsRequirementsKHR");
|
||||
}
|
||||
|
||||
OXR_SESSION_ALLOCATE_AND_INIT(log, sys, *out_session);
|
||||
OXR_ALLOCATE_NATIVE_COMPOSITOR(log, xsi, *out_session);
|
||||
return oxr_session_populate_gl_win32(log, sys, opengl_win32, *out_session);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef XR_USE_GRAPHICS_API_VULKAN
|
||||
XrGraphicsBindingVulkanKHR const *vulkan =
|
||||
OXR_GET_INPUT_FROM_CHAIN(createInfo, XR_TYPE_GRAPHICS_BINDING_VULKAN_KHR, XrGraphicsBindingVulkanKHR);
|
||||
|
|
51
src/xrt/state_trackers/oxr/oxr_session_gfx_gl_win32.c
Normal file
51
src/xrt/state_trackers/oxr/oxr_session_gfx_gl_win32.c
Normal file
|
@ -0,0 +1,51 @@
|
|||
// Copyright 2018-2022, Collabora, Ltd.
|
||||
// SPDX-License-Identifier: BSL-1.0
|
||||
/*!
|
||||
* @file
|
||||
* @brief Holds OpenGL-specific session functions for Windows
|
||||
* @author Jakob Bornecrantz <jakob@collabora.com>
|
||||
* @author Ryan Pavlik <ryan.pavlik@collabora.com>
|
||||
* @ingroup oxr_main
|
||||
* @ingroup comp_client
|
||||
*/
|
||||
|
||||
#ifndef XR_USE_PLATFORM_WIN32
|
||||
#error "Must build this file with Win32 enabled!"
|
||||
#endif
|
||||
|
||||
#ifndef XR_USE_GRAPHICS_API_OPENGL
|
||||
#error "Must build this file with OpenGL enabled!"
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "util/u_misc.h"
|
||||
|
||||
#include "oxr_objects.h"
|
||||
#include "oxr_logger.h"
|
||||
#include "oxr_two_call.h"
|
||||
#include "oxr_handle.h"
|
||||
|
||||
#include "xrt/xrt_instance.h"
|
||||
#include "xrt/xrt_gfx_win32.h"
|
||||
|
||||
|
||||
XrResult
|
||||
oxr_session_populate_gl_win32(struct oxr_logger *log,
|
||||
struct oxr_system *sys,
|
||||
XrGraphicsBindingOpenGLWin32KHR const *next,
|
||||
struct oxr_session *sess)
|
||||
{
|
||||
|
||||
struct xrt_compositor_native *xcn = sess->xcn;
|
||||
struct xrt_compositor_gl *xcgl = xrt_gfx_provider_create_gl_win32(xcn, next->hDC, next->hGLRC);
|
||||
|
||||
if (xcgl == NULL) {
|
||||
return oxr_error(log, XR_ERROR_INITIALIZATION_FAILED, "Failed to create a Win32 client compositor");
|
||||
}
|
||||
|
||||
sess->compositor = &xcgl->base;
|
||||
sess->create_swapchain = oxr_swapchain_gl_create;
|
||||
|
||||
return XR_SUCCESS;
|
||||
}
|
|
@ -470,6 +470,15 @@ oxr_verify_XrSessionCreateInfo(struct oxr_logger *log,
|
|||
}
|
||||
#endif // defined(OXR_HAVE_KHR_opengl_enable) && defined(XR_USE_PLATFORM_XLIB)
|
||||
|
||||
#if defined(OXR_HAVE_KHR_opengl_enable) && defined(XR_USE_PLATFORM_WIN32)
|
||||
XrGraphicsBindingOpenGLWin32KHR const *opengl_win32 = OXR_GET_INPUT_FROM_CHAIN(
|
||||
createInfo, XR_TYPE_GRAPHICS_BINDING_OPENGL_WIN32_KHR, XrGraphicsBindingOpenGLWin32KHR);
|
||||
if (opengl_win32 != NULL) {
|
||||
OXR_VERIFY_EXTENSION(log, inst, KHR_opengl_enable);
|
||||
return oxr_verify_XrGraphicsBindingOpenGLWin32KHR(log, opengl_win32);
|
||||
}
|
||||
#endif // defined(OXR_HAVE_KHR_opengl_enable) && defined(XR_USE_PLATFORM_WIN32)
|
||||
|
||||
#if defined(OXR_HAVE_KHR_vulkan_enable) || defined(OXR_HAVE_KHR_vulkan_enable2)
|
||||
/* XR_TYPE_GRAPHICS_BINDING_VULKAN2_KHR aliased to
|
||||
* XR_TYPE_GRAPHICS_BINDING_VULKAN_KHR */
|
||||
|
@ -567,6 +576,28 @@ oxr_verify_XrGraphicsBindingOpenGLXlibKHR(struct oxr_logger *log, const XrGraphi
|
|||
|
||||
#endif // defined(XR_USE_PLATFORM_XLIB) && defined(XR_USE_GRAPHICS_API_OPENGL)
|
||||
|
||||
#if defined(XR_USE_PLATFORM_WIN32) && defined(XR_USE_GRAPHICS_API_OPENGL)
|
||||
|
||||
XrResult
|
||||
oxr_verify_XrGraphicsBindingOpenGLWin32KHR(struct oxr_logger *log, const XrGraphicsBindingOpenGLWin32KHR *next)
|
||||
{
|
||||
if (next->type != XR_TYPE_GRAPHICS_BINDING_OPENGL_WIN32_KHR) {
|
||||
return oxr_error(log, XR_ERROR_VALIDATION_FAILURE, "Graphics binding has invalid type");
|
||||
}
|
||||
|
||||
if (next->hDC == NULL) {
|
||||
return oxr_error(log, XR_ERROR_VALIDATION_FAILURE, "hDC is NULL");
|
||||
}
|
||||
|
||||
if (next->hGLRC == NULL) {
|
||||
return oxr_error(log, XR_ERROR_VALIDATION_FAILURE, "hGLRC is NULL");
|
||||
}
|
||||
|
||||
return XR_SUCCESS;
|
||||
}
|
||||
|
||||
#endif // defined(XR_USE_PLATFORM_WIN32) && defined(XR_USE_GRAPHICS_API_OPENGL)
|
||||
|
||||
|
||||
#ifdef XR_USE_GRAPHICS_API_VULKAN
|
||||
|
||||
|
|
Loading…
Reference in a new issue