feat: updated engine version to 4.4-rc1
This commit is contained in:
parent
ee00efde1f
commit
21ba8e33af
5459 changed files with 1128836 additions and 198305 deletions
4
engine/thirdparty/openxr/COPYING.adoc
vendored
4
engine/thirdparty/openxr/COPYING.adoc
vendored
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
This document is shared across a number of OpenXR GitHub projects, as the
|
||||
set of files in those projects is partially overlapping.
|
||||
(There is a single "source of truth" internal Khronos GitLab repo these
|
||||
(There is a single "source of truth" internal Khronos GitLab monorepo these
|
||||
GitHub repositories interact with.)
|
||||
|
||||
== Licenses
|
||||
|
|
@ -17,7 +17,7 @@ https://reuse.software/spec/[REUSE 3.0 specification] with clear copyright
|
|||
holders and license identifier listed for each file, preferably in each
|
||||
file.
|
||||
Where this is not possible, or e.g. when we are using files unmodified from
|
||||
other open-source projects, license data is listed:
|
||||
other open source projects, license data is listed:
|
||||
|
||||
* in an adjacent file of the same name, with the additional extension
|
||||
"`.license`"
|
||||
|
|
|
|||
1164
engine/thirdparty/openxr/include/openxr/openxr.h
vendored
1164
engine/thirdparty/openxr/include/openxr/openxr.h
vendored
File diff suppressed because it is too large
Load diff
|
|
@ -20,6 +20,7 @@ extern "C" {
|
|||
|
||||
|
||||
|
||||
// XR_LOADER_VERSION_1_0 is a preprocessor guard. Do not pass it to API calls.
|
||||
#define XR_LOADER_VERSION_1_0 1
|
||||
|
||||
#define XR_CURRENT_LOADER_API_LAYER_VERSION 1
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ extern "C" {
|
|||
|
||||
#ifdef XR_USE_PLATFORM_ANDROID
|
||||
|
||||
// XR_KHR_android_thread_settings is a preprocessor guard. Do not pass it to API calls.
|
||||
#define XR_KHR_android_thread_settings 1
|
||||
#define XR_KHR_android_thread_settings_SPEC_VERSION 6
|
||||
#define XR_KHR_ANDROID_THREAD_SETTINGS_EXTENSION_NAME "XR_KHR_android_thread_settings"
|
||||
|
|
@ -46,6 +47,7 @@ XRAPI_ATTR XrResult XRAPI_CALL xrSetAndroidApplicationThreadKHR(
|
|||
|
||||
#ifdef XR_USE_PLATFORM_ANDROID
|
||||
|
||||
// XR_KHR_android_surface_swapchain is a preprocessor guard. Do not pass it to API calls.
|
||||
#define XR_KHR_android_surface_swapchain 1
|
||||
#define XR_KHR_android_surface_swapchain_SPEC_VERSION 4
|
||||
#define XR_KHR_ANDROID_SURFACE_SWAPCHAIN_EXTENSION_NAME "XR_KHR_android_surface_swapchain"
|
||||
|
|
@ -64,6 +66,7 @@ XRAPI_ATTR XrResult XRAPI_CALL xrCreateSwapchainAndroidSurfaceKHR(
|
|||
|
||||
#ifdef XR_USE_PLATFORM_ANDROID
|
||||
|
||||
// XR_KHR_android_create_instance is a preprocessor guard. Do not pass it to API calls.
|
||||
#define XR_KHR_android_create_instance 1
|
||||
#define XR_KHR_android_create_instance_SPEC_VERSION 3
|
||||
#define XR_KHR_ANDROID_CREATE_INSTANCE_EXTENSION_NAME "XR_KHR_android_create_instance"
|
||||
|
|
@ -79,6 +82,7 @@ typedef struct XrInstanceCreateInfoAndroidKHR {
|
|||
|
||||
#ifdef XR_USE_GRAPHICS_API_VULKAN
|
||||
|
||||
// XR_KHR_vulkan_swapchain_format_list is a preprocessor guard. Do not pass it to API calls.
|
||||
#define XR_KHR_vulkan_swapchain_format_list 1
|
||||
#define XR_KHR_vulkan_swapchain_format_list_SPEC_VERSION 4
|
||||
#define XR_KHR_VULKAN_SWAPCHAIN_FORMAT_LIST_EXTENSION_NAME "XR_KHR_vulkan_swapchain_format_list"
|
||||
|
|
@ -93,6 +97,7 @@ typedef struct XrVulkanSwapchainFormatListCreateInfoKHR {
|
|||
|
||||
#ifdef XR_USE_GRAPHICS_API_OPENGL
|
||||
|
||||
// XR_KHR_opengl_enable is a preprocessor guard. Do not pass it to API calls.
|
||||
#define XR_KHR_opengl_enable 1
|
||||
#define XR_KHR_opengl_enable_SPEC_VERSION 10
|
||||
#define XR_KHR_OPENGL_ENABLE_EXTENSION_NAME "XR_KHR_opengl_enable"
|
||||
|
|
@ -169,6 +174,7 @@ XRAPI_ATTR XrResult XRAPI_CALL xrGetOpenGLGraphicsRequirementsKHR(
|
|||
|
||||
#ifdef XR_USE_GRAPHICS_API_OPENGL_ES
|
||||
|
||||
// XR_KHR_opengl_es_enable is a preprocessor guard. Do not pass it to API calls.
|
||||
#define XR_KHR_opengl_es_enable 1
|
||||
#define XR_KHR_opengl_es_enable_SPEC_VERSION 8
|
||||
#define XR_KHR_OPENGL_ES_ENABLE_EXTENSION_NAME "XR_KHR_opengl_es_enable"
|
||||
|
|
@ -210,6 +216,7 @@ XRAPI_ATTR XrResult XRAPI_CALL xrGetOpenGLESGraphicsRequirementsKHR(
|
|||
|
||||
#ifdef XR_USE_GRAPHICS_API_VULKAN
|
||||
|
||||
// XR_KHR_vulkan_enable is a preprocessor guard. Do not pass it to API calls.
|
||||
#define XR_KHR_vulkan_enable 1
|
||||
#define XR_KHR_vulkan_enable_SPEC_VERSION 8
|
||||
#define XR_KHR_VULKAN_ENABLE_EXTENSION_NAME "XR_KHR_vulkan_enable"
|
||||
|
|
@ -274,6 +281,7 @@ XRAPI_ATTR XrResult XRAPI_CALL xrGetVulkanGraphicsRequirementsKHR(
|
|||
|
||||
#ifdef XR_USE_GRAPHICS_API_D3D11
|
||||
|
||||
// XR_KHR_D3D11_enable is a preprocessor guard. Do not pass it to API calls.
|
||||
#define XR_KHR_D3D11_enable 1
|
||||
#define XR_KHR_D3D11_enable_SPEC_VERSION 9
|
||||
#define XR_KHR_D3D11_ENABLE_EXTENSION_NAME "XR_KHR_D3D11_enable"
|
||||
|
|
@ -311,6 +319,7 @@ XRAPI_ATTR XrResult XRAPI_CALL xrGetD3D11GraphicsRequirementsKHR(
|
|||
|
||||
#ifdef XR_USE_GRAPHICS_API_D3D12
|
||||
|
||||
// XR_KHR_D3D12_enable is a preprocessor guard. Do not pass it to API calls.
|
||||
#define XR_KHR_D3D12_enable 1
|
||||
#define XR_KHR_D3D12_enable_SPEC_VERSION 9
|
||||
#define XR_KHR_D3D12_ENABLE_EXTENSION_NAME "XR_KHR_D3D12_enable"
|
||||
|
|
@ -347,8 +356,46 @@ XRAPI_ATTR XrResult XRAPI_CALL xrGetD3D12GraphicsRequirementsKHR(
|
|||
#endif /* !XR_NO_PROTOTYPES */
|
||||
#endif /* XR_USE_GRAPHICS_API_D3D12 */
|
||||
|
||||
#ifdef XR_USE_GRAPHICS_API_METAL
|
||||
|
||||
// XR_KHR_metal_enable is a preprocessor guard. Do not pass it to API calls.
|
||||
#define XR_KHR_metal_enable 1
|
||||
#define XR_KHR_metal_enable_SPEC_VERSION 1
|
||||
#define XR_KHR_METAL_ENABLE_EXTENSION_NAME "XR_KHR_metal_enable"
|
||||
// XrGraphicsBindingMetalKHR extends XrSessionCreateInfo
|
||||
typedef struct XrGraphicsBindingMetalKHR {
|
||||
XrStructureType type;
|
||||
const void* XR_MAY_ALIAS next;
|
||||
void* XR_MAY_ALIAS commandQueue;
|
||||
} XrGraphicsBindingMetalKHR;
|
||||
|
||||
typedef struct XrSwapchainImageMetalKHR {
|
||||
XrStructureType type;
|
||||
const void* XR_MAY_ALIAS next;
|
||||
void* XR_MAY_ALIAS texture;
|
||||
} XrSwapchainImageMetalKHR;
|
||||
|
||||
typedef struct XrGraphicsRequirementsMetalKHR {
|
||||
XrStructureType type;
|
||||
void* XR_MAY_ALIAS next;
|
||||
void* XR_MAY_ALIAS metalDevice;
|
||||
} XrGraphicsRequirementsMetalKHR;
|
||||
|
||||
typedef XrResult (XRAPI_PTR *PFN_xrGetMetalGraphicsRequirementsKHR)(XrInstance instance, XrSystemId systemId, XrGraphicsRequirementsMetalKHR* graphicsRequirements);
|
||||
|
||||
#ifndef XR_NO_PROTOTYPES
|
||||
#ifdef XR_EXTENSION_PROTOTYPES
|
||||
XRAPI_ATTR XrResult XRAPI_CALL xrGetMetalGraphicsRequirementsKHR(
|
||||
XrInstance instance,
|
||||
XrSystemId systemId,
|
||||
XrGraphicsRequirementsMetalKHR* graphicsRequirements);
|
||||
#endif /* XR_EXTENSION_PROTOTYPES */
|
||||
#endif /* !XR_NO_PROTOTYPES */
|
||||
#endif /* XR_USE_GRAPHICS_API_METAL */
|
||||
|
||||
#ifdef XR_USE_PLATFORM_WIN32
|
||||
|
||||
// XR_KHR_win32_convert_performance_counter_time is a preprocessor guard. Do not pass it to API calls.
|
||||
#define XR_KHR_win32_convert_performance_counter_time 1
|
||||
#define XR_KHR_win32_convert_performance_counter_time_SPEC_VERSION 1
|
||||
#define XR_KHR_WIN32_CONVERT_PERFORMANCE_COUNTER_TIME_EXTENSION_NAME "XR_KHR_win32_convert_performance_counter_time"
|
||||
|
|
@ -372,6 +419,7 @@ XRAPI_ATTR XrResult XRAPI_CALL xrConvertTimeToWin32PerformanceCounterKHR(
|
|||
|
||||
#ifdef XR_USE_TIMESPEC
|
||||
|
||||
// XR_KHR_convert_timespec_time is a preprocessor guard. Do not pass it to API calls.
|
||||
#define XR_KHR_convert_timespec_time 1
|
||||
#define XR_KHR_convert_timespec_time_SPEC_VERSION 1
|
||||
#define XR_KHR_CONVERT_TIMESPEC_TIME_EXTENSION_NAME "XR_KHR_convert_timespec_time"
|
||||
|
|
@ -395,6 +443,7 @@ XRAPI_ATTR XrResult XRAPI_CALL xrConvertTimeToTimespecTimeKHR(
|
|||
|
||||
#ifdef XR_USE_PLATFORM_ANDROID
|
||||
|
||||
// XR_KHR_loader_init_android is a preprocessor guard. Do not pass it to API calls.
|
||||
#define XR_KHR_loader_init_android 1
|
||||
#define XR_KHR_loader_init_android_SPEC_VERSION 1
|
||||
#define XR_KHR_LOADER_INIT_ANDROID_EXTENSION_NAME "XR_KHR_loader_init_android"
|
||||
|
|
@ -409,6 +458,7 @@ typedef struct XrLoaderInitInfoAndroidKHR {
|
|||
|
||||
#ifdef XR_USE_GRAPHICS_API_VULKAN
|
||||
|
||||
// XR_KHR_vulkan_enable2 is a preprocessor guard. Do not pass it to API calls.
|
||||
#define XR_KHR_vulkan_enable2 1
|
||||
#define XR_KHR_vulkan_enable2_SPEC_VERSION 2
|
||||
#define XR_KHR_VULKAN_ENABLE2_EXTENSION_NAME "XR_KHR_vulkan_enable2"
|
||||
|
|
@ -488,6 +538,7 @@ XRAPI_ATTR XrResult XRAPI_CALL xrGetVulkanGraphicsRequirements2KHR(
|
|||
|
||||
#ifdef XR_USE_PLATFORM_EGL
|
||||
|
||||
// XR_MNDX_egl_enable is a preprocessor guard. Do not pass it to API calls.
|
||||
#define XR_MNDX_egl_enable 1
|
||||
#define XR_MNDX_egl_enable_SPEC_VERSION 2
|
||||
#define XR_MNDX_EGL_ENABLE_EXTENSION_NAME "XR_MNDX_egl_enable"
|
||||
|
|
@ -506,6 +557,7 @@ typedef struct XrGraphicsBindingEGLMNDX {
|
|||
|
||||
#ifdef XR_USE_PLATFORM_WIN32
|
||||
|
||||
// XR_MSFT_perception_anchor_interop is a preprocessor guard. Do not pass it to API calls.
|
||||
#define XR_MSFT_perception_anchor_interop 1
|
||||
#define XR_MSFT_perception_anchor_interop_SPEC_VERSION 1
|
||||
#define XR_MSFT_PERCEPTION_ANCHOR_INTEROP_EXTENSION_NAME "XR_MSFT_perception_anchor_interop"
|
||||
|
|
@ -529,6 +581,7 @@ XRAPI_ATTR XrResult XRAPI_CALL xrTryGetPerceptionAnchorFromSpatialAnchorMSFT(
|
|||
|
||||
#ifdef XR_USE_PLATFORM_WIN32
|
||||
|
||||
// XR_MSFT_holographic_window_attachment is a preprocessor guard. Do not pass it to API calls.
|
||||
#define XR_MSFT_holographic_window_attachment 1
|
||||
#define XR_MSFT_holographic_window_attachment_SPEC_VERSION 1
|
||||
#define XR_MSFT_HOLOGRAPHIC_WINDOW_ATTACHMENT_EXTENSION_NAME "XR_MSFT_holographic_window_attachment"
|
||||
|
|
@ -546,6 +599,7 @@ typedef struct XrHolographicWindowAttachmentMSFT {
|
|||
|
||||
#ifdef XR_USE_PLATFORM_ANDROID
|
||||
|
||||
// XR_FB_android_surface_swapchain_create is a preprocessor guard. Do not pass it to API calls.
|
||||
#define XR_FB_android_surface_swapchain_create 1
|
||||
#define XR_FB_android_surface_swapchain_create_SPEC_VERSION 1
|
||||
#define XR_FB_ANDROID_SURFACE_SWAPCHAIN_CREATE_EXTENSION_NAME "XR_FB_android_surface_swapchain_create"
|
||||
|
|
@ -568,6 +622,7 @@ typedef struct XrAndroidSurfaceSwapchainCreateInfoFB {
|
|||
|
||||
#ifdef XR_USE_PLATFORM_ML
|
||||
|
||||
// XR_ML_compat is a preprocessor guard. Do not pass it to API calls.
|
||||
#define XR_ML_compat 1
|
||||
#define XR_ML_compat_SPEC_VERSION 1
|
||||
#define XR_ML_COMPAT_EXTENSION_NAME "XR_ML_compat"
|
||||
|
|
@ -592,6 +647,7 @@ XRAPI_ATTR XrResult XRAPI_CALL xrCreateSpaceFromCoordinateFrameUIDML(
|
|||
|
||||
#ifdef XR_USE_PLATFORM_WIN32
|
||||
|
||||
// XR_OCULUS_audio_device_guid is a preprocessor guard. Do not pass it to API calls.
|
||||
#define XR_OCULUS_audio_device_guid 1
|
||||
#define XR_OCULUS_audio_device_guid_SPEC_VERSION 1
|
||||
#define XR_OCULUS_AUDIO_DEVICE_GUID_EXTENSION_NAME "XR_OCULUS_audio_device_guid"
|
||||
|
|
@ -614,6 +670,7 @@ XRAPI_ATTR XrResult XRAPI_CALL xrGetAudioInputDeviceGuidOculus(
|
|||
|
||||
#ifdef XR_USE_GRAPHICS_API_VULKAN
|
||||
|
||||
// XR_FB_foveation_vulkan is a preprocessor guard. Do not pass it to API calls.
|
||||
#define XR_FB_foveation_vulkan 1
|
||||
#define XR_FB_foveation_vulkan_SPEC_VERSION 1
|
||||
#define XR_FB_FOVEATION_VULKAN_EXTENSION_NAME "XR_FB_foveation_vulkan"
|
||||
|
|
@ -630,6 +687,7 @@ typedef struct XrSwapchainImageFoveationVulkanFB {
|
|||
|
||||
#ifdef XR_USE_PLATFORM_ANDROID
|
||||
|
||||
// XR_FB_swapchain_update_state_android_surface is a preprocessor guard. Do not pass it to API calls.
|
||||
#define XR_FB_swapchain_update_state_android_surface 1
|
||||
#define XR_FB_swapchain_update_state_android_surface_SPEC_VERSION 1
|
||||
#define XR_FB_SWAPCHAIN_UPDATE_STATE_ANDROID_SURFACE_EXTENSION_NAME "XR_FB_swapchain_update_state_android_surface"
|
||||
|
|
@ -646,6 +704,7 @@ typedef struct XrSwapchainStateAndroidSurfaceDimensionsFB {
|
|||
|
||||
#ifdef XR_USE_GRAPHICS_API_OPENGL_ES
|
||||
|
||||
// XR_FB_swapchain_update_state_opengl_es is a preprocessor guard. Do not pass it to API calls.
|
||||
#define XR_FB_swapchain_update_state_opengl_es 1
|
||||
#define XR_FB_swapchain_update_state_opengl_es_SPEC_VERSION 1
|
||||
#define XR_FB_SWAPCHAIN_UPDATE_STATE_OPENGL_ES_EXTENSION_NAME "XR_FB_swapchain_update_state_opengl_es"
|
||||
|
|
@ -670,6 +729,7 @@ typedef struct XrSwapchainStateSamplerOpenGLESFB {
|
|||
|
||||
#ifdef XR_USE_GRAPHICS_API_VULKAN
|
||||
|
||||
// XR_FB_swapchain_update_state_vulkan is a preprocessor guard. Do not pass it to API calls.
|
||||
#define XR_FB_swapchain_update_state_vulkan 1
|
||||
#define XR_FB_swapchain_update_state_vulkan_SPEC_VERSION 1
|
||||
#define XR_FB_SWAPCHAIN_UPDATE_STATE_VULKAN_EXTENSION_NAME "XR_FB_swapchain_update_state_vulkan"
|
||||
|
|
@ -695,6 +755,7 @@ typedef struct XrSwapchainStateSamplerVulkanFB {
|
|||
|
||||
#ifdef XR_USE_GRAPHICS_API_VULKAN
|
||||
|
||||
// XR_META_vulkan_swapchain_create_info is a preprocessor guard. Do not pass it to API calls.
|
||||
#define XR_META_vulkan_swapchain_create_info 1
|
||||
#define XR_META_vulkan_swapchain_create_info_SPEC_VERSION 1
|
||||
#define XR_META_VULKAN_SWAPCHAIN_CREATE_INFO_EXTENSION_NAME "XR_META_vulkan_swapchain_create_info"
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -32,6 +32,7 @@ This file contains expansion macros (X Macros) for OpenXR structures that have a
|
|||
_avail(XrCompositionLayerCylinderKHR, XR_TYPE_COMPOSITION_LAYER_CYLINDER_KHR) \
|
||||
_avail(XrCompositionLayerEquirectKHR, XR_TYPE_COMPOSITION_LAYER_EQUIRECT_KHR) \
|
||||
_avail(XrCompositionLayerEquirect2KHR, XR_TYPE_COMPOSITION_LAYER_EQUIRECT2_KHR) \
|
||||
_avail(XrCompositionLayerPassthroughFB, XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_FB) \
|
||||
_avail(XrCompositionLayerPassthroughHTC, XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_HTC) \
|
||||
|
||||
|
||||
|
|
@ -237,6 +238,53 @@ This file contains expansion macros (X Macros) for OpenXR structures that have a
|
|||
|
||||
|
||||
|
||||
/// Like XR_LIST_ALL_STRUCTURE_TYPES, but only includes types whose parent struct type is XrSpatialAnchorsCreateInfoBaseHeaderML
|
||||
#define XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrSpatialAnchorsCreateInfoBaseHeaderML(_avail, _unavail) \
|
||||
_impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrSpatialAnchorsCreateInfoBaseHeaderML_CORE(_avail, _unavail) \
|
||||
|
||||
|
||||
// Implementation detail of XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrSpatialAnchorsCreateInfoBaseHeaderML()
|
||||
#define _impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrSpatialAnchorsCreateInfoBaseHeaderML_CORE(_avail, _unavail) \
|
||||
_avail(XrSpatialAnchorsCreateInfoFromPoseML, XR_TYPE_SPATIAL_ANCHORS_CREATE_INFO_FROM_POSE_ML) \
|
||||
_avail(XrSpatialAnchorsCreateInfoFromUuidsML, XR_TYPE_SPATIAL_ANCHORS_CREATE_INFO_FROM_UUIDS_ML) \
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/// Like XR_LIST_ALL_STRUCTURE_TYPES, but only includes types whose parent struct type is XrFutureCompletionBaseHeaderEXT
|
||||
#define XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrFutureCompletionBaseHeaderEXT(_avail, _unavail) \
|
||||
_impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrFutureCompletionBaseHeaderEXT_CORE(_avail, _unavail) \
|
||||
|
||||
|
||||
// Implementation detail of XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrFutureCompletionBaseHeaderEXT()
|
||||
#define _impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrFutureCompletionBaseHeaderEXT_CORE(_avail, _unavail) \
|
||||
_avail(XrCreateSpatialAnchorsCompletionML, XR_TYPE_CREATE_SPATIAL_ANCHORS_COMPLETION_ML) \
|
||||
_avail(XrSpatialAnchorsQueryCompletionML, XR_TYPE_SPATIAL_ANCHORS_QUERY_COMPLETION_ML) \
|
||||
_avail(XrSpatialAnchorsPublishCompletionML, XR_TYPE_SPATIAL_ANCHORS_PUBLISH_COMPLETION_ML) \
|
||||
_avail(XrSpatialAnchorsDeleteCompletionML, XR_TYPE_SPATIAL_ANCHORS_DELETE_COMPLETION_ML) \
|
||||
_avail(XrSpatialAnchorsUpdateExpirationCompletionML, XR_TYPE_SPATIAL_ANCHORS_UPDATE_EXPIRATION_COMPLETION_ML) \
|
||||
_avail(XrFutureCompletionEXT, XR_TYPE_FUTURE_COMPLETION_EXT) \
|
||||
_avail(XrWorldMeshStateRequestCompletionML, XR_TYPE_WORLD_MESH_STATE_REQUEST_COMPLETION_ML) \
|
||||
_avail(XrWorldMeshRequestCompletionML, XR_TYPE_WORLD_MESH_REQUEST_COMPLETION_ML) \
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/// Like XR_LIST_ALL_STRUCTURE_TYPES, but only includes types whose parent struct type is XrSpatialAnchorsQueryInfoBaseHeaderML
|
||||
#define XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrSpatialAnchorsQueryInfoBaseHeaderML(_avail, _unavail) \
|
||||
_impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrSpatialAnchorsQueryInfoBaseHeaderML_CORE(_avail, _unavail) \
|
||||
|
||||
|
||||
// Implementation detail of XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrSpatialAnchorsQueryInfoBaseHeaderML()
|
||||
#define _impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrSpatialAnchorsQueryInfoBaseHeaderML_CORE(_avail, _unavail) \
|
||||
_avail(XrSpatialAnchorsQueryInfoRadiusML, XR_TYPE_SPATIAL_ANCHORS_QUERY_INFO_RADIUS_ML) \
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/// Like XR_LIST_ALL_STRUCTURE_TYPES, but only includes types whose parent struct type is XrSpaceQueryInfoBaseHeaderFB
|
||||
#define XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrSpaceQueryInfoBaseHeaderFB(_avail, _unavail) \
|
||||
_impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrSpaceQueryInfoBaseHeaderFB_CORE(_avail, _unavail) \
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ This file contains expansion macros (X Macros) for OpenXR structures.
|
|||
_impl_XR_LIST_ALL_STRUCTURE_TYPES_CORE(_avail, _unavail) \
|
||||
_impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_D3D11(_avail, _unavail) \
|
||||
_impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_D3D12(_avail, _unavail) \
|
||||
_impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_METAL(_avail, _unavail) \
|
||||
_impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL(_avail, _unavail) \
|
||||
_impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_XR_USE_PLATFORM_WAYLAND(_avail, _unavail) \
|
||||
_impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_XR_USE_PLATFORM_WIN32(_avail, _unavail) \
|
||||
|
|
@ -92,6 +93,9 @@ This file contains expansion macros (X Macros) for OpenXR structures.
|
|||
_avail(XrEventDataReferenceSpaceChangePending, XR_TYPE_EVENT_DATA_REFERENCE_SPACE_CHANGE_PENDING) \
|
||||
_avail(XrEventDataInteractionProfileChanged, XR_TYPE_EVENT_DATA_INTERACTION_PROFILE_CHANGED) \
|
||||
_avail(XrHapticVibration, XR_TYPE_HAPTIC_VIBRATION) \
|
||||
_avail(XrSpacesLocateInfo, XR_TYPE_SPACES_LOCATE_INFO) \
|
||||
_avail(XrSpaceLocations, XR_TYPE_SPACE_LOCATIONS) \
|
||||
_avail(XrSpaceVelocities, XR_TYPE_SPACE_VELOCITIES) \
|
||||
_avail(XrCompositionLayerCubeKHR, XR_TYPE_COMPOSITION_LAYER_CUBE_KHR) \
|
||||
_avail(XrCompositionLayerDepthInfoKHR, XR_TYPE_COMPOSITION_LAYER_DEPTH_INFO_KHR) \
|
||||
_avail(XrCompositionLayerCylinderKHR, XR_TYPE_COMPOSITION_LAYER_CYLINDER_KHR) \
|
||||
|
|
@ -239,6 +243,22 @@ This file contains expansion macros (X Macros) for OpenXR structures.
|
|||
_avail(XrMapLocalizationRequestInfoML, XR_TYPE_MAP_LOCALIZATION_REQUEST_INFO_ML) \
|
||||
_avail(XrLocalizationMapImportInfoML, XR_TYPE_LOCALIZATION_MAP_IMPORT_INFO_ML) \
|
||||
_avail(XrLocalizationEnableEventsInfoML, XR_TYPE_LOCALIZATION_ENABLE_EVENTS_INFO_ML) \
|
||||
_avail(XrSpatialAnchorsCreateInfoFromPoseML, XR_TYPE_SPATIAL_ANCHORS_CREATE_INFO_FROM_POSE_ML) \
|
||||
_avail(XrCreateSpatialAnchorsCompletionML, XR_TYPE_CREATE_SPATIAL_ANCHORS_COMPLETION_ML) \
|
||||
_avail(XrSpatialAnchorStateML, XR_TYPE_SPATIAL_ANCHOR_STATE_ML) \
|
||||
_avail(XrSpatialAnchorsCreateStorageInfoML, XR_TYPE_SPATIAL_ANCHORS_CREATE_STORAGE_INFO_ML) \
|
||||
_avail(XrSpatialAnchorsQueryInfoRadiusML, XR_TYPE_SPATIAL_ANCHORS_QUERY_INFO_RADIUS_ML) \
|
||||
_avail(XrSpatialAnchorsQueryCompletionML, XR_TYPE_SPATIAL_ANCHORS_QUERY_COMPLETION_ML) \
|
||||
_avail(XrSpatialAnchorsCreateInfoFromUuidsML, XR_TYPE_SPATIAL_ANCHORS_CREATE_INFO_FROM_UUIDS_ML) \
|
||||
_avail(XrSpatialAnchorsPublishInfoML, XR_TYPE_SPATIAL_ANCHORS_PUBLISH_INFO_ML) \
|
||||
_avail(XrSpatialAnchorsPublishCompletionML, XR_TYPE_SPATIAL_ANCHORS_PUBLISH_COMPLETION_ML) \
|
||||
_avail(XrSpatialAnchorsDeleteInfoML, XR_TYPE_SPATIAL_ANCHORS_DELETE_INFO_ML) \
|
||||
_avail(XrSpatialAnchorsDeleteCompletionML, XR_TYPE_SPATIAL_ANCHORS_DELETE_COMPLETION_ML) \
|
||||
_avail(XrSpatialAnchorsUpdateExpirationInfoML, XR_TYPE_SPATIAL_ANCHORS_UPDATE_EXPIRATION_INFO_ML) \
|
||||
_avail(XrSpatialAnchorsUpdateExpirationCompletionML, XR_TYPE_SPATIAL_ANCHORS_UPDATE_EXPIRATION_COMPLETION_ML) \
|
||||
_avail(XrSpatialAnchorsPublishCompletionDetailsML, XR_TYPE_SPATIAL_ANCHORS_PUBLISH_COMPLETION_DETAILS_ML) \
|
||||
_avail(XrSpatialAnchorsDeleteCompletionDetailsML, XR_TYPE_SPATIAL_ANCHORS_DELETE_COMPLETION_DETAILS_ML) \
|
||||
_avail(XrSpatialAnchorsUpdateExpirationCompletionDetailsML, XR_TYPE_SPATIAL_ANCHORS_UPDATE_EXPIRATION_COMPLETION_DETAILS_ML) \
|
||||
_avail(XrSpatialAnchorPersistenceInfoMSFT, XR_TYPE_SPATIAL_ANCHOR_PERSISTENCE_INFO_MSFT) \
|
||||
_avail(XrSpatialAnchorFromPersistedAnchorCreateInfoMSFT, XR_TYPE_SPATIAL_ANCHOR_FROM_PERSISTED_ANCHOR_CREATE_INFO_MSFT) \
|
||||
_avail(XrSceneMarkersMSFT, XR_TYPE_SCENE_MARKERS_MSFT) \
|
||||
|
|
@ -321,6 +341,14 @@ This file contains expansion macros (X Macros) for OpenXR structures.
|
|||
_avail(XrFaceTrackerCreateInfo2FB, XR_TYPE_FACE_TRACKER_CREATE_INFO2_FB) \
|
||||
_avail(XrFaceExpressionInfo2FB, XR_TYPE_FACE_EXPRESSION_INFO2_FB) \
|
||||
_avail(XrFaceExpressionWeights2FB, XR_TYPE_FACE_EXPRESSION_WEIGHTS2_FB) \
|
||||
_avail(XrEnvironmentDepthProviderCreateInfoMETA, XR_TYPE_ENVIRONMENT_DEPTH_PROVIDER_CREATE_INFO_META) \
|
||||
_avail(XrEnvironmentDepthSwapchainCreateInfoMETA, XR_TYPE_ENVIRONMENT_DEPTH_SWAPCHAIN_CREATE_INFO_META) \
|
||||
_avail(XrEnvironmentDepthSwapchainStateMETA, XR_TYPE_ENVIRONMENT_DEPTH_SWAPCHAIN_STATE_META) \
|
||||
_avail(XrEnvironmentDepthImageAcquireInfoMETA, XR_TYPE_ENVIRONMENT_DEPTH_IMAGE_ACQUIRE_INFO_META) \
|
||||
_avail(XrEnvironmentDepthImageViewMETA, XR_TYPE_ENVIRONMENT_DEPTH_IMAGE_VIEW_META) \
|
||||
_avail(XrEnvironmentDepthImageMETA, XR_TYPE_ENVIRONMENT_DEPTH_IMAGE_META) \
|
||||
_avail(XrEnvironmentDepthHandRemovalSetInfoMETA, XR_TYPE_ENVIRONMENT_DEPTH_HAND_REMOVAL_SET_INFO_META) \
|
||||
_avail(XrSystemEnvironmentDepthPropertiesMETA, XR_TYPE_SYSTEM_ENVIRONMENT_DEPTH_PROPERTIES_META) \
|
||||
_avail(XrPassthroughCreateInfoHTC, XR_TYPE_PASSTHROUGH_CREATE_INFO_HTC) \
|
||||
_avail(XrPassthroughColorHTC, XR_TYPE_PASSTHROUGH_COLOR_HTC) \
|
||||
_avail(XrPassthroughMeshTransformInfoHTC, XR_TYPE_PASSTHROUGH_MESH_TRANSFORM_INFO_HTC) \
|
||||
|
|
@ -330,6 +358,11 @@ This file contains expansion macros (X Macros) for OpenXR structures.
|
|||
_avail(XrFoveationCustomModeInfoHTC, XR_TYPE_FOVEATION_CUSTOM_MODE_INFO_HTC) \
|
||||
_avail(XrSystemAnchorPropertiesHTC, XR_TYPE_SYSTEM_ANCHOR_PROPERTIES_HTC) \
|
||||
_avail(XrSpatialAnchorCreateInfoHTC, XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_HTC) \
|
||||
_avail(XrSystemBodyTrackingPropertiesHTC, XR_TYPE_SYSTEM_BODY_TRACKING_PROPERTIES_HTC) \
|
||||
_avail(XrBodyTrackerCreateInfoHTC, XR_TYPE_BODY_TRACKER_CREATE_INFO_HTC) \
|
||||
_avail(XrBodyJointsLocateInfoHTC, XR_TYPE_BODY_JOINTS_LOCATE_INFO_HTC) \
|
||||
_avail(XrBodyJointLocationsHTC, XR_TYPE_BODY_JOINT_LOCATIONS_HTC) \
|
||||
_avail(XrBodySkeletonHTC, XR_TYPE_BODY_SKELETON_HTC) \
|
||||
_avail(XrActiveActionSetPrioritiesEXT, XR_TYPE_ACTIVE_ACTION_SET_PRIORITIES_EXT) \
|
||||
_avail(XrSystemForceFeedbackCurlPropertiesMNDX, XR_TYPE_SYSTEM_FORCE_FEEDBACK_CURL_PROPERTIES_MNDX) \
|
||||
_avail(XrForceFeedbackCurlApplyLocationsMNDX, XR_TYPE_FORCE_FEEDBACK_CURL_APPLY_LOCATIONS_MNDX) \
|
||||
|
|
@ -342,11 +375,28 @@ This file contains expansion macros (X Macros) for OpenXR structures.
|
|||
_avail(XrPlaneDetectorLocationEXT, XR_TYPE_PLANE_DETECTOR_LOCATION_EXT) \
|
||||
_avail(XrPlaneDetectorLocationsEXT, XR_TYPE_PLANE_DETECTOR_LOCATIONS_EXT) \
|
||||
_avail(XrPlaneDetectorPolygonBufferEXT, XR_TYPE_PLANE_DETECTOR_POLYGON_BUFFER_EXT) \
|
||||
_avail(XrFutureCancelInfoEXT, XR_TYPE_FUTURE_CANCEL_INFO_EXT) \
|
||||
_avail(XrFuturePollInfoEXT, XR_TYPE_FUTURE_POLL_INFO_EXT) \
|
||||
_avail(XrFutureCompletionEXT, XR_TYPE_FUTURE_COMPLETION_EXT) \
|
||||
_avail(XrFuturePollResultEXT, XR_TYPE_FUTURE_POLL_RESULT_EXT) \
|
||||
_avail(XrEventDataUserPresenceChangedEXT, XR_TYPE_EVENT_DATA_USER_PRESENCE_CHANGED_EXT) \
|
||||
_avail(XrSystemUserPresencePropertiesEXT, XR_TYPE_SYSTEM_USER_PRESENCE_PROPERTIES_EXT) \
|
||||
_avail(XrEventDataHeadsetFitChangedML, XR_TYPE_EVENT_DATA_HEADSET_FIT_CHANGED_ML) \
|
||||
_avail(XrEventDataEyeCalibrationChangedML, XR_TYPE_EVENT_DATA_EYE_CALIBRATION_CHANGED_ML) \
|
||||
_avail(XrUserCalibrationEnableEventsInfoML, XR_TYPE_USER_CALIBRATION_ENABLE_EVENTS_INFO_ML) \
|
||||
_avail(XrSystemNotificationsSetInfoML, XR_TYPE_SYSTEM_NOTIFICATIONS_SET_INFO_ML) \
|
||||
_avail(XrWorldMeshDetectorCreateInfoML, XR_TYPE_WORLD_MESH_DETECTOR_CREATE_INFO_ML) \
|
||||
_avail(XrWorldMeshBlockStateML, XR_TYPE_WORLD_MESH_BLOCK_STATE_ML) \
|
||||
_avail(XrWorldMeshStateRequestInfoML, XR_TYPE_WORLD_MESH_STATE_REQUEST_INFO_ML) \
|
||||
_avail(XrWorldMeshStateRequestCompletionML, XR_TYPE_WORLD_MESH_STATE_REQUEST_COMPLETION_ML) \
|
||||
_avail(XrWorldMeshBufferRecommendedSizeInfoML, XR_TYPE_WORLD_MESH_BUFFER_RECOMMENDED_SIZE_INFO_ML) \
|
||||
_avail(XrWorldMeshBufferSizeML, XR_TYPE_WORLD_MESH_BUFFER_SIZE_ML) \
|
||||
_avail(XrWorldMeshBufferML, XR_TYPE_WORLD_MESH_BUFFER_ML) \
|
||||
_avail(XrWorldMeshBlockRequestML, XR_TYPE_WORLD_MESH_BLOCK_REQUEST_ML) \
|
||||
_avail(XrWorldMeshGetInfoML, XR_TYPE_WORLD_MESH_GET_INFO_ML) \
|
||||
_avail(XrWorldMeshBlockML, XR_TYPE_WORLD_MESH_BLOCK_ML) \
|
||||
_avail(XrWorldMeshRequestCompletionInfoML, XR_TYPE_WORLD_MESH_REQUEST_COMPLETION_INFO_ML) \
|
||||
_avail(XrWorldMeshRequestCompletionML, XR_TYPE_WORLD_MESH_REQUEST_COMPLETION_ML) \
|
||||
|
||||
|
||||
#if defined(XR_USE_GRAPHICS_API_D3D11)
|
||||
|
|
@ -377,6 +427,20 @@ This file contains expansion macros (X Macros) for OpenXR structures.
|
|||
|
||||
#endif
|
||||
|
||||
#if defined(XR_USE_GRAPHICS_API_METAL)
|
||||
#define _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_METAL(_avail, _unavail) \
|
||||
_avail(XrGraphicsBindingMetalKHR, XR_TYPE_GRAPHICS_BINDING_METAL_KHR) \
|
||||
_avail(XrSwapchainImageMetalKHR, XR_TYPE_SWAPCHAIN_IMAGE_METAL_KHR) \
|
||||
_avail(XrGraphicsRequirementsMetalKHR, XR_TYPE_GRAPHICS_REQUIREMENTS_METAL_KHR) \
|
||||
|
||||
#else
|
||||
#define _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_METAL(_avail, _unavail) \
|
||||
_unavail(XrGraphicsBindingMetalKHR, XR_TYPE_GRAPHICS_BINDING_METAL_KHR) \
|
||||
_unavail(XrSwapchainImageMetalKHR, XR_TYPE_SWAPCHAIN_IMAGE_METAL_KHR) \
|
||||
_unavail(XrGraphicsRequirementsMetalKHR, XR_TYPE_GRAPHICS_REQUIREMENTS_METAL_KHR) \
|
||||
|
||||
#endif
|
||||
|
||||
#if defined(XR_USE_GRAPHICS_API_OPENGL)
|
||||
#define _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL(_avail, _unavail) \
|
||||
_avail(XrSwapchainImageOpenGLKHR, XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_KHR) \
|
||||
|
|
|
|||
28
engine/thirdparty/openxr/patches/0001-glad-egl.patch
vendored
Normal file
28
engine/thirdparty/openxr/patches/0001-glad-egl.patch
vendored
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
diff --git a/thirdparty/openxr/src/common/xr_dependencies.h b/thirdparty/openxr/src/common/xr_dependencies.h
|
||||
index 55d93bfbac..a192a2ec6d 100644
|
||||
--- a/thirdparty/openxr/src/common/xr_dependencies.h
|
||||
+++ b/thirdparty/openxr/src/common/xr_dependencies.h
|
||||
@@ -65,7 +65,11 @@
|
||||
#endif // XR_USE_GRAPHICS_API_OPENGL
|
||||
|
||||
#ifdef XR_USE_GRAPHICS_API_OPENGL_ES
|
||||
+#ifdef GLAD_ENABLED
|
||||
+#include "thirdparty/glad/glad/egl.h"
|
||||
+#else
|
||||
#include <EGL/egl.h>
|
||||
+#endif
|
||||
#endif // XR_USE_GRAPHICS_API_OPENGL_ES
|
||||
|
||||
#ifdef XR_USE_GRAPHICS_API_VULKAN
|
||||
@@ -77,7 +81,11 @@
|
||||
#endif // XR_USE_PLATFORM_WAYLAND
|
||||
|
||||
#ifdef XR_USE_PLATFORM_EGL
|
||||
+#ifdef GLAD_ENABLED
|
||||
+#include "thirdparty/glad/glad/egl.h"
|
||||
+#else
|
||||
#include <EGL/egl.h>
|
||||
+#endif
|
||||
#endif // XR_USE_PLATFORM_EGL
|
||||
|
||||
#if defined(XR_USE_PLATFORM_XLIB) || defined(XR_USE_PLATFORM_XCB)
|
||||
|
|
@ -47,7 +47,7 @@
|
|||
#define XR_ARCH_ABI "aarch64"
|
||||
#elif (defined(__ARM_ARCH) && __ARM_ARCH >= 7 && (defined(__ARM_PCS_VFP) || defined(__ANDROID__))) || defined(_M_ARM)
|
||||
#define XR_ARCH_ABI "armv7a-vfp"
|
||||
#elif defined(__ARM_ARCH_5TE__)
|
||||
#elif defined(__ARM_ARCH_5TE__) || (defined(__ARM_ARCH) && __ARM_ARCH > 5)
|
||||
#define XR_ARCH_ABI "armv5te"
|
||||
#elif defined(__mips64)
|
||||
#define XR_ARCH_ABI "mips64"
|
||||
|
|
@ -91,23 +91,22 @@ namespace detail {
|
|||
|
||||
static inline char* ImplGetEnv(const char* name) { return getenv(name); }
|
||||
|
||||
static inline int ImplSetEnv(const char* name, const char* value, int overwrite) { return setenv(name, value, overwrite); }
|
||||
|
||||
// clang-format off
|
||||
static inline char* ImplGetSecureEnv(const char* name) {
|
||||
#ifdef HAVE_SECURE_GETENV
|
||||
return secure_getenv(name);
|
||||
#elif defined(HAVE___SECURE_GETENV)
|
||||
return __secure_getenv(name);
|
||||
#else
|
||||
// clang-format off
|
||||
#pragma message( \
|
||||
"Warning: Falling back to non-secure getenv for environmental" \
|
||||
"lookups! Consider updating to a different libc.")
|
||||
// clang-format on
|
||||
|
||||
return ImplGetEnv(name);
|
||||
#endif
|
||||
}
|
||||
// clang-format on
|
||||
|
||||
} // namespace detail
|
||||
|
||||
#endif // defined(XR_OS_LINUX) || defined(XR_OS_APPLE)
|
||||
|
|
@ -162,12 +161,6 @@ static inline std::string PlatformUtilsGetSecureEnv(const char* name) {
|
|||
|
||||
static inline bool PlatformUtilsGetEnvSet(const char* name) { return detail::ImplGetEnv(name) != nullptr; }
|
||||
|
||||
static inline bool PlatformUtilsSetEnv(const char* name, const char* value) {
|
||||
const int shouldOverwrite = 1;
|
||||
int result = detail::ImplSetEnv(name, value, shouldOverwrite);
|
||||
return (result == 0);
|
||||
}
|
||||
|
||||
#elif defined(XR_OS_APPLE)
|
||||
|
||||
static inline std::string PlatformUtilsGetEnv(const char* name) {
|
||||
|
|
@ -188,12 +181,6 @@ static inline std::string PlatformUtilsGetSecureEnv(const char* name) {
|
|||
|
||||
static inline bool PlatformUtilsGetEnvSet(const char* name) { return detail::ImplGetEnv(name) != nullptr; }
|
||||
|
||||
static inline bool PlatformUtilsSetEnv(const char* name, const char* value) {
|
||||
const int shouldOverwrite = 1;
|
||||
int result = detail::ImplSetEnv(name, value, shouldOverwrite);
|
||||
return (result == 0);
|
||||
}
|
||||
|
||||
static inline bool PlatformGetGlobalRuntimeFileName(uint16_t major_version, std::string& file_name) {
|
||||
return detail::ImplTryRuntimeFilename("/usr/local/share/openxr/", major_version, file_name);
|
||||
}
|
||||
|
|
@ -337,19 +324,10 @@ static inline std::string PlatformUtilsGetSecureEnv(const char* name) {
|
|||
return envValue;
|
||||
}
|
||||
|
||||
// Sets an environment variable via UTF8 strings.
|
||||
// The name is case-sensitive.
|
||||
// Overwrites the variable if it already exists.
|
||||
// Returns true if it could be set.
|
||||
static inline bool PlatformUtilsSetEnv(const char* name, const char* value) {
|
||||
const std::wstring wname = utf8_to_wide(name);
|
||||
const std::wstring wvalue = utf8_to_wide(value);
|
||||
BOOL result = ::SetEnvironmentVariableW(wname.c_str(), wvalue.c_str());
|
||||
return (result != 0);
|
||||
}
|
||||
|
||||
#elif defined(XR_OS_ANDROID)
|
||||
|
||||
#include <sys/system_properties.h>
|
||||
|
||||
static inline bool PlatformUtilsGetEnvSet(const char* /* name */) {
|
||||
// Stub func
|
||||
return false;
|
||||
|
|
@ -365,11 +343,6 @@ static inline std::string PlatformUtilsGetSecureEnv(const char* /* name */) {
|
|||
return {};
|
||||
}
|
||||
|
||||
static inline bool PlatformUtilsSetEnv(const char* /* name */, const char* /* value */) {
|
||||
// Stub func
|
||||
return false;
|
||||
}
|
||||
|
||||
// Intended to be only used as a fallback on Android, with a more open, "native" technique used in most cases
|
||||
static inline bool PlatformGetGlobalRuntimeFileName(uint16_t major_version, std::string& file_name) {
|
||||
// Prefix for the runtime JSON file name
|
||||
|
|
@ -385,6 +358,37 @@ static inline bool PlatformGetGlobalRuntimeFileName(uint16_t major_version, std:
|
|||
|
||||
return false;
|
||||
}
|
||||
|
||||
// Android system properties are sufficiently different from environment variables that we are not re-using
|
||||
// PlatformUtilsGetEnv for this purpose
|
||||
static inline std::string PlatformUtilsGetAndroidSystemProperty(const char* name) {
|
||||
std::string result;
|
||||
const prop_info* pi = __system_property_find(name);
|
||||
if (pi == nullptr) {
|
||||
return {};
|
||||
}
|
||||
|
||||
#if __ANDROID_API__ >= 26
|
||||
// use callback to retrieve > 92 character sys prop values, if available
|
||||
__system_property_read_callback(
|
||||
pi,
|
||||
[](void* cookie, const char*, const char* value, uint32_t) {
|
||||
auto property_value = reinterpret_cast<std::string*>(cookie);
|
||||
*property_value = value;
|
||||
},
|
||||
reinterpret_cast<void*>(&result));
|
||||
#endif // __ANDROID_API__ >= 26
|
||||
// fallback to __system_property_get if no value retrieved via callback
|
||||
if (result.empty()) {
|
||||
char value[PROP_VALUE_MAX] = {};
|
||||
if (__system_property_get(name, value) != 0) {
|
||||
result = value;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
#else // Not Linux, Apple, nor Windows
|
||||
|
||||
static inline bool PlatformUtilsGetEnvSet(const char* /* name */) {
|
||||
|
|
@ -402,11 +406,6 @@ static inline std::string PlatformUtilsGetSecureEnv(const char* /* name */) {
|
|||
return {};
|
||||
}
|
||||
|
||||
static inline bool PlatformUtilsSetEnv(const char* /* name */, const char* /* value */) {
|
||||
// Stub func
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline bool PlatformGetGlobalRuntimeFileName(uint16_t /* major_version */, std::string const& /* file_name */) {
|
||||
// Stub func
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -65,7 +65,11 @@
|
|||
#endif // XR_USE_GRAPHICS_API_OPENGL
|
||||
|
||||
#ifdef XR_USE_GRAPHICS_API_OPENGL_ES
|
||||
#ifdef GLAD_ENABLED
|
||||
#include "thirdparty/glad/glad/egl.h"
|
||||
#else
|
||||
#include <EGL/egl.h>
|
||||
#endif
|
||||
#endif // XR_USE_GRAPHICS_API_OPENGL_ES
|
||||
|
||||
#ifdef XR_USE_GRAPHICS_API_VULKAN
|
||||
|
|
@ -77,7 +81,11 @@
|
|||
#endif // XR_USE_PLATFORM_WAYLAND
|
||||
|
||||
#ifdef XR_USE_PLATFORM_EGL
|
||||
#ifdef GLAD_ENABLED
|
||||
#include "thirdparty/glad/glad/egl.h"
|
||||
#else
|
||||
#include <EGL/egl.h>
|
||||
#endif
|
||||
#endif // XR_USE_PLATFORM_EGL
|
||||
|
||||
#if defined(XR_USE_PLATFORM_XLIB) || defined(XR_USE_PLATFORM_XCB)
|
||||
|
|
|
|||
|
|
@ -134,7 +134,7 @@ static const XrColor4f XrColorCyan = {0.0f, 1.0f, 1.0f, 1.0f};
|
|||
static const XrColor4f XrColorLightGrey = {0.7f, 0.7f, 0.7f, 1.0f};
|
||||
static const XrColor4f XrColorDarkGrey = {0.3f, 0.3f, 0.3f, 1.0f};
|
||||
|
||||
typedef enum GraphicsAPI { GRAPHICS_VULKAN, GRAPHICS_OPENGL, GRAPHICS_OPENGL_ES, GRAPHICS_D3D } GraphicsAPI;
|
||||
typedef enum GraphicsAPI { GRAPHICS_VULKAN, GRAPHICS_OPENGL, GRAPHICS_OPENGL_ES, GRAPHICS_D3D, GRAPHICS_METAL } GraphicsAPI;
|
||||
|
||||
// Column-major, pre-multiplied. This type does not exist in the OpenXR API and is provided for convenience.
|
||||
typedef struct XrMatrix4x4f {
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@
|
|||
|
||||
#include <openxr/openxr.h>
|
||||
|
||||
#include <dlfcn.h>
|
||||
#include <sstream>
|
||||
#include <vector>
|
||||
#include <android/log.h>
|
||||
|
|
@ -82,7 +83,6 @@ static Uri makeContentUri(bool systemBroker, int majorVersion, const char *abi)
|
|||
.appendPath(abi)
|
||||
.appendPath(RUNTIMES_PATH)
|
||||
.appendPath(TABLE_PATH);
|
||||
ContentUris::appendId(builder, 0);
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
|
|
@ -175,7 +175,6 @@ static inline jni::Array<std::string> makeArray(std::initializer_list<const char
|
|||
}
|
||||
return ret;
|
||||
}
|
||||
static constexpr auto TAG = "OpenXR-Loader";
|
||||
|
||||
#if defined(__arm__)
|
||||
static constexpr auto ABI = "armeabi-v7l";
|
||||
|
|
@ -313,26 +312,41 @@ int getActiveRuntimeVirtualManifest(wrap::android::content::Context const &conte
|
|||
|
||||
cursor.moveToFirst();
|
||||
|
||||
auto filename = cursor.getString(cursor.getColumnIndex(active_runtime::Columns::SO_FILENAME));
|
||||
auto libDir = cursor.getString(cursor.getColumnIndex(active_runtime::Columns::NATIVE_LIB_DIR));
|
||||
auto packageName = cursor.getString(cursor.getColumnIndex(active_runtime::Columns::PACKAGE_NAME));
|
||||
do {
|
||||
auto filename = cursor.getString(cursor.getColumnIndex(active_runtime::Columns::SO_FILENAME));
|
||||
auto libDir = cursor.getString(cursor.getColumnIndex(active_runtime::Columns::NATIVE_LIB_DIR));
|
||||
auto packageName = cursor.getString(cursor.getColumnIndex(active_runtime::Columns::PACKAGE_NAME));
|
||||
|
||||
auto hasFunctions = cursor.getInt(cursor.getColumnIndex(active_runtime::Columns::HAS_FUNCTIONS)) == 1;
|
||||
__android_log_print(ANDROID_LOG_INFO, TAG, "Got runtime: package: %s, so filename: %s, native lib dir: %s, has functions: %s",
|
||||
packageName.c_str(), filename.c_str(), libDir.c_str(), (hasFunctions ? "yes" : "no"));
|
||||
auto hasFunctions = cursor.getInt(cursor.getColumnIndex(active_runtime::Columns::HAS_FUNCTIONS)) == 1;
|
||||
ALOGI("Got runtime: package: %s, so filename: %s, native lib dir: %s, has functions: %s", packageName.c_str(),
|
||||
filename.c_str(), libDir.c_str(), (hasFunctions ? "yes" : "no"));
|
||||
|
||||
auto lib_path = libDir + "/" + filename;
|
||||
cursor.close();
|
||||
auto lib_path = libDir + "/" + filename;
|
||||
auto *lib = dlopen(lib_path.c_str(), RTLD_LAZY | RTLD_LOCAL);
|
||||
if (lib) {
|
||||
// we found a runtime that we can dlopen, use it.
|
||||
dlclose(lib);
|
||||
|
||||
JsonManifestBuilder builder{"runtime", lib_path};
|
||||
if (hasFunctions) {
|
||||
int result = populateFunctions(context, systemBroker, packageName, builder);
|
||||
if (result != 0) {
|
||||
return result;
|
||||
JsonManifestBuilder builder{"runtime", lib_path};
|
||||
if (hasFunctions) {
|
||||
int result = populateFunctions(context, systemBroker, packageName, builder);
|
||||
if (result != 0) {
|
||||
ALOGW("Unable to populate functions from runtime: %s, checking for more records...", lib_path.c_str());
|
||||
continue;
|
||||
}
|
||||
}
|
||||
virtualManifest = builder.build();
|
||||
cursor.close();
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
virtualManifest = builder.build();
|
||||
return 0;
|
||||
// this runtime was not accessible, see if the broker has more runtimes on
|
||||
// offer.
|
||||
ALOGV("Unable to open broker provided runtime at %s, checking for more records...", lib_path.c_str());
|
||||
} while (cursor.moveToNext());
|
||||
|
||||
ALOGE("Unable to open any of the broker provided runtimes.");
|
||||
cursor.close();
|
||||
return -1;
|
||||
}
|
||||
} // namespace openxr_android
|
||||
|
||||
|
|
|
|||
|
|
@ -334,7 +334,7 @@ static XRAPI_ATTR XrResult XRAPI_CALL LoaderXrDestroyInstance(XrInstance instanc
|
|||
return result;
|
||||
}
|
||||
|
||||
const std::unique_ptr<XrGeneratedDispatchTable> &dispatch_table = loader_instance->DispatchTable();
|
||||
const std::unique_ptr<XrGeneratedDispatchTableCore> &dispatch_table = loader_instance->DispatchTable();
|
||||
|
||||
// If we allocated a default debug utils messenger, free it
|
||||
XrDebugUtilsMessengerEXT messenger = loader_instance->DefaultDebugUtilsMessenger();
|
||||
|
|
@ -546,7 +546,7 @@ LoaderTrampolineSessionBeginDebugUtilsLabelRegionEXT(XrSession session, const Xr
|
|||
return result;
|
||||
}
|
||||
LoaderLogger::GetInstance().BeginLabelRegion(session, labelInfo);
|
||||
const std::unique_ptr<XrGeneratedDispatchTable> &dispatch_table = loader_instance->DispatchTable();
|
||||
const std::unique_ptr<XrGeneratedDispatchTableCore> &dispatch_table = loader_instance->DispatchTable();
|
||||
if (nullptr != dispatch_table->SessionBeginDebugUtilsLabelRegionEXT) {
|
||||
return dispatch_table->SessionBeginDebugUtilsLabelRegionEXT(session, labelInfo);
|
||||
}
|
||||
|
|
@ -567,7 +567,7 @@ static XRAPI_ATTR XrResult XRAPI_CALL LoaderTrampolineSessionEndDebugUtilsLabelR
|
|||
}
|
||||
|
||||
LoaderLogger::GetInstance().EndLabelRegion(session);
|
||||
const std::unique_ptr<XrGeneratedDispatchTable> &dispatch_table = loader_instance->DispatchTable();
|
||||
const std::unique_ptr<XrGeneratedDispatchTableCore> &dispatch_table = loader_instance->DispatchTable();
|
||||
if (nullptr != dispatch_table->SessionEndDebugUtilsLabelRegionEXT) {
|
||||
return dispatch_table->SessionEndDebugUtilsLabelRegionEXT(session);
|
||||
}
|
||||
|
|
@ -597,7 +597,7 @@ LoaderTrampolineSessionInsertDebugUtilsLabelEXT(XrSession session, const XrDebug
|
|||
|
||||
LoaderLogger::GetInstance().InsertLabel(session, labelInfo);
|
||||
|
||||
const std::unique_ptr<XrGeneratedDispatchTable> &dispatch_table = loader_instance->DispatchTable();
|
||||
const std::unique_ptr<XrGeneratedDispatchTableCore> &dispatch_table = loader_instance->DispatchTable();
|
||||
if (nullptr != dispatch_table->SessionInsertDebugUtilsLabelEXT) {
|
||||
return dispatch_table->SessionInsertDebugUtilsLabelEXT(session, labelInfo);
|
||||
}
|
||||
|
|
@ -643,7 +643,7 @@ XRAPI_ATTR XrResult XRAPI_CALL LoaderXrTermCreateDebugUtilsMessengerEXT(XrInstan
|
|||
"xrCreateDebugUtilsMessengerEXT", "invalid messenger pointer");
|
||||
return XR_ERROR_VALIDATION_FAILURE;
|
||||
}
|
||||
const XrGeneratedDispatchTable *dispatch_table = RuntimeInterface::GetDispatchTable(instance);
|
||||
const XrGeneratedDispatchTableCore *dispatch_table = RuntimeInterface::GetDispatchTable(instance);
|
||||
XrResult result = XR_SUCCESS;
|
||||
// This extension is supported entirely by the loader which means the runtime may or may not support it.
|
||||
if (nullptr != dispatch_table->CreateDebugUtilsMessengerEXT) {
|
||||
|
|
@ -664,7 +664,7 @@ XRLOADER_ABI_CATCH_FALLBACK
|
|||
|
||||
XRAPI_ATTR XrResult XRAPI_CALL LoaderXrTermDestroyDebugUtilsMessengerEXT(XrDebugUtilsMessengerEXT messenger) XRLOADER_ABI_TRY {
|
||||
LoaderLogger::LogVerboseMessage("xrDestroyDebugUtilsMessengerEXT", "Entering loader terminator");
|
||||
const XrGeneratedDispatchTable *dispatch_table = RuntimeInterface::GetDebugUtilsMessengerDispatchTable(messenger);
|
||||
const XrGeneratedDispatchTableCore *dispatch_table = RuntimeInterface::GetDebugUtilsMessengerDispatchTable(messenger);
|
||||
XrResult result = XR_SUCCESS;
|
||||
LoaderLogger::GetInstance().RemoveLogRecorder(MakeHandleGeneric(messenger));
|
||||
RuntimeInterface::GetRuntime().ForgetDebugMessenger(messenger);
|
||||
|
|
@ -684,7 +684,7 @@ XRAPI_ATTR XrResult XRAPI_CALL LoaderXrTermSubmitDebugUtilsMessageEXT(
|
|||
XrInstance instance, XrDebugUtilsMessageSeverityFlagsEXT messageSeverity, XrDebugUtilsMessageTypeFlagsEXT messageTypes,
|
||||
const XrDebugUtilsMessengerCallbackDataEXT *callbackData) XRLOADER_ABI_TRY {
|
||||
LoaderLogger::LogVerboseMessage("xrSubmitDebugUtilsMessageEXT", "Entering loader terminator");
|
||||
const XrGeneratedDispatchTable *dispatch_table = RuntimeInterface::GetDispatchTable(instance);
|
||||
const XrGeneratedDispatchTableCore *dispatch_table = RuntimeInterface::GetDispatchTable(instance);
|
||||
XrResult result = XR_SUCCESS;
|
||||
if (nullptr != dispatch_table->SubmitDebugUtilsMessageEXT) {
|
||||
result = dispatch_table->SubmitDebugUtilsMessageEXT(instance, messageSeverity, messageTypes, callbackData);
|
||||
|
|
@ -701,7 +701,7 @@ XRLOADER_ABI_CATCH_FALLBACK
|
|||
XRAPI_ATTR XrResult XRAPI_CALL
|
||||
LoaderXrTermSetDebugUtilsObjectNameEXT(XrInstance instance, const XrDebugUtilsObjectNameInfoEXT *nameInfo) XRLOADER_ABI_TRY {
|
||||
LoaderLogger::LogVerboseMessage("xrSetDebugUtilsObjectNameEXT", "Entering loader terminator");
|
||||
const XrGeneratedDispatchTable *dispatch_table = RuntimeInterface::GetDispatchTable(instance);
|
||||
const XrGeneratedDispatchTableCore *dispatch_table = RuntimeInterface::GetDispatchTable(instance);
|
||||
XrResult result = XR_SUCCESS;
|
||||
if (nullptr != dispatch_table->SetDebugUtilsObjectNameEXT) {
|
||||
result = dispatch_table->SetDebugUtilsObjectNameEXT(instance, nameInfo);
|
||||
|
|
|
|||
|
|
@ -278,12 +278,12 @@ LoaderInstance::LoaderInstance(XrInstance instance, const XrInstanceCreateInfo*
|
|||
: _runtime_instance(instance),
|
||||
_topmost_gipa(topmost_gipa),
|
||||
_api_layer_interfaces(std::move(api_layer_interfaces)),
|
||||
_dispatch_table(new XrGeneratedDispatchTable{}) {
|
||||
_dispatch_table(new XrGeneratedDispatchTableCore{}) {
|
||||
for (uint32_t ext = 0; ext < create_info->enabledExtensionCount; ++ext) {
|
||||
_enabled_extensions.push_back(create_info->enabledExtensionNames[ext]);
|
||||
}
|
||||
|
||||
GeneratedXrPopulateDispatchTable(_dispatch_table.get(), instance, topmost_gipa);
|
||||
GeneratedXrPopulateDispatchTableCore(_dispatch_table.get(), instance, topmost_gipa);
|
||||
}
|
||||
|
||||
LoaderInstance::~LoaderInstance() {
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@
|
|||
#include <vector>
|
||||
|
||||
class ApiLayerInterface;
|
||||
struct XrGeneratedDispatchTable;
|
||||
struct XrGeneratedDispatchTableCore;
|
||||
class LoaderInstance;
|
||||
|
||||
// Manage the single loader instance that is available.
|
||||
|
|
@ -54,7 +54,7 @@ class LoaderInstance {
|
|||
virtual ~LoaderInstance();
|
||||
|
||||
XrInstance GetInstanceHandle() { return _runtime_instance; }
|
||||
const std::unique_ptr<XrGeneratedDispatchTable>& DispatchTable() { return _dispatch_table; }
|
||||
const std::unique_ptr<XrGeneratedDispatchTableCore>& DispatchTable() { return _dispatch_table; }
|
||||
std::vector<std::unique_ptr<ApiLayerInterface>>& LayerInterfaces() { return _api_layer_interfaces; }
|
||||
bool ExtensionIsEnabled(const std::string& extension);
|
||||
XrDebugUtilsMessengerEXT DefaultDebugUtilsMessenger() { return _messenger; }
|
||||
|
|
@ -71,7 +71,7 @@ class LoaderInstance {
|
|||
std::vector<std::string> _enabled_extensions;
|
||||
std::vector<std::unique_ptr<ApiLayerInterface>> _api_layer_interfaces;
|
||||
|
||||
std::unique_ptr<XrGeneratedDispatchTable> _dispatch_table;
|
||||
std::unique_ptr<XrGeneratedDispatchTableCore> _dispatch_table;
|
||||
// Internal debug messenger created during xrCreateInstance
|
||||
XrDebugUtilsMessengerEXT _messenger{XR_NULL_HANDLE};
|
||||
};
|
||||
|
|
|
|||
|
|
@ -75,11 +75,12 @@ static inline bool StringEndsWith(const std::string &value, const std::string &e
|
|||
}
|
||||
|
||||
// If the file found is a manifest file name, add it to the out_files manifest list.
|
||||
static void AddIfJson(const std::string &full_file, std::vector<std::string> &manifest_files) {
|
||||
static bool AddIfJson(const std::string &full_file, std::vector<std::string> &manifest_files) {
|
||||
if (full_file.empty() || !StringEndsWith(full_file, ".json")) {
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
manifest_files.push_back(full_file);
|
||||
return true;
|
||||
}
|
||||
|
||||
// Check the current path for any manifest files. If the provided search_path is a directory, look for
|
||||
|
|
@ -381,7 +382,6 @@ static void ReadRuntimeDataFilesInRegistry(const std::string &runtime_registry_l
|
|||
if (ERROR_SUCCESS != open_value) {
|
||||
LoaderLogger::LogWarningMessage("",
|
||||
"ReadRuntimeDataFilesInRegistry - failed to open registry key " + full_registry_location);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -391,7 +391,23 @@ static void ReadRuntimeDataFilesInRegistry(const std::string &runtime_registry_l
|
|||
LoaderLogger::LogWarningMessage(
|
||||
"", "ReadRuntimeDataFilesInRegistry - failed to read registry value " + default_runtime_value_name);
|
||||
} else {
|
||||
AddFilesInPath(wide_to_utf8(value_w), false, manifest_files);
|
||||
// Not using AddFilesInPath here (as only api_layer manifest paths allow multiple
|
||||
// separated paths)
|
||||
// Small time-of-check vs time-of-use issue here but it mainly only affects the error message.
|
||||
// It does not introduce a security defect.
|
||||
std::string activeRuntimePath = wide_to_utf8(value_w);
|
||||
if (FileSysUtilsIsRegularFile(activeRuntimePath)) {
|
||||
// If the file exists, try to add it
|
||||
std::string absolute_path;
|
||||
FileSysUtilsGetAbsolutePath(activeRuntimePath, absolute_path);
|
||||
if (!AddIfJson(absolute_path, manifest_files)) {
|
||||
LoaderLogger::LogErrorMessage(
|
||||
"", "ReadRuntimeDataFilesInRegistry - registry runtime path is not json " + activeRuntimePath);
|
||||
}
|
||||
} else {
|
||||
LoaderLogger::LogErrorMessage(
|
||||
"", "ReadRuntimeDataFilesInRegistry - registry runtime path does not exist " + activeRuntimePath);
|
||||
}
|
||||
}
|
||||
|
||||
RegCloseKey(hkey);
|
||||
|
|
@ -757,8 +773,7 @@ void ApiLayerManifestFile::AddManifestFilesAndroid(const std::string &openxr_com
|
|||
}
|
||||
std::istringstream json_stream(std::string{buf, length});
|
||||
|
||||
CreateIfValid(ManifestFileType::MANIFEST_TYPE_EXPLICIT_API_LAYER, filename, json_stream,
|
||||
&ApiLayerManifestFile::LocateLibraryInAssets, manifest_files);
|
||||
CreateIfValid(type, filename, json_stream, &ApiLayerManifestFile::LocateLibraryInAssets, manifest_files);
|
||||
}
|
||||
}
|
||||
#endif // defined(XR_USE_PLATFORM_ANDROID) && defined(XR_KHR_LOADER_INIT_SUPPORT)
|
||||
|
|
|
|||
|
|
@ -126,6 +126,10 @@ XrResult RuntimeInterface::TryLoadingSingleRuntime(const std::string& openxr_com
|
|||
XrResult res = XR_ERROR_RUNTIME_FAILURE;
|
||||
if (nullptr != negotiate) {
|
||||
res = negotiate(&loader_info, &runtime_info);
|
||||
} else {
|
||||
std::string error_message = "RuntimeInterface::LoadRuntime failed to find negotiate function ";
|
||||
error_message += function_name;
|
||||
LoaderLogger::LogErrorMessage(openxr_command, error_message);
|
||||
}
|
||||
// If we supposedly succeeded, but got a nullptr for GetInstanceProcAddr
|
||||
// then something still went wrong, so return with an error.
|
||||
|
|
@ -270,8 +274,8 @@ XrResult RuntimeInterface::GetInstanceProcAddr(XrInstance instance, const char*
|
|||
return GetInstance()->_get_instance_proc_addr(instance, name, function);
|
||||
}
|
||||
|
||||
const XrGeneratedDispatchTable* RuntimeInterface::GetDispatchTable(XrInstance instance) {
|
||||
XrGeneratedDispatchTable* table = nullptr;
|
||||
const XrGeneratedDispatchTableCore* RuntimeInterface::GetDispatchTable(XrInstance instance) {
|
||||
XrGeneratedDispatchTableCore* table = nullptr;
|
||||
std::lock_guard<std::mutex> mlock(GetInstance()->_dispatch_table_mutex);
|
||||
auto it = GetInstance()->_dispatch_table_map.find(instance);
|
||||
if (it != GetInstance()->_dispatch_table_map.end()) {
|
||||
|
|
@ -280,7 +284,7 @@ const XrGeneratedDispatchTable* RuntimeInterface::GetDispatchTable(XrInstance in
|
|||
return table;
|
||||
}
|
||||
|
||||
const XrGeneratedDispatchTable* RuntimeInterface::GetDebugUtilsMessengerDispatchTable(XrDebugUtilsMessengerEXT messenger) {
|
||||
const XrGeneratedDispatchTableCore* RuntimeInterface::GetDebugUtilsMessengerDispatchTable(XrDebugUtilsMessengerEXT messenger) {
|
||||
XrInstance runtime_instance = XR_NULL_HANDLE;
|
||||
{
|
||||
std::lock_guard<std::mutex> mlock(GetInstance()->_messenger_to_instance_mutex);
|
||||
|
|
@ -349,8 +353,8 @@ XrResult RuntimeInterface::CreateInstance(const XrInstanceCreateInfo* info, XrIn
|
|||
res = rt_xrCreateInstance(info, instance);
|
||||
if (XR_SUCCEEDED(res)) {
|
||||
create_succeeded = true;
|
||||
std::unique_ptr<XrGeneratedDispatchTable> dispatch_table(new XrGeneratedDispatchTable());
|
||||
GeneratedXrPopulateDispatchTable(dispatch_table.get(), *instance, _get_instance_proc_addr);
|
||||
std::unique_ptr<XrGeneratedDispatchTableCore> dispatch_table(new XrGeneratedDispatchTableCore());
|
||||
GeneratedXrPopulateDispatchTableCore(dispatch_table.get(), *instance, _get_instance_proc_addr);
|
||||
std::lock_guard<std::mutex> mlock(_dispatch_table_mutex);
|
||||
_dispatch_table_map[*instance] = std::move(dispatch_table);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ class Value;
|
|||
}
|
||||
|
||||
class RuntimeManifestFile;
|
||||
struct XrGeneratedDispatchTable;
|
||||
struct XrGeneratedDispatchTableCore;
|
||||
|
||||
class RuntimeInterface {
|
||||
public:
|
||||
|
|
@ -37,8 +37,8 @@ class RuntimeInterface {
|
|||
static XrResult GetInstanceProcAddr(XrInstance instance, const char* name, PFN_xrVoidFunction* function);
|
||||
|
||||
// Get the direct dispatch table to this runtime, without API layers or loader terminators.
|
||||
static const XrGeneratedDispatchTable* GetDispatchTable(XrInstance instance);
|
||||
static const XrGeneratedDispatchTable* GetDebugUtilsMessengerDispatchTable(XrDebugUtilsMessengerEXT messenger);
|
||||
static const XrGeneratedDispatchTableCore* GetDispatchTable(XrInstance instance);
|
||||
static const XrGeneratedDispatchTableCore* GetDebugUtilsMessengerDispatchTable(XrDebugUtilsMessengerEXT messenger);
|
||||
|
||||
void GetInstanceExtensionProperties(std::vector<XrExtensionProperties>& extension_properties);
|
||||
bool SupportsExtension(const std::string& extension_name);
|
||||
|
|
@ -66,7 +66,7 @@ class RuntimeInterface {
|
|||
|
||||
LoaderPlatformLibraryHandle _runtime_library;
|
||||
PFN_xrGetInstanceProcAddr _get_instance_proc_addr;
|
||||
std::unordered_map<XrInstance, std::unique_ptr<XrGeneratedDispatchTable>> _dispatch_table_map;
|
||||
std::unordered_map<XrInstance, std::unique_ptr<XrGeneratedDispatchTableCore>> _dispatch_table_map;
|
||||
std::mutex _dispatch_table_mutex;
|
||||
std::unordered_map<XrDebugUtilsMessengerEXT, XrInstance> _messenger_to_instance_map;
|
||||
std::mutex _messenger_to_instance_mutex;
|
||||
|
|
|
|||
|
|
@ -697,4 +697,17 @@ extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrStopHapticFeedback(
|
|||
}
|
||||
XRLOADER_ABI_CATCH_FALLBACK
|
||||
|
||||
extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrLocateSpaces(
|
||||
XrSession session,
|
||||
const XrSpacesLocateInfo* locateInfo,
|
||||
XrSpaceLocations* spaceLocations) XRLOADER_ABI_TRY {
|
||||
LoaderInstance* loader_instance;
|
||||
XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrLocateSpaces");
|
||||
if (XR_SUCCEEDED(result)) {
|
||||
result = loader_instance->DispatchTable()->LocateSpaces(session, locateInfo, spaceLocations);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
XRLOADER_ABI_CATCH_FALLBACK
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -245,6 +245,10 @@ extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrApplyHapticFeedback(
|
|||
extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrStopHapticFeedback(
|
||||
XrSession session,
|
||||
const XrHapticActionInfo* hapticActionInfo);
|
||||
extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrLocateSpaces(
|
||||
XrSession session,
|
||||
const XrSpacesLocateInfo* locateInfo,
|
||||
XrSpaceLocations* spaceLocations);
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
extern "C" {
|
||||
#endif
|
||||
// Helper function to populate an instance dispatch table
|
||||
void GeneratedXrPopulateDispatchTable(struct XrGeneratedDispatchTable *table,
|
||||
void GeneratedXrPopulateDispatchTableCore(struct XrGeneratedDispatchTableCore *table,
|
||||
XrInstance instance,
|
||||
PFN_xrGetInstanceProcAddr get_inst_proc_addr) {
|
||||
|
||||
|
|
@ -96,6 +96,9 @@ void GeneratedXrPopulateDispatchTable(struct XrGeneratedDispatchTable *table,
|
|||
(get_inst_proc_addr(instance, "xrApplyHapticFeedback", (PFN_xrVoidFunction*)&table->ApplyHapticFeedback));
|
||||
(get_inst_proc_addr(instance, "xrStopHapticFeedback", (PFN_xrVoidFunction*)&table->StopHapticFeedback));
|
||||
|
||||
// ---- Core 1.1 commands
|
||||
(get_inst_proc_addr(instance, "xrLocateSpaces", (PFN_xrVoidFunction*)&table->LocateSpaces));
|
||||
|
||||
// ---- XR_EXT_debug_utils extension commands
|
||||
(get_inst_proc_addr(instance, "xrSetDebugUtilsObjectNameEXT", (PFN_xrVoidFunction*)&table->SetDebugUtilsObjectNameEXT));
|
||||
(get_inst_proc_addr(instance, "xrCreateDebugUtilsMessengerEXT", (PFN_xrVoidFunction*)&table->CreateDebugUtilsMessengerEXT));
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@
|
|||
extern "C" {
|
||||
#endif
|
||||
// Generated dispatch table
|
||||
struct XrGeneratedDispatchTable {
|
||||
struct XrGeneratedDispatchTableCore {
|
||||
|
||||
// ---- Core 1.0 commands
|
||||
PFN_xrGetInstanceProcAddr GetInstanceProcAddr;
|
||||
|
|
@ -97,6 +97,9 @@ struct XrGeneratedDispatchTable {
|
|||
PFN_xrApplyHapticFeedback ApplyHapticFeedback;
|
||||
PFN_xrStopHapticFeedback StopHapticFeedback;
|
||||
|
||||
// ---- Core 1.1 commands
|
||||
PFN_xrLocateSpaces LocateSpaces;
|
||||
|
||||
// ---- XR_EXT_debug_utils extension commands
|
||||
PFN_xrSetDebugUtilsObjectNameEXT SetDebugUtilsObjectNameEXT;
|
||||
PFN_xrCreateDebugUtilsMessengerEXT CreateDebugUtilsMessengerEXT;
|
||||
|
|
@ -109,7 +112,7 @@ struct XrGeneratedDispatchTable {
|
|||
|
||||
|
||||
// Prototype for dispatch table helper function
|
||||
void GeneratedXrPopulateDispatchTable(struct XrGeneratedDispatchTable *table,
|
||||
void GeneratedXrPopulateDispatchTableCore(struct XrGeneratedDispatchTableCore *table,
|
||||
XrInstance instance,
|
||||
PFN_xrGetInstanceProcAddr get_inst_proc_addr);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue