Browse Source

Merge pull request #78335 from akien-mga/openxr-1.0.27

openxr: Sync with upstream 1.0.28
Yuri Sizov 2 years ago
parent
commit
8a19e21b6c
45 changed files with 2333 additions and 151 deletions
  1. 1 1
      COPYRIGHT.txt
  2. 3 2
      thirdparty/README.md
  3. 1 1
      thirdparty/openxr/COPYING.adoc
  4. 986 6
      thirdparty/openxr/include/openxr/openxr.h
  5. 28 4
      thirdparty/openxr/include/openxr/openxr_platform.h
  6. 6 2
      thirdparty/openxr/include/openxr/openxr_platform_defines.h
  7. 793 1
      thirdparty/openxr/include/openxr/openxr_reflection.h
  8. 5 1
      thirdparty/openxr/include/openxr/openxr_reflection_parent_structs.h
  9. 75 1
      thirdparty/openxr/include/openxr/openxr_reflection_structs.h
  10. 0 12
      thirdparty/openxr/patches/fix-gcc13-stdint.patch
  11. 0 10
      thirdparty/openxr/src/.clang-format
  12. 1 1
      thirdparty/openxr/src/common/extra_algorithms.h
  13. 1 1
      thirdparty/openxr/src/common/filesystem_utils.cpp
  14. 1 1
      thirdparty/openxr/src/common/filesystem_utils.hpp
  15. 1 1
      thirdparty/openxr/src/common/hex_and_handles.h
  16. 1 1
      thirdparty/openxr/src/common/loader_interfaces.h
  17. 4 2
      thirdparty/openxr/src/common/object_info.cpp
  18. 1 1
      thirdparty/openxr/src/common/object_info.h
  19. 28 15
      thirdparty/openxr/src/common/platform_utils.hpp
  20. 1 1
      thirdparty/openxr/src/common/stdfs_conditions.h
  21. 1 1
      thirdparty/openxr/src/common/unique_asset.h
  22. 63 0
      thirdparty/openxr/src/common/vulkan_debug_object_namer.hpp
  23. 18 14
      thirdparty/openxr/src/common/xr_dependencies.h
  24. 100 22
      thirdparty/openxr/src/common/xr_linear.h
  25. 5 5
      thirdparty/openxr/src/loader/android_utilities.cpp
  26. 1 1
      thirdparty/openxr/src/loader/android_utilities.h
  27. 11 5
      thirdparty/openxr/src/loader/api_layer_interface.cpp
  28. 1 1
      thirdparty/openxr/src/loader/api_layer_interface.hpp
  29. 1 1
      thirdparty/openxr/src/loader/exception_handling.hpp
  30. 1 1
      thirdparty/openxr/src/loader/loader_core.cpp
  31. 3 3
      thirdparty/openxr/src/loader/loader_instance.cpp
  32. 1 1
      thirdparty/openxr/src/loader/loader_instance.hpp
  33. 4 1
      thirdparty/openxr/src/loader/loader_logger.cpp
  34. 1 1
      thirdparty/openxr/src/loader/loader_logger.hpp
  35. 6 6
      thirdparty/openxr/src/loader/loader_logger_recorders.cpp
  36. 1 1
      thirdparty/openxr/src/loader/loader_logger_recorders.hpp
  37. 1 1
      thirdparty/openxr/src/loader/loader_platform.hpp
  38. 10 5
      thirdparty/openxr/src/loader/manifest_file.cpp
  39. 1 1
      thirdparty/openxr/src/loader/manifest_file.hpp
  40. 4 6
      thirdparty/openxr/src/loader/runtime_interface.cpp
  41. 1 1
      thirdparty/openxr/src/loader/runtime_interface.hpp
  42. 2 2
      thirdparty/openxr/src/loader/xr_generated_loader.cpp
  43. 2 2
      thirdparty/openxr/src/loader/xr_generated_loader.hpp
  44. 79 2
      thirdparty/openxr/src/xr_generated_dispatch_table.c
  45. 78 2
      thirdparty/openxr/src/xr_generated_dispatch_table.h

+ 1 - 1
COPYRIGHT.txt

@@ -409,7 +409,7 @@ License: Apache-2.0
 
 Files: ./thirdparty/openxr/
 Comment: OpenXR Loader
-Copyright: 2020-2022, The Khronos Group Inc.
+Copyright: 2020-2023, The Khronos Group Inc.
 License: Apache-2.0
 
 Files: ./thirdparty/pcre2/

+ 3 - 2
thirdparty/README.md

@@ -582,7 +582,7 @@ Patch files are provided in `oidn/patches/`.
 ## openxr
 
 - Upstream: https://github.com/KhronosGroup/OpenXR-SDK
-- Version: 1.0.26 (e2da9ce83a4388c9622da328bf48548471261290, 2022)
+- Version: 1.0.28 (f5beb0131f1bea8701ace744d1b50df9049bf331, 2023)
 - License: Apache 2.0
 
 Files extracted from upstream source:
@@ -600,7 +600,8 @@ Exclude:
 - src/external/android-jni-wrappers and src/external/jnipp (not used yet)
 - All CMake stuff: cmake/, CMakeLists.txt and *.cmake
 - All Gradle stuff: *gradle*, AndroidManifest.xml
-- All following files (and their .license files): *.{def,in,json,map,pom,rc}
+- All following files (and their .license files): *.{def,expsym,in,json,map,pom,rc,txt}
+- All dotfiles
 
 
 ## pcre2

+ 1 - 1
thirdparty/openxr/COPYING.adoc

@@ -1,6 +1,6 @@
 = COPYING.adoc for the Khronos Group OpenXR projects
 
-// Copyright (c) 2020-2022, The Khronos Group Inc.
+// Copyright (c) 2020-2023, The Khronos Group Inc.
 //
 // SPDX-License-Identifier: CC-BY-4.0
 

File diff suppressed because it is too large
+ 986 - 6
thirdparty/openxr/include/openxr/openxr.h


+ 28 - 4
thirdparty/openxr/include/openxr/openxr_platform.h

@@ -2,7 +2,7 @@
 #define OPENXR_PLATFORM_H_ 1
 
 /*
-** Copyright 2017-2022 The Khronos Group Inc.
+** Copyright 2017-2023 The Khronos Group Inc.
 **
 ** SPDX-License-Identifier: Apache-2.0 OR MIT
 */
@@ -454,9 +454,9 @@ typedef XrSwapchainImageVulkanKHR XrSwapchainImageVulkan2KHR;
 
 typedef XrGraphicsRequirementsVulkanKHR XrGraphicsRequirementsVulkan2KHR;
 
-typedef XrResult (XRAPI_PTR *PFN_xrCreateVulkanInstanceKHR)(XrInstance                           instance, const XrVulkanInstanceCreateInfoKHR* createInfo, VkInstance*                          vulkanInstance, VkResult*                            vulkanResult);
-typedef XrResult (XRAPI_PTR *PFN_xrCreateVulkanDeviceKHR)(XrInstance                          instance, const XrVulkanDeviceCreateInfoKHR*  createInfo, VkDevice*                           vulkanDevice, VkResult*                           vulkanResult);
-typedef XrResult (XRAPI_PTR *PFN_xrGetVulkanGraphicsDevice2KHR)(XrInstance                              instance, const XrVulkanGraphicsDeviceGetInfoKHR* getInfo, VkPhysicalDevice*                       vulkanPhysicalDevice);
+typedef XrResult (XRAPI_PTR *PFN_xrCreateVulkanInstanceKHR)(XrInstance instance, const XrVulkanInstanceCreateInfoKHR* createInfo, VkInstance* vulkanInstance, VkResult* vulkanResult);
+typedef XrResult (XRAPI_PTR *PFN_xrCreateVulkanDeviceKHR)(XrInstance instance, const XrVulkanDeviceCreateInfoKHR* createInfo, VkDevice* vulkanDevice, VkResult* vulkanResult);
+typedef XrResult (XRAPI_PTR *PFN_xrGetVulkanGraphicsDevice2KHR)(XrInstance instance, const XrVulkanGraphicsDeviceGetInfoKHR* getInfo, VkPhysicalDevice* vulkanPhysicalDevice);
 typedef XrResult (XRAPI_PTR *PFN_xrGetVulkanGraphicsRequirements2KHR)(XrInstance instance, XrSystemId systemId, XrGraphicsRequirementsVulkanKHR* graphicsRequirements);
 
 #ifndef XR_NO_PROTOTYPES
@@ -565,6 +565,30 @@ typedef struct XrAndroidSurfaceSwapchainCreateInfoFB {
 
 #endif /* XR_USE_PLATFORM_ANDROID */
 
+#ifdef XR_USE_PLATFORM_ML
+
+#define XR_ML_compat 1
+#define XR_ML_compat_SPEC_VERSION         1
+#define XR_ML_COMPAT_EXTENSION_NAME       "XR_ML_compat"
+typedef struct XrCoordinateSpaceCreateInfoML {
+    XrStructureType             type;
+    const void* XR_MAY_ALIAS    next;
+    MLCoordinateFrameUID        cfuid;
+    XrPosef                     poseInCoordinateSpace;
+} XrCoordinateSpaceCreateInfoML;
+
+typedef XrResult (XRAPI_PTR *PFN_xrCreateSpaceFromCoordinateFrameUIDML)(XrSession session, const XrCoordinateSpaceCreateInfoML *createInfo, XrSpace* space);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateSpaceFromCoordinateFrameUIDML(
+    XrSession                                   session,
+    const XrCoordinateSpaceCreateInfoML *       createInfo,
+    XrSpace*                                    space);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+#endif /* XR_USE_PLATFORM_ML */
+
 #ifdef XR_USE_PLATFORM_WIN32
 
 #define XR_OCULUS_audio_device_guid 1

+ 6 - 2
thirdparty/openxr/include/openxr/openxr_platform_defines.h

@@ -1,5 +1,5 @@
 /*
-** Copyright (c) 2017-2022, The Khronos Group Inc.
+** Copyright (c) 2017-2023, The Khronos Group Inc.
 **
 ** SPDX-License-Identifier: Apache-2.0 OR MIT
 */
@@ -65,7 +65,7 @@ typedef unsigned __int64 uint64_t;
 #endif  // !defined( XR_NO_STDINT_H )
 
 // XR_PTR_SIZE (in bytes)
-#if (defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) && !defined(__ILP32__) ) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__))
+#if (defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) && !defined(__ILP32__) ) || defined(_M_X64) || defined(__ia64) || defined(_M_IA64) || defined(__aarch64__) || defined(__powerpc64__))
 #define XR_PTR_SIZE 8
 #else
 #define XR_PTR_SIZE 4
@@ -103,6 +103,10 @@ typedef unsigned __int64 uint64_t;
 #endif
 #endif
 
+#if !defined(XR_CPP_NULLPTR_SUPPORTED)
+#define XR_CPP_NULLPTR_SUPPORTED 0
+#endif  // !defined(XR_CPP_NULLPTR_SUPPORTED)
+
 #ifdef __cplusplus
 }
 #endif

File diff suppressed because it is too large
+ 793 - 1
thirdparty/openxr/include/openxr/openxr_reflection.h


+ 5 - 1
thirdparty/openxr/include/openxr/openxr_reflection_parent_structs.h

@@ -2,7 +2,7 @@
 #define OPENXR_REFLECTION_PARENT_STRUCTS_H_ 1
 
 /*
-** Copyright (c) 2017-2022, The Khronos Group Inc.
+** Copyright (c) 2017-2023, The Khronos Group Inc.
 **
 ** SPDX-License-Identifier: Apache-2.0 OR MIT
 */
@@ -62,6 +62,8 @@ This file contains expansion macros (X Macros) for OpenXR structures that have a
     _avail(XrEventDataSpaceQueryCompleteFB, XR_TYPE_EVENT_DATA_SPACE_QUERY_COMPLETE_FB) \
     _avail(XrEventDataSpaceSaveCompleteFB, XR_TYPE_EVENT_DATA_SPACE_SAVE_COMPLETE_FB) \
     _avail(XrEventDataSpaceEraseCompleteFB, XR_TYPE_EVENT_DATA_SPACE_ERASE_COMPLETE_FB) \
+    _avail(XrEventDataSpaceShareCompleteFB, XR_TYPE_EVENT_DATA_SPACE_SHARE_COMPLETE_FB) \
+    _avail(XrEventDataSpaceListSaveCompleteFB, XR_TYPE_EVENT_DATA_SPACE_LIST_SAVE_COMPLETE_FB) \
 
 
 
@@ -75,6 +77,8 @@ This file contains expansion macros (X Macros) for OpenXR structures that have a
 // Implementation detail of XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrHapticBaseHeader()
 #define _impl_XR_LIST_ALL_CHILD_STRUCTURE_TYPES_XrHapticBaseHeader_CORE(_avail, _unavail) \
     _avail(XrHapticVibration, XR_TYPE_HAPTIC_VIBRATION) \
+    _avail(XrHapticAmplitudeEnvelopeVibrationFB, XR_TYPE_HAPTIC_AMPLITUDE_ENVELOPE_VIBRATION_FB) \
+    _avail(XrHapticPcmVibrationFB, XR_TYPE_HAPTIC_PCM_VIBRATION_FB) \
 
 
 

+ 75 - 1
thirdparty/openxr/include/openxr/openxr_reflection_structs.h

@@ -2,7 +2,7 @@
 #define OPENXR_REFLECTION_STRUCTS_H_ 1
 
 /*
-** Copyright (c) 2017-2022, The Khronos Group Inc.
+** Copyright (c) 2017-2023, The Khronos Group Inc.
 **
 ** SPDX-License-Identifier: Apache-2.0 OR MIT
 */
@@ -37,6 +37,7 @@ This file contains expansion macros (X Macros) for OpenXR structures.
     _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_VULKAN(_avail, _unavail) \
     _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_PLATFORM_ANDROID(_avail, _unavail) \
     _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_PLATFORM_EGL(_avail, _unavail) \
+    _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_PLATFORM_ML(_avail, _unavail) \
     _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_PLATFORM_WIN32(_avail, _unavail) \
 
 
@@ -143,6 +144,11 @@ This file contains expansion macros (X Macros) for OpenXR structures.
     _avail(XrCompositionLayerReprojectionInfoMSFT, XR_TYPE_COMPOSITION_LAYER_REPROJECTION_INFO_MSFT) \
     _avail(XrCompositionLayerReprojectionPlaneOverrideMSFT, XR_TYPE_COMPOSITION_LAYER_REPROJECTION_PLANE_OVERRIDE_MSFT) \
     _avail(XrCompositionLayerSecureContentFB, XR_TYPE_COMPOSITION_LAYER_SECURE_CONTENT_FB) \
+    _avail(XrSystemBodyTrackingPropertiesFB, XR_TYPE_SYSTEM_BODY_TRACKING_PROPERTIES_FB) \
+    _avail(XrBodyTrackerCreateInfoFB, XR_TYPE_BODY_TRACKER_CREATE_INFO_FB) \
+    _avail(XrBodySkeletonFB, XR_TYPE_BODY_SKELETON_FB) \
+    _avail(XrBodyJointsLocateInfoFB, XR_TYPE_BODY_JOINTS_LOCATE_INFO_FB) \
+    _avail(XrBodyJointLocationsFB, XR_TYPE_BODY_JOINT_LOCATIONS_FB) \
     _avail(XrInteractionProfileDpadBindingEXT, XR_TYPE_INTERACTION_PROFILE_DPAD_BINDING_EXT) \
     _avail(XrInteractionProfileAnalogThresholdVALVE, XR_TYPE_INTERACTION_PROFILE_ANALOG_THRESHOLD_VALVE) \
     _avail(XrHandJointsMotionRangeInfoEXT, XR_TYPE_HAND_JOINTS_MOTION_RANGE_INFO_EXT) \
@@ -217,6 +223,8 @@ This file contains expansion macros (X Macros) for OpenXR structures.
     _avail(XrSystemMarkerTrackingPropertiesVARJO, XR_TYPE_SYSTEM_MARKER_TRACKING_PROPERTIES_VARJO) \
     _avail(XrEventDataMarkerTrackingUpdateVARJO, XR_TYPE_EVENT_DATA_MARKER_TRACKING_UPDATE_VARJO) \
     _avail(XrMarkerSpaceCreateInfoVARJO, XR_TYPE_MARKER_SPACE_CREATE_INFO_VARJO) \
+    _avail(XrFrameEndInfoML, XR_TYPE_FRAME_END_INFO_ML) \
+    _avail(XrGlobalDimmerFrameEndInfoML, XR_TYPE_GLOBAL_DIMMER_FRAME_END_INFO_ML) \
     _avail(XrSpatialAnchorPersistenceInfoMSFT, XR_TYPE_SPATIAL_ANCHOR_PERSISTENCE_INFO_MSFT) \
     _avail(XrSpatialAnchorFromPersistedAnchorCreateInfoMSFT, XR_TYPE_SPATIAL_ANCHOR_FROM_PERSISTED_ANCHOR_CREATE_INFO_MSFT) \
     _avail(XrSpaceQueryInfoFB, XR_TYPE_SPACE_QUERY_INFO_FB) \
@@ -230,18 +238,63 @@ This file contains expansion macros (X Macros) for OpenXR structures.
     _avail(XrSpaceEraseInfoFB, XR_TYPE_SPACE_ERASE_INFO_FB) \
     _avail(XrEventDataSpaceSaveCompleteFB, XR_TYPE_EVENT_DATA_SPACE_SAVE_COMPLETE_FB) \
     _avail(XrEventDataSpaceEraseCompleteFB, XR_TYPE_EVENT_DATA_SPACE_ERASE_COMPLETE_FB) \
+    _avail(XrSpaceShareInfoFB, XR_TYPE_SPACE_SHARE_INFO_FB) \
+    _avail(XrEventDataSpaceShareCompleteFB, XR_TYPE_EVENT_DATA_SPACE_SHARE_COMPLETE_FB) \
     _avail(XrCompositionLayerSpaceWarpInfoFB, XR_TYPE_COMPOSITION_LAYER_SPACE_WARP_INFO_FB) \
     _avail(XrSystemSpaceWarpPropertiesFB, XR_TYPE_SYSTEM_SPACE_WARP_PROPERTIES_FB) \
+    _avail(XrHapticAmplitudeEnvelopeVibrationFB, XR_TYPE_HAPTIC_AMPLITUDE_ENVELOPE_VIBRATION_FB) \
     _avail(XrSemanticLabelsFB, XR_TYPE_SEMANTIC_LABELS_FB) \
     _avail(XrRoomLayoutFB, XR_TYPE_ROOM_LAYOUT_FB) \
     _avail(XrBoundary2DFB, XR_TYPE_BOUNDARY_2D_FB) \
+    _avail(XrSemanticLabelsSupportInfoFB, XR_TYPE_SEMANTIC_LABELS_SUPPORT_INFO_FB) \
     _avail(XrDigitalLensControlALMALENCE, XR_TYPE_DIGITAL_LENS_CONTROL_ALMALENCE) \
+    _avail(XrEventDataSceneCaptureCompleteFB, XR_TYPE_EVENT_DATA_SCENE_CAPTURE_COMPLETE_FB) \
+    _avail(XrSceneCaptureRequestInfoFB, XR_TYPE_SCENE_CAPTURE_REQUEST_INFO_FB) \
     _avail(XrSpaceContainerFB, XR_TYPE_SPACE_CONTAINER_FB) \
+    _avail(XrFoveationEyeTrackedProfileCreateInfoMETA, XR_TYPE_FOVEATION_EYE_TRACKED_PROFILE_CREATE_INFO_META) \
+    _avail(XrFoveationEyeTrackedStateMETA, XR_TYPE_FOVEATION_EYE_TRACKED_STATE_META) \
+    _avail(XrSystemFoveationEyeTrackedPropertiesMETA, XR_TYPE_SYSTEM_FOVEATION_EYE_TRACKED_PROPERTIES_META) \
+    _avail(XrSystemFaceTrackingPropertiesFB, XR_TYPE_SYSTEM_FACE_TRACKING_PROPERTIES_FB) \
+    _avail(XrFaceTrackerCreateInfoFB, XR_TYPE_FACE_TRACKER_CREATE_INFO_FB) \
+    _avail(XrFaceExpressionInfoFB, XR_TYPE_FACE_EXPRESSION_INFO_FB) \
+    _avail(XrFaceExpressionWeightsFB, XR_TYPE_FACE_EXPRESSION_WEIGHTS_FB) \
+    _avail(XrEyeTrackerCreateInfoFB, XR_TYPE_EYE_TRACKER_CREATE_INFO_FB) \
+    _avail(XrEyeGazesInfoFB, XR_TYPE_EYE_GAZES_INFO_FB) \
+    _avail(XrSystemEyeTrackingPropertiesFB, XR_TYPE_SYSTEM_EYE_TRACKING_PROPERTIES_FB) \
+    _avail(XrEyeGazesFB, XR_TYPE_EYE_GAZES_FB) \
     _avail(XrPassthroughKeyboardHandsIntensityFB, XR_TYPE_PASSTHROUGH_KEYBOARD_HANDS_INTENSITY_FB) \
     _avail(XrCompositionLayerSettingsFB, XR_TYPE_COMPOSITION_LAYER_SETTINGS_FB) \
+    _avail(XrHapticPcmVibrationFB, XR_TYPE_HAPTIC_PCM_VIBRATION_FB) \
+    _avail(XrDevicePcmSampleRateStateFB, XR_TYPE_DEVICE_PCM_SAMPLE_RATE_STATE_FB) \
+    _avail(XrCompositionLayerDepthTestFB, XR_TYPE_COMPOSITION_LAYER_DEPTH_TEST_FB) \
+    _avail(XrLocalDimmingFrameEndInfoMETA, XR_TYPE_LOCAL_DIMMING_FRAME_END_INFO_META) \
+    _avail(XrSystemVirtualKeyboardPropertiesMETA, XR_TYPE_SYSTEM_VIRTUAL_KEYBOARD_PROPERTIES_META) \
+    _avail(XrVirtualKeyboardCreateInfoMETA, XR_TYPE_VIRTUAL_KEYBOARD_CREATE_INFO_META) \
+    _avail(XrVirtualKeyboardSpaceCreateInfoMETA, XR_TYPE_VIRTUAL_KEYBOARD_SPACE_CREATE_INFO_META) \
+    _avail(XrVirtualKeyboardLocationInfoMETA, XR_TYPE_VIRTUAL_KEYBOARD_LOCATION_INFO_META) \
+    _avail(XrVirtualKeyboardModelVisibilitySetInfoMETA, XR_TYPE_VIRTUAL_KEYBOARD_MODEL_VISIBILITY_SET_INFO_META) \
+    _avail(XrVirtualKeyboardAnimationStateMETA, XR_TYPE_VIRTUAL_KEYBOARD_ANIMATION_STATE_META) \
+    _avail(XrVirtualKeyboardModelAnimationStatesMETA, XR_TYPE_VIRTUAL_KEYBOARD_MODEL_ANIMATION_STATES_META) \
+    _avail(XrVirtualKeyboardTextureDataMETA, XR_TYPE_VIRTUAL_KEYBOARD_TEXTURE_DATA_META) \
+    _avail(XrVirtualKeyboardInputInfoMETA, XR_TYPE_VIRTUAL_KEYBOARD_INPUT_INFO_META) \
+    _avail(XrVirtualKeyboardTextContextChangeInfoMETA, XR_TYPE_VIRTUAL_KEYBOARD_TEXT_CONTEXT_CHANGE_INFO_META) \
+    _avail(XrEventDataVirtualKeyboardCommitTextMETA, XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_COMMIT_TEXT_META) \
+    _avail(XrEventDataVirtualKeyboardBackspaceMETA, XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_BACKSPACE_META) \
+    _avail(XrEventDataVirtualKeyboardEnterMETA, XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_ENTER_META) \
+    _avail(XrEventDataVirtualKeyboardShownMETA, XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_SHOWN_META) \
+    _avail(XrEventDataVirtualKeyboardHiddenMETA, XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_HIDDEN_META) \
+    _avail(XrExternalCameraOCULUS, XR_TYPE_EXTERNAL_CAMERA_OCULUS) \
     _avail(XrPerformanceMetricsStateMETA, XR_TYPE_PERFORMANCE_METRICS_STATE_META) \
     _avail(XrPerformanceMetricsCounterMETA, XR_TYPE_PERFORMANCE_METRICS_COUNTER_META) \
+    _avail(XrSpaceListSaveInfoFB, XR_TYPE_SPACE_LIST_SAVE_INFO_FB) \
+    _avail(XrEventDataSpaceListSaveCompleteFB, XR_TYPE_EVENT_DATA_SPACE_LIST_SAVE_COMPLETE_FB) \
+    _avail(XrSpaceUserCreateInfoFB, XR_TYPE_SPACE_USER_CREATE_INFO_FB) \
     _avail(XrSystemHeadsetIdPropertiesMETA, XR_TYPE_SYSTEM_HEADSET_ID_PROPERTIES_META) \
+    _avail(XrPassthroughColorLutCreateInfoMETA, XR_TYPE_PASSTHROUGH_COLOR_LUT_CREATE_INFO_META) \
+    _avail(XrPassthroughColorLutUpdateInfoMETA, XR_TYPE_PASSTHROUGH_COLOR_LUT_UPDATE_INFO_META) \
+    _avail(XrPassthroughColorMapLutMETA, XR_TYPE_PASSTHROUGH_COLOR_MAP_LUT_META) \
+    _avail(XrPassthroughColorMapInterpolatedLutMETA, XR_TYPE_PASSTHROUGH_COLOR_MAP_INTERPOLATED_LUT_META) \
+    _avail(XrSystemPassthroughColorLutPropertiesMETA, XR_TYPE_SYSTEM_PASSTHROUGH_COLOR_LUT_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) \
@@ -250,6 +303,17 @@ This file contains expansion macros (X Macros) for OpenXR structures.
     _avail(XrFoveationDynamicModeInfoHTC, XR_TYPE_FOVEATION_DYNAMIC_MODE_INFO_HTC) \
     _avail(XrFoveationCustomModeInfoHTC, XR_TYPE_FOVEATION_CUSTOM_MODE_INFO_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) \
+    _avail(XrHandTrackingDataSourceInfoEXT, XR_TYPE_HAND_TRACKING_DATA_SOURCE_INFO_EXT) \
+    _avail(XrHandTrackingDataSourceStateEXT, XR_TYPE_HAND_TRACKING_DATA_SOURCE_STATE_EXT) \
+    _avail(XrSystemPlaneDetectionPropertiesEXT, XR_TYPE_SYSTEM_PLANE_DETECTION_PROPERTIES_EXT) \
+    _avail(XrPlaneDetectorCreateInfoEXT, XR_TYPE_PLANE_DETECTOR_CREATE_INFO_EXT) \
+    _avail(XrPlaneDetectorBeginInfoEXT, XR_TYPE_PLANE_DETECTOR_BEGIN_INFO_EXT) \
+    _avail(XrPlaneDetectorGetInfoEXT, XR_TYPE_PLANE_DETECTOR_GET_INFO_EXT) \
+    _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) \
 
 
 #if defined(XR_USE_GRAPHICS_API_D3D11)
@@ -410,6 +474,16 @@ This file contains expansion macros (X Macros) for OpenXR structures.
 
 #endif
 
+#if defined(XR_USE_PLATFORM_ML)
+#define _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_PLATFORM_ML(_avail, _unavail) \
+    _avail(XrCoordinateSpaceCreateInfoML, XR_TYPE_COORDINATE_SPACE_CREATE_INFO_ML) \
+
+#else
+#define _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_PLATFORM_ML(_avail, _unavail) \
+    _unavail(XrCoordinateSpaceCreateInfoML, XR_TYPE_COORDINATE_SPACE_CREATE_INFO_ML) \
+
+#endif
+
 #if defined(XR_USE_PLATFORM_WIN32)
 #define _impl_XR_LIST_ALL_STRUCTURE_TYPES_XR_USE_PLATFORM_WIN32(_avail, _unavail) \
     _avail(XrHolographicWindowAttachmentMSFT, XR_TYPE_HOLOGRAPHIC_WINDOW_ATTACHMENT_MSFT) \

+ 0 - 12
thirdparty/openxr/patches/fix-gcc13-stdint.patch

@@ -1,12 +0,0 @@
-diff --git a/thirdparty/openxr/src/common/platform_utils.hpp b/thirdparty/openxr/src/common/platform_utils.hpp
-index 85d5cdab10..2d870cfea7 100644
---- a/thirdparty/openxr/src/common/platform_utils.hpp
-+++ b/thirdparty/openxr/src/common/platform_utils.hpp
-@@ -11,6 +11,7 @@
- 
- #include "xr_dependencies.h"
- #include <string>
-+#include <stdint.h>
- #include <stdlib.h>
- 
- // OpenXR paths and registry key locations

+ 0 - 10
thirdparty/openxr/src/.clang-format

@@ -1,10 +0,0 @@
----
-# Copyright (c) 2017-2022, The Khronos Group Inc.
-#
-# SPDX-License-Identifier: Apache-2.0
-# Use defaults from the Google style with the following exceptions:
-BasedOnStyle: Google
-IndentWidth: 4
-ColumnLimit: 132
-SortIncludes: false
-...

+ 1 - 1
thirdparty/openxr/src/common/extra_algorithms.h

@@ -1,4 +1,4 @@
-// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2023, The Khronos Group Inc.
 // Copyright (c) 2017-2019 Valve Corporation
 // Copyright (c) 2017-2019 LunarG, Inc.
 // Copyright (c) 2019 Collabora, Ltd.

+ 1 - 1
thirdparty/openxr/src/common/filesystem_utils.cpp

@@ -1,4 +1,4 @@
-// Copyright (c) 2017 The Khronos Group Inc.
+// Copyright (c) 2017-2023, The Khronos Group Inc.
 // Copyright (c) 2017 Valve Corporation
 // Copyright (c) 2017 LunarG, Inc.
 //

+ 1 - 1
thirdparty/openxr/src/common/filesystem_utils.hpp

@@ -1,4 +1,4 @@
-// Copyright (c) 2017 The Khronos Group Inc.
+// Copyright (c) 2017-2023, The Khronos Group Inc.
 // Copyright (c) 2017 Valve Corporation
 // Copyright (c) 2017 LunarG, Inc.
 //

+ 1 - 1
thirdparty/openxr/src/common/hex_and_handles.h

@@ -1,4 +1,4 @@
-// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2023, The Khronos Group Inc.
 // Copyright (c) 2017-2019 Valve Corporation
 // Copyright (c) 2017-2019 LunarG, Inc.
 // Copyright (c) 2019 Collabora, Ltd.

+ 1 - 1
thirdparty/openxr/src/common/loader_interfaces.h

@@ -1,4 +1,4 @@
-// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2023, The Khronos Group Inc.
 // Copyright (c) 2017 Valve Corporation
 // Copyright (c) 2017 LunarG, Inc.
 //

+ 4 - 2
thirdparty/openxr/src/common/object_info.cpp

@@ -1,4 +1,4 @@
-// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2023, The Khronos Group Inc.
 // Copyright (c) 2017-2019 Valve Corporation
 // Copyright (c) 2017-2019 LunarG, Inc.
 // Copyright (c) 2019 Collabora, Ltd.
@@ -132,6 +132,8 @@ XrSdkSessionLabel::XrSdkSessionLabel(const XrDebugUtilsLabelEXT& label_info, boo
     : label_name(label_info.labelName), debug_utils_label(label_info), is_individual_label(individual) {
     // Update the c string pointer to the one we hold.
     debug_utils_label.labelName = label_name.c_str();
+    // Zero out the next pointer to avoid a dangling pointer
+    debug_utils_label.next = nullptr;
 }
 
 XrSdkSessionLabelPtr XrSdkSessionLabel::make(const XrDebugUtilsLabelEXT& label_info, bool individual) {
@@ -143,7 +145,7 @@ void DebugUtilsData::AddObjectName(uint64_t object_handle, XrObjectType object_t
 }
 
 // We always want to remove the old individual label before we do anything else.
-// So, do that in it's own method
+// So, do that in its own method
 void DebugUtilsData::RemoveIndividualLabel(XrSdkSessionLabelList& label_vec) {
     if (!label_vec.empty() && label_vec.back()->is_individual_label) {
         label_vec.pop_back();

+ 1 - 1
thirdparty/openxr/src/common/object_info.h

@@ -1,4 +1,4 @@
-// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2023, The Khronos Group Inc.
 // Copyright (c) 2017-2019 Valve Corporation
 // Copyright (c) 2017-2019 LunarG, Inc.
 // Copyright (c) 2019 Collabora, Ltd.

+ 28 - 15
thirdparty/openxr/src/common/platform_utils.hpp

@@ -1,4 +1,4 @@
-// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2023, The Khronos Group Inc.
 // Copyright (c) 2017-2019 Valve Corporation
 // Copyright (c) 2017-2019 LunarG, Inc.
 //
@@ -37,6 +37,10 @@
 #include "common_config.h"
 #endif  // OPENXR_HAVE_COMMON_CONFIG
 
+// Consumers of this file must ensure this function is implemented. For example, the loader will implement this function so that it
+// can route messages through the loader's logging system.
+void LogPlatformUtilsError(const std::string& message);
+
 // Environment variables
 #if defined(XR_OS_LINUX) || defined(XR_OS_APPLE)
 
@@ -56,9 +60,11 @@ static inline char* ImplGetSecureEnv(const char* 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
@@ -79,6 +85,12 @@ static inline std::string PlatformUtilsGetEnv(const char* name) {
 static inline std::string PlatformUtilsGetSecureEnv(const char* name) {
     auto str = detail::ImplGetSecureEnv(name);
     if (str == nullptr) {
+        str = detail::ImplGetEnv(name);
+        if (str != nullptr && !std::string(str).empty()) {
+            LogPlatformUtilsError(std::string("!!! WARNING !!! Environment variable ") + name +
+                                  " is being ignored due to running with secure execution. The value '" + str +
+                                  "' will NOT be used.");
+        }
         return {};
     }
     return str;
@@ -131,12 +143,6 @@ static inline bool PlatformGetGlobalRuntimeFileName(uint16_t major_version, std:
 
 #elif defined(XR_OS_WINDOWS)
 
-#if !defined(NDEBUG)
-inline void LogError(const std::string& error) { OutputDebugStringA(error.c_str()); }
-#else
-#define LogError(x)
-#endif
-
 inline std::wstring utf8_to_wide(const std::string& utf8Text) {
     if (utf8Text.empty()) {
         return {};
@@ -145,7 +151,7 @@ inline std::wstring utf8_to_wide(const std::string& utf8Text) {
     std::wstring wideText;
     const int wideLength = ::MultiByteToWideChar(CP_UTF8, 0, utf8Text.data(), (int)utf8Text.size(), nullptr, 0);
     if (wideLength == 0) {
-        LogError("utf8_to_wide get size error: " + std::to_string(::GetLastError()));
+        LogPlatformUtilsError("utf8_to_wide get size error: " + std::to_string(::GetLastError()));
         return {};
     }
 
@@ -154,7 +160,7 @@ inline std::wstring utf8_to_wide(const std::string& utf8Text) {
     wchar_t* wideString = const_cast<wchar_t*>(wideText.data());  // mutable data() only exists in c++17
     const int length = ::MultiByteToWideChar(CP_UTF8, 0, utf8Text.data(), (int)utf8Text.size(), wideString, wideLength);
     if (length != wideLength) {
-        LogError("utf8_to_wide convert string error: " + std::to_string(::GetLastError()));
+        LogPlatformUtilsError("utf8_to_wide convert string error: " + std::to_string(::GetLastError()));
         return {};
     }
 
@@ -169,7 +175,7 @@ inline std::string wide_to_utf8(const std::wstring& wideText) {
     std::string narrowText;
     int narrowLength = ::WideCharToMultiByte(CP_UTF8, 0, wideText.data(), (int)wideText.size(), nullptr, 0, nullptr, nullptr);
     if (narrowLength == 0) {
-        LogError("wide_to_utf8 get size error: " + std::to_string(::GetLastError()));
+        LogPlatformUtilsError("wide_to_utf8 get size error: " + std::to_string(::GetLastError()));
         return {};
     }
 
@@ -179,7 +185,7 @@ inline std::string wide_to_utf8(const std::wstring& wideText) {
     const int length =
         ::WideCharToMultiByte(CP_UTF8, 0, wideText.data(), (int)wideText.size(), narrowString, narrowLength, nullptr, nullptr);
     if (length != narrowLength) {
-        LogError("wide_to_utf8 convert string error: " + std::to_string(::GetLastError()));
+        LogPlatformUtilsError("wide_to_utf8 convert string error: " + std::to_string(::GetLastError()));
         return {};
     }
 
@@ -245,7 +251,7 @@ static inline std::string PlatformUtilsGetEnv(const char* name) {
     // call if there was enough capacity. Else it returns the required capacity (including null terminator).
     const DWORD length = ::GetEnvironmentVariableW(wname.c_str(), wValueData, (DWORD)wValue.size());
     if ((length == 0) || (length >= wValue.size())) {  // If error or the variable increased length between calls...
-        LogError("GetEnvironmentVariable get value error: " + std::to_string(::GetLastError()));
+        LogPlatformUtilsError("GetEnvironmentVariable get value error: " + std::to_string(::GetLastError()));
         return {};
     }
 
@@ -256,13 +262,20 @@ static inline std::string PlatformUtilsGetEnv(const char* name) {
 
 // Acts the same as PlatformUtilsGetEnv except returns an empty string if IsHighIntegrityLevel.
 static inline std::string PlatformUtilsGetSecureEnv(const char* name) {
+    // No secure version for Windows so the below integrity check is needed.
+    const std::string envValue = PlatformUtilsGetEnv(name);
+
     // Do not allow high integrity processes to act on data that can be controlled by medium integrity processes.
     if (IsHighIntegrityLevel()) {
+        if (!envValue.empty()) {
+            LogPlatformUtilsError(std::string("!!! WARNING !!! Environment variable ") + name +
+                                  " is being ignored due to running from an elevated context. The value '" + envValue +
+                                  "' will NOT be used.");
+        }
         return {};
     }
 
-    // No secure version for Windows so the above integrity check is needed.
-    return PlatformUtilsGetEnv(name);
+    return envValue;
 }
 
 // Sets an environment variable via UTF8 strings.
@@ -303,7 +316,7 @@ static inline bool PlatformUtilsSetEnv(const char* /* name */, const char* /* va
 // 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
-    static const char* rt_dir_prefixes[] = {"/oem", "/vendor", "/system"};
+    static const char* rt_dir_prefixes[] = {"/product", "/odm", "/oem", "/vendor", "/system"};
     static const std::string rt_filename = "/active_runtime.json";
     static const std::string subdir = "/etc/openxr/";
     for (const auto prefix : rt_dir_prefixes) {

+ 1 - 1
thirdparty/openxr/src/common/stdfs_conditions.h

@@ -1,4 +1,4 @@
-// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2023, The Khronos Group Inc.
 // Copyright (c) 2017 Valve Corporation
 // Copyright (c) 2017 LunarG, Inc.
 //

+ 1 - 1
thirdparty/openxr/src/common/unique_asset.h

@@ -1,4 +1,4 @@
-// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2023, The Khronos Group Inc.
 //
 // SPDX-License-Identifier: Apache-2.0 OR MIT
 #pragma once

+ 63 - 0
thirdparty/openxr/src/common/vulkan_debug_object_namer.hpp

@@ -0,0 +1,63 @@
+// Copyright (c) 2017-2023, The Khronos Group Inc.
+//
+// SPDX-License-Identifier: Apache-2.0
+
+#pragma once
+
+#ifdef XR_USE_GRAPHICS_API_VULKAN
+
+#include <vulkan/vulkan_core.h>
+#include <stdexcept>
+
+/// Utility class for assigning debug names to Vulkan objects we create.
+class VulkanDebugObjectNamer {
+   public:
+    /// Construct without initializing
+    VulkanDebugObjectNamer() = default;
+
+    /// Construct and initialize
+    VulkanDebugObjectNamer(VkInstance instance, VkDevice device) : m_vkDevice{device} {
+        vkSetDebugUtilsObjectNameEXT =
+            (PFN_vkSetDebugUtilsObjectNameEXT)vkGetInstanceProcAddr(instance, "vkSetDebugUtilsObjectNameEXT");
+    }
+    /// Copy constructor
+    VulkanDebugObjectNamer(const VulkanDebugObjectNamer&) = default;
+    /// Copy assignment operator
+    VulkanDebugObjectNamer& operator=(const VulkanDebugObjectNamer&) = default;
+
+    /// Destructor
+    ~VulkanDebugObjectNamer() { Reset(); }
+
+    /// (Re-) Initialize the namer: takes a valid `VkInstance` and `VkDevice`
+    void Init(VkInstance instance, VkDevice device) {
+        Reset();
+        *this = VulkanDebugObjectNamer(instance, device);
+    }
+
+    /// The main operation of the namer: actually set an object name.
+    ///
+    /// If the namer is not initialized, this exits silently.
+    VkResult SetName(VkObjectType objectType, uint64_t objectHandle, const char* pObjectName) const {
+        if (m_vkDevice == nullptr) {
+            return VK_SUCCESS;
+        }
+        if (vkSetDebugUtilsObjectNameEXT != nullptr) {
+            VkDebugUtilsObjectNameInfoEXT nameInfo{VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT, nullptr, objectType,
+                                                   objectHandle, pObjectName};
+            return vkSetDebugUtilsObjectNameEXT(m_vkDevice, &nameInfo);
+        }
+        return VK_SUCCESS;
+    }
+
+    /// De-initialize the namer, forgetting the device and the function pointer loaded from the instance.
+    void Reset() {
+        vkSetDebugUtilsObjectNameEXT = nullptr;
+        m_vkDevice = VK_NULL_HANDLE;
+    }
+
+   private:
+    VkDevice m_vkDevice{VK_NULL_HANDLE};
+    PFN_vkSetDebugUtilsObjectNameEXT vkSetDebugUtilsObjectNameEXT{nullptr};
+};
+
+#endif

+ 18 - 14
thirdparty/openxr/src/common/xr_dependencies.h

@@ -1,4 +1,4 @@
-// Copyright (c) 2018-2022, The Khronos Group Inc.
+// Copyright (c) 2018-2023, The Khronos Group Inc.
 //
 // SPDX-License-Identifier: Apache-2.0 OR MIT
 //
@@ -46,18 +46,6 @@
 #ifdef XR_USE_PLATFORM_XLIB
 #include <X11/Xlib.h>
 #include <X11/Xutil.h>
-
-#ifdef Success
-#undef Success
-#endif  // Success
-
-#ifdef Always
-#undef Always
-#endif  // Always
-
-#ifdef None
-#undef None
-#endif  // None
 #endif  // XR_USE_PLATFORM_XLIB
 
 #ifdef XR_USE_PLATFORM_XCB
@@ -72,7 +60,7 @@
 #include <xcb/glx.h>
 #endif  // XR_USE_PLATFORM_XCB
 #ifdef XR_USE_PLATFORM_MACOS
-#include <CL/cl_gl_ext.h>
+#include <OpenCL/cl_gl_ext.h>
 #endif  // XR_USE_PLATFORM_MACOS
 #endif  // XR_USE_GRAPHICS_API_OPENGL
 
@@ -87,3 +75,19 @@
 #ifdef XR_USE_PLATFORM_WAYLAND
 #include "wayland-client.h"
 #endif  // XR_USE_PLATFORM_WAYLAND
+
+#ifdef XR_USE_GRAPHICS_API_OPENGL
+#if defined(XR_USE_PLATFORM_XLIB) || defined(XR_USE_PLATFORM_XCB)
+#ifdef Success
+#undef Success
+#endif  // Success
+
+#ifdef Always
+#undef Always
+#endif  // Always
+
+#ifdef None
+#undef None
+#endif  // None
+#endif  // defined(XR_USE_PLATFORM_XLIB) || defined(XR_USE_PLATFORM_XCB)
+#endif  // XR_USE_GRAPHICS_API_OPENGL

+ 100 - 22
thirdparty/openxr/src/common/xr_linear.h

@@ -21,11 +21,6 @@
 #ifndef XR_LINEAR_H_
 #define XR_LINEAR_H_
 
-#if defined(OS_LINUX_XCB) || defined(OS_LINUX_XCB_GLX) || defined(OS_LINUX_WAYLAND)
-#pragma GCC diagnostic ignored "-Wunused-function"
-#pragma clang diagnostic ignored "-Wunused-function"
-#endif
-
 #include <openxr/openxr.h>
 
 /*
@@ -51,6 +46,7 @@ XrVector2f
 XrVector3f
 XrVector4f
 XrQuaternionf
+XrPosef
 XrMatrix4x4f
 
 inline static void XrVector3f_Set(XrVector3f* v, const float value);
@@ -64,8 +60,18 @@ inline static void XrVector3f_Scale(XrVector3f* result, const XrVector3f* a, con
 inline static void XrVector3f_Normalize(XrVector3f* v);
 inline static float XrVector3f_Length(const XrVector3f* v);
 
+inline static void XrQuaternionf_CreateIdentity(XrQuaternionf* q);
+inline static void XrQuaternionf_CreateFromAxisAngle(XrQuaternionf* result, const XrVector3f* axis, const float angleInRadians);
 inline static void XrQuaternionf_Lerp(XrQuaternionf* result, const XrQuaternionf* a, const XrQuaternionf* b, const float fraction);
-inline static void XrQuaternionf_Multiply(XrQuaternionf* result, const XrQuaternionf* a, const XrQuaternionf* b;
+inline static void XrQuaternionf_Multiply(XrQuaternionf* result, const XrQuaternionf* a, const XrQuaternionf* b);
+inline static void XrQuaternionf_Invert(XrQuaternionf* result, const XrQuaternionf* q);
+inline static void XrQuaternionf_Normalize(XrQuaternionf* q);
+inline static void XrQuaternionf_RotateVector3f(XrVector3f* result, const XrQuaternionf* a, const XrVector3f* v);
+
+inline static void XrPosef_CreateIdentity(XrPosef* result);
+inline static void XrPosef_TransformVector3f(XrVector3f* result, const XrPosef* a, const XrVector3f* v);
+inline static void XrPosef_Multiply(XrPosef* result, const XrPosef* a, const XrPosef* b);
+inline static void XrPosef_Invert(XrPosef* result, const XrPosef* a);
 
 inline static void XrMatrix4x4f_CreateIdentity(XrMatrix4x4f* result);
 inline static void XrMatrix4x4f_CreateTranslation(XrMatrix4x4f* result, const float x, const float y, const float z);
@@ -74,13 +80,13 @@ inline static void XrMatrix4x4f_CreateRotation(XrMatrix4x4f* result, const float
 inline static void XrMatrix4x4f_CreateScale(XrMatrix4x4f* result, const float x, const float y, const float z);
 inline static void XrMatrix4x4f_CreateTranslationRotationScale(XrMatrix4x4f* result, const XrVector3f* translation,
                                                                const XrQuaternionf* rotation, const XrVector3f* scale);
-inline static void XrMatrix4x4f_CreateProjection(XrMatrix4x4f* result, const float tanAngleLeft, const float tanAngleRight,
-                                                 const float tanAngleUp, float const tanAngleDown, const float nearZ,
-                                                 const float farZ);
-inline static void XrMatrix4x4f_CreateProjectionFov(XrMatrix4x4f* result, const float fovDegreesLeft, const float fovDegreesRight,
-                                                    const float fovDegreeUp, const float fovDegreesDown, const float nearZ,
-                                                    const float farZ);
-inline static void XrMatrix4x4f_CreateFromQuaternion(XrMatrix4x4f* result, const XrQuaternionf* src);
+inline static void XrMatrix4x4f_CreateFromRigidTransform(XrMatrix4x4f* result, const XrPosef* s);
+inline static void XrMatrix4x4f_CreateProjection(XrMatrix4x4f* result, GraphicsAPI graphicsApi, const float tanAngleLeft,
+                                                 const float tanAngleRight, const float tanAngleUp, float const tanAngleDown,
+                                                 const float nearZ, const float farZ);
+inline static void XrMatrix4x4f_CreateProjectionFov(XrMatrix4x4f* result, GraphicsAPI graphicsApi, const XrFovf fov,
+                                                    const float nearZ, const float farZ);
+inline static void XrMatrix4x4f_CreateFromQuaternion(XrMatrix4x4f* result, const XrQuaternionf* quat);
 inline static void XrMatrix4x4f_CreateOffsetScaleForBounds(XrMatrix4x4f* result, const XrMatrix4x4f* matrix, const XrVector3f* mins,
                                                            const XrVector3f* maxs);
 
@@ -207,6 +213,13 @@ inline static void XrVector3f_Normalize(XrVector3f* v) {
 
 inline static float XrVector3f_Length(const XrVector3f* v) { return sqrtf(v->x * v->x + v->y * v->y + v->z * v->z); }
 
+inline static void XrQuaternionf_CreateIdentity(XrQuaternionf* q) {
+    q->x = 0.0f;
+    q->y = 0.0f;
+    q->z = 0.0f;
+    q->w = 1.0f;
+}
+
 inline static void XrQuaternionf_CreateFromAxisAngle(XrQuaternionf* result, const XrVector3f* axis, const float angleInRadians) {
     float s = sinf(angleInRadians / 2.0f);
     float lengthRcp = XrRcpSqrt(axis->x * axis->x + axis->y * axis->y + axis->z * axis->z);
@@ -238,6 +251,58 @@ inline static void XrQuaternionf_Multiply(XrQuaternionf* result, const XrQuatern
     result->w = (b->w * a->w) - (b->x * a->x) - (b->y * a->y) - (b->z * a->z);
 }
 
+inline static void XrQuaternionf_Invert(XrQuaternionf* result, const XrQuaternionf* q) {
+    result->x = -q->x;
+    result->y = -q->y;
+    result->z = -q->z;
+    result->w = q->w;
+}
+
+inline static void XrQuaternionf_Normalize(XrQuaternionf* q) {
+    const float lengthRcp = XrRcpSqrt(q->x * q->x + q->y * q->y + q->z * q->z + q->w * q->w);
+    q->x *= lengthRcp;
+    q->y *= lengthRcp;
+    q->z *= lengthRcp;
+    q->w *= lengthRcp;
+}
+
+inline static void XrQuaternionf_RotateVector3f(XrVector3f* result, const XrQuaternionf* a, const XrVector3f* v) {
+    XrQuaternionf q = {v->x, v->y, v->z, 0.0f};
+    XrQuaternionf aq;
+    XrQuaternionf_Multiply(&aq, &q, a);
+    XrQuaternionf aInv;
+    XrQuaternionf_Invert(&aInv, a);
+    XrQuaternionf aqaInv;
+    XrQuaternionf_Multiply(&aqaInv, &aInv, &aq);
+
+    result->x = aqaInv.x;
+    result->y = aqaInv.y;
+    result->z = aqaInv.z;
+}
+
+inline static void XrPosef_CreateIdentity(XrPosef* result) {
+    XrQuaternionf_CreateIdentity(&result->orientation);
+    XrVector3f_Set(&result->position, 0);
+}
+
+inline static void XrPosef_TransformVector3f(XrVector3f* result, const XrPosef* a, const XrVector3f* v) {
+    XrVector3f r0;
+    XrQuaternionf_RotateVector3f(&r0, &a->orientation, v);
+    XrVector3f_Add(result, &r0, &a->position);
+}
+
+inline static void XrPosef_Multiply(XrPosef* result, const XrPosef* a, const XrPosef* b) {
+    XrQuaternionf_Multiply(&result->orientation, &b->orientation, &a->orientation);
+    XrPosef_TransformVector3f(&result->position, a, &b->position);
+}
+
+inline static void XrPosef_Invert(XrPosef* result, const XrPosef* a) {
+    XrQuaternionf_Invert(&result->orientation, &a->orientation);
+    XrVector3f aPosNeg;
+    XrVector3f_Scale(&aPosNeg, &a->position, -1.0f);
+    XrQuaternionf_RotateVector3f(&result->position, &result->orientation, &aPosNeg);
+}
+
 // Use left-multiplication to accumulate transformations.
 inline static void XrMatrix4x4f_Multiply(XrMatrix4x4f* result, const XrMatrix4x4f* a, const XrMatrix4x4f* b) {
     result->m[0] = a->m[0] * b->m[0] + a->m[4] * b->m[1] + a->m[8] * b->m[2] + a->m[12] * b->m[3];
@@ -379,23 +444,31 @@ inline static void XrMatrix4x4f_CreateTranslation(XrMatrix4x4f* result, const fl
 }
 
 // Creates a rotation matrix.
-// If -Z=forward, +Y=up, +X=right, then degreesX=pitch, degreesY=yaw, degreesZ=roll.
-inline static void XrMatrix4x4f_CreateRotation(XrMatrix4x4f* result, const float degreesX, const float degreesY,
-                                               const float degreesZ) {
-    const float sinX = sinf(degreesX * (MATH_PI / 180.0f));
-    const float cosX = cosf(degreesX * (MATH_PI / 180.0f));
+// If -Z=forward, +Y=up, +X=right, then radiansX=pitch, radiansY=yaw, radiansZ=roll.
+inline static void XrMatrix4x4f_CreateRotationRadians(XrMatrix4x4f* result, const float radiansX, const float radiansY,
+                                                      const float radiansZ) {
+    const float sinX = sinf(radiansX);
+    const float cosX = cosf(radiansX);
     const XrMatrix4x4f rotationX = {{1, 0, 0, 0, 0, cosX, sinX, 0, 0, -sinX, cosX, 0, 0, 0, 0, 1}};
-    const float sinY = sinf(degreesY * (MATH_PI / 180.0f));
-    const float cosY = cosf(degreesY * (MATH_PI / 180.0f));
+    const float sinY = sinf(radiansY);
+    const float cosY = cosf(radiansY);
     const XrMatrix4x4f rotationY = {{cosY, 0, -sinY, 0, 0, 1, 0, 0, sinY, 0, cosY, 0, 0, 0, 0, 1}};
-    const float sinZ = sinf(degreesZ * (MATH_PI / 180.0f));
-    const float cosZ = cosf(degreesZ * (MATH_PI / 180.0f));
+    const float sinZ = sinf(radiansZ);
+    const float cosZ = cosf(radiansZ);
     const XrMatrix4x4f rotationZ = {{cosZ, sinZ, 0, 0, -sinZ, cosZ, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1}};
     XrMatrix4x4f rotationXY;
     XrMatrix4x4f_Multiply(&rotationXY, &rotationY, &rotationX);
     XrMatrix4x4f_Multiply(result, &rotationZ, &rotationXY);
 }
 
+// Creates a rotation matrix.
+// If -Z=forward, +Y=up, +X=right, then degreesX=pitch, degreesY=yaw, degreesZ=roll.
+inline static void XrMatrix4x4f_CreateRotation(XrMatrix4x4f* result, const float degreesX, const float degreesY,
+                                               const float degreesZ) {
+    XrMatrix4x4f_CreateRotationRadians(result, degreesX * (MATH_PI / 180.0f), degreesY * (MATH_PI / 180.0f),
+                                       degreesZ * (MATH_PI / 180.0f));
+}
+
 // Creates a scale matrix.
 inline static void XrMatrix4x4f_CreateScale(XrMatrix4x4f* result, const float x, const float y, const float z) {
     result->m[0] = x;
@@ -471,6 +544,11 @@ inline static void XrMatrix4x4f_CreateTranslationRotationScale(XrMatrix4x4f* res
     XrMatrix4x4f_Multiply(result, &translationMatrix, &combinedMatrix);
 }
 
+inline static void XrMatrix4x4f_CreateFromRigidTransform(XrMatrix4x4f* result, const XrPosef* s) {
+    const XrVector3f identityScale = {1.0f, 1.0f, 1.0f};
+    XrMatrix4x4f_CreateTranslationRotationScale(result, &s->position, &s->orientation, &identityScale);
+}
+
 // Creates a projection matrix based on the specified dimensions.
 // The projection matrix transforms -Z=forward, +Y=up, +X=right to the appropriate clip space for the graphics API.
 // The far plane is placed at infinity if farZ <= nearZ.

+ 5 - 5
thirdparty/openxr/src/loader/android_utilities.cpp

@@ -1,4 +1,4 @@
-// Copyright (c) 2020-2022, The Khronos Group Inc.
+// Copyright (c) 2020-2023, The Khronos Group Inc.
 // Copyright (c) 2020-2021, Collabora, Ltd.
 //
 // SPDX-License-Identifier:  Apache-2.0 OR MIT
@@ -19,10 +19,10 @@
 #include <vector>
 #include <android/log.h>
 
-#define ALOGE(...) __android_log_print(ANDROID_LOG_ERROR, "openxr_loader", __VA_ARGS__)
-#define ALOGW(...) __android_log_print(ANDROID_LOG_WARN, "openxr_loader", __VA_ARGS__)
-#define ALOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, "openxr_loader", __VA_ARGS__)
-#define ALOGI(...) __android_log_print(ANDROID_LOG_INFO, "openxr_loader", __VA_ARGS__)
+#define ALOGE(...) __android_log_print(ANDROID_LOG_ERROR, "OpenXR-Loader", __VA_ARGS__)
+#define ALOGW(...) __android_log_print(ANDROID_LOG_WARN, "OpenXR-Loader", __VA_ARGS__)
+#define ALOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, "OpenXR-Loader", __VA_ARGS__)
+#define ALOGI(...) __android_log_print(ANDROID_LOG_INFO, "OpenXR-Loader", __VA_ARGS__)
 
 namespace openxr_android {
 using wrap::android::content::ContentUris;

+ 1 - 1
thirdparty/openxr/src/loader/android_utilities.h

@@ -1,4 +1,4 @@
-// Copyright (c) 2020-2022, The Khronos Group Inc.
+// Copyright (c) 2020-2023, The Khronos Group Inc.
 // Copyright (c) 2020-2021, Collabora, Ltd.
 //
 // SPDX-License-Identifier:  Apache-2.0 OR MIT

+ 11 - 5
thirdparty/openxr/src/loader/api_layer_interface.cpp

@@ -1,4 +1,4 @@
-// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2023, The Khronos Group Inc.
 // Copyright (c) 2017-2019 Valve Corporation
 // Copyright (c) 2017-2019 LunarG, Inc.
 //
@@ -82,6 +82,12 @@ XrResult ApiLayerInterface::GetApiLayerProperties(const std::string& openxr_comm
         return result;
     }
 
+    // check for potential overflow before static_cast<uint32_t>
+    if (manifest_files.size() >= UINT32_MAX) {
+        LoaderLogger::LogErrorMessage(openxr_command, "ApiLayerInterface::GetApiLayerProperties - too many API layers found");
+        return XR_ERROR_RUNTIME_FAILURE;
+    }
+
     manifest_count = static_cast<uint32_t>(manifest_files.size());
     if (nullptr == outgoing_count) {
         LoaderLogger::LogErrorMessage("xrEnumerateInstanceExtensionProperties",
@@ -131,8 +137,8 @@ XrResult ApiLayerInterface::GetInstanceExtensionProperties(const std::string& op
             }
 
             bool found = false;
-            auto num_files = static_cast<uint32_t>(manifest_files.size());
-            for (uint32_t man_file = 0; man_file < num_files; ++man_file) {
+            size_t num_files = manifest_files.size();
+            for (size_t man_file = 0; man_file < num_files; ++man_file) {
                 // If a layer with the provided name exists, get it's instance extension information.
                 if (manifest_files[man_file]->LayerName() == layer_name) {
                     manifest_files[man_file]->GetInstanceExtensionProperties(extension_properties);
@@ -172,8 +178,8 @@ XrResult ApiLayerInterface::GetInstanceExtensionProperties(const std::string& op
         }
 
         // Grab the layer instance extensions information
-        auto num_files = static_cast<uint32_t>(manifest_files.size());
-        for (uint32_t man_file = 0; man_file < num_files; ++man_file) {
+        size_t num_files = manifest_files.size();
+        for (size_t man_file = 0; man_file < num_files; ++man_file) {
             manifest_files[man_file]->GetInstanceExtensionProperties(extension_properties);
         }
     }

+ 1 - 1
thirdparty/openxr/src/loader/api_layer_interface.hpp

@@ -1,4 +1,4 @@
-// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2023, The Khronos Group Inc.
 // Copyright (c) 2017-2019 Valve Corporation
 // Copyright (c) 2017-2019 LunarG, Inc.
 //

+ 1 - 1
thirdparty/openxr/src/loader/exception_handling.hpp

@@ -1,4 +1,4 @@
-// Copyright (c) 2019-2022, The Khronos Group Inc.
+// Copyright (c) 2019-2023, The Khronos Group Inc.
 //
 // SPDX-License-Identifier: Apache-2.0 OR MIT
 //

+ 1 - 1
thirdparty/openxr/src/loader/loader_core.cpp

@@ -1,4 +1,4 @@
-// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2023, The Khronos Group Inc.
 // Copyright (c) 2017-2019 Valve Corporation
 // Copyright (c) 2017-2019 LunarG, Inc.
 //

+ 3 - 3
thirdparty/openxr/src/loader/loader_instance.cpp

@@ -1,4 +1,4 @@
-// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2023, The Khronos Group Inc.
 // Copyright (c) 2017-2019 Valve Corporation
 // Copyright (c) 2017-2019 LunarG, Inc.
 //
@@ -200,8 +200,8 @@ XrResult LoaderInstance::CreateInstance(PFN_xrGetInstanceProcAddr get_instance_p
         if (!api_layer_interfaces.empty()) {
             // Initialize an array of ApiLayerNextInfo structs
             std::unique_ptr<XrApiLayerNextInfo[]> next_info_list(new XrApiLayerNextInfo[api_layer_interfaces.size()]);
-            auto ni_index = static_cast<uint32_t>(api_layer_interfaces.size() - 1);
-            for (uint32_t i = 0; i <= ni_index; i++) {
+            size_t ni_index = api_layer_interfaces.size() - 1;
+            for (size_t i = 0; i <= ni_index; i++) {
                 next_info_list[i].structType = XR_LOADER_INTERFACE_STRUCT_API_LAYER_NEXT_INFO;
                 next_info_list[i].structVersion = XR_API_LAYER_NEXT_INFO_STRUCT_VERSION;
                 next_info_list[i].structSize = sizeof(XrApiLayerNextInfo);

+ 1 - 1
thirdparty/openxr/src/loader/loader_instance.hpp

@@ -1,4 +1,4 @@
-// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2023, The Khronos Group Inc.
 // Copyright (c) 2017-2019 Valve Corporation
 // Copyright (c) 2017-2019 LunarG, Inc.
 //

+ 4 - 1
thirdparty/openxr/src/loader/loader_logger.cpp

@@ -1,4 +1,4 @@
-// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2023, The Khronos Group Inc.
 // Copyright (c) 2017-2019 Valve Corporation
 // Copyright (c) 2017-2019 LunarG, Inc.
 //
@@ -26,6 +26,9 @@
 #include <utility>
 #include <vector>
 
+// For routing platform_utils.hpp messages into the LoaderLogger.
+void LogPlatformUtilsError(const std::string& message) { LoaderLogger::LogErrorMessage("platform_utils", message); }
+
 bool LoaderLogRecorder::LogDebugUtilsMessage(XrDebugUtilsMessageSeverityFlagsEXT /*message_severity*/,
                                              XrDebugUtilsMessageTypeFlagsEXT /*message_type*/,
                                              const XrDebugUtilsMessengerCallbackDataEXT* /*callback_data*/) {

+ 1 - 1
thirdparty/openxr/src/loader/loader_logger.hpp

@@ -1,4 +1,4 @@
-// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2023, The Khronos Group Inc.
 // Copyright (c) 2017-2019 Valve Corporation
 // Copyright (c) 2017-2019 LunarG, Inc.
 //

+ 6 - 6
thirdparty/openxr/src/loader/loader_logger_recorders.cpp

@@ -1,4 +1,4 @@
-// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2023, The Khronos Group Inc.
 // Copyright (c) 2017-2019 Valve Corporation
 // Copyright (c) 2017-2019 LunarG, Inc.
 //
@@ -160,16 +160,16 @@ bool DebugUtilsLogRecorder::LogMessage(XrLoaderLogMessageSeverityFlagBits messag
         XrDebugUtilsMessageTypeFlagsEXT utils_type = LoaderLogMessageTypesToDebugUtilsMessageTypes(message_type);
 
         // Convert the loader log message into the debug utils log message information
-        XrDebugUtilsMessengerCallbackDataEXT utils_callback_data = {};
+        XrDebugUtilsMessengerCallbackDataEXT utils_callback_data{};
         utils_callback_data.type = XR_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT;
         utils_callback_data.messageId = callback_data->message_id;
         utils_callback_data.functionName = callback_data->command_name;
         utils_callback_data.message = callback_data->message;
-        std::vector<XrDebugUtilsObjectNameInfoEXT> utils_objects;
-        utils_objects.resize(callback_data->object_count);
+
+        XrDebugUtilsObjectNameInfoEXT example_utils_info{};
+        example_utils_info.type = XR_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT;
+        std::vector<XrDebugUtilsObjectNameInfoEXT> utils_objects(callback_data->object_count, example_utils_info);
         for (uint8_t object = 0; object < callback_data->object_count; ++object) {
-            utils_objects[object].type = XR_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT;
-            utils_objects[object].next = nullptr;
             utils_objects[object].objectHandle = callback_data->objects[object].handle;
             utils_objects[object].objectType = callback_data->objects[object].type;
             utils_objects[object].objectName = callback_data->objects[object].name.c_str();

+ 1 - 1
thirdparty/openxr/src/loader/loader_logger_recorders.hpp

@@ -1,4 +1,4 @@
-// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2023, The Khronos Group Inc.
 // Copyright (c) 2017-2019 Valve Corporation
 // Copyright (c) 2017-2019 LunarG, Inc.
 //

+ 1 - 1
thirdparty/openxr/src/loader/loader_platform.hpp

@@ -1,4 +1,4 @@
-// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2023, The Khronos Group Inc.
 // Copyright (c) 2017-2019 Valve Corporation
 // Copyright (c) 2017-2019 LunarG, Inc.
 //

+ 10 - 5
thirdparty/openxr/src/loader/manifest_file.cpp

@@ -1,4 +1,4 @@
-// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2023, The Khronos Group Inc.
 // Copyright (c) 2017-2019 Valve Corporation
 // Copyright (c) 2017-2019 LunarG, Inc.
 //
@@ -27,13 +27,13 @@
 #include <openxr/openxr.h>
 
 #include <algorithm>
+#include <cstdlib>
+#include <cstdio>
 #include <cstring>
 #include <fstream>
 #include <memory>
 #include <sstream>
 #include <stdexcept>
-#include <stdio.h>
-#include <stdlib.h>
 #include <string>
 #include <unordered_map>
 #include <utility>
@@ -233,6 +233,12 @@ static void ReadDataFilesInSearchPaths(const std::string &override_env_var, cons
             relative_home_path += relative_path;
             CopyIncludedPaths(true, home, relative_home_path, search_path);
         }
+#elif defined(XR_OS_ANDROID)
+        CopyIncludedPaths(true, "/product/etc", relative_path, search_path);
+        CopyIncludedPaths(true, "/odm/etc", relative_path, search_path);
+        CopyIncludedPaths(true, "/oem/etc", relative_path, search_path);
+        CopyIncludedPaths(true, "/vendor/etc", relative_path, search_path);
+        CopyIncludedPaths(true, "/system/etc", relative_path, search_path);
 #else
         (void)relative_path;
 #endif
@@ -447,9 +453,8 @@ static void GetExtensionProperties(const std::vector<ExtensionListing> &extensio
         if (it != props.end()) {
             it->extensionVersion = std::max(it->extensionVersion, ext.extension_version);
         } else {
-            XrExtensionProperties prop = {};
+            XrExtensionProperties prop{};
             prop.type = XR_TYPE_EXTENSION_PROPERTIES;
-            prop.next = nullptr;
             strncpy(prop.extensionName, ext.name.c_str(), XR_MAX_EXTENSION_NAME_SIZE - 1);
             prop.extensionName[XR_MAX_EXTENSION_NAME_SIZE - 1] = '\0';
             prop.extensionVersion = ext.extension_version;

+ 1 - 1
thirdparty/openxr/src/loader/manifest_file.hpp

@@ -1,4 +1,4 @@
-// Copyright (c) 2017 The Khronos Group Inc.
+// Copyright (c) 2017-2023, The Khronos Group Inc.
 // Copyright (c) 2017 Valve Corporation
 // Copyright (c) 2017 LunarG, Inc.
 //

+ 4 - 6
thirdparty/openxr/src/loader/runtime_interface.cpp

@@ -1,4 +1,4 @@
-// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2023, The Khronos Group Inc.
 // Copyright (c) 2017-2019 Valve Corporation
 // Copyright (c) 2017-2019 LunarG, Inc.
 //
@@ -430,12 +430,10 @@ void RuntimeInterface::GetInstanceExtensionProperties(std::vector<XrExtensionPro
     // Get the count from the runtime
     rt_xrEnumerateInstanceExtensionProperties(nullptr, count, &count_output, nullptr);
     if (count_output > 0) {
-        runtime_extension_properties.resize(count_output);
+        XrExtensionProperties example_properties{};
+        example_properties.type = XR_TYPE_EXTENSION_PROPERTIES;
+        runtime_extension_properties.resize(count_output, example_properties);
         count = count_output;
-        for (XrExtensionProperties& ext_prop : runtime_extension_properties) {
-            ext_prop.type = XR_TYPE_EXTENSION_PROPERTIES;
-            ext_prop.next = nullptr;
-        }
         rt_xrEnumerateInstanceExtensionProperties(nullptr, count, &count_output, runtime_extension_properties.data());
     }
     size_t ext_count = runtime_extension_properties.size();

+ 1 - 1
thirdparty/openxr/src/loader/runtime_interface.hpp

@@ -1,4 +1,4 @@
-// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2023, The Khronos Group Inc.
 // Copyright (c) 2017-2019 Valve Corporation
 // Copyright (c) 2017-2019 LunarG, Inc.
 //

+ 2 - 2
thirdparty/openxr/src/loader/xr_generated_loader.cpp

@@ -1,4 +1,4 @@
-// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2023, The Khronos Group Inc.
 // Copyright (c) 2017-2019 Valve Corporation
 // Copyright (c) 2017-2019 LunarG, Inc.
 // SPDX-License-Identifier: Apache-2.0 OR MIT
@@ -6,7 +6,7 @@
 //     See loader_source_generator.py for modifications
 // ************************************************************
 
-// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2023, The Khronos Group Inc.
 // Copyright (c) 2017-2019 Valve Corporation
 // Copyright (c) 2017-2019 LunarG, Inc.
 //

+ 2 - 2
thirdparty/openxr/src/loader/xr_generated_loader.hpp

@@ -1,4 +1,4 @@
-// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2023, The Khronos Group Inc.
 // Copyright (c) 2017-2019 Valve Corporation
 // Copyright (c) 2017-2019 LunarG, Inc.
 // SPDX-License-Identifier: Apache-2.0 OR MIT
@@ -6,7 +6,7 @@
 //     See loader_source_generator.py for modifications
 // ************************************************************
 
-// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2023, The Khronos Group Inc.
 // Copyright (c) 2017-2019 Valve Corporation
 // Copyright (c) 2017-2019 LunarG, Inc.
 //

+ 79 - 2
thirdparty/openxr/src/xr_generated_dispatch_table.c

@@ -1,4 +1,4 @@
-// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2023, The Khronos Group Inc.
 // Copyright (c) 2017-2019 Valve Corporation
 // Copyright (c) 2017-2019 LunarG, Inc.
 // SPDX-License-Identifier: Apache-2.0 OR MIT
@@ -6,7 +6,7 @@
 //     See utility_source_generator.py for modifications
 // ************************************************************
 
-// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2023, The Khronos Group Inc.
 // Copyright (c) 2017-2019 Valve Corporation
 // Copyright (c) 2017-2019 LunarG, Inc.
 //
@@ -27,6 +27,7 @@
 // Author: Mark Young <[email protected]>
 //
 
+#include <time.h>
 #include "xr_generated_dispatch_table.h"
 #include "xr_dependencies.h"
 #include <openxr/openxr.h>
@@ -236,6 +237,12 @@ void GeneratedXrPopulateDispatchTable(struct XrGeneratedDispatchTable *table,
     (get_inst_proc_addr(instance, "xrUpdateSwapchainFB", (PFN_xrVoidFunction*)&table->UpdateSwapchainFB));
     (get_inst_proc_addr(instance, "xrGetSwapchainStateFB", (PFN_xrVoidFunction*)&table->GetSwapchainStateFB));
 
+    // ---- XR_FB_body_tracking extension commands
+    (get_inst_proc_addr(instance, "xrCreateBodyTrackerFB", (PFN_xrVoidFunction*)&table->CreateBodyTrackerFB));
+    (get_inst_proc_addr(instance, "xrDestroyBodyTrackerFB", (PFN_xrVoidFunction*)&table->DestroyBodyTrackerFB));
+    (get_inst_proc_addr(instance, "xrLocateBodyJointsFB", (PFN_xrVoidFunction*)&table->LocateBodyJointsFB));
+    (get_inst_proc_addr(instance, "xrGetBodySkeletonFB", (PFN_xrVoidFunction*)&table->GetBodySkeletonFB));
+
     // ---- XR_MSFT_scene_understanding extension commands
     (get_inst_proc_addr(instance, "xrEnumerateSceneComputeFeaturesMSFT", (PFN_xrVoidFunction*)&table->EnumerateSceneComputeFeaturesMSFT));
     (get_inst_proc_addr(instance, "xrCreateSceneObserverMSFT", (PFN_xrVoidFunction*)&table->CreateSceneObserverMSFT));
@@ -329,6 +336,11 @@ void GeneratedXrPopulateDispatchTable(struct XrGeneratedDispatchTable *table,
     // ---- XR_VARJO_view_offset extension commands
     (get_inst_proc_addr(instance, "xrSetViewOffsetVARJO", (PFN_xrVoidFunction*)&table->SetViewOffsetVARJO));
 
+    // ---- XR_ML_compat extension commands
+#if defined(XR_USE_PLATFORM_ML)
+    (get_inst_proc_addr(instance, "xrCreateSpaceFromCoordinateFrameUIDML", (PFN_xrVoidFunction*)&table->CreateSpaceFromCoordinateFrameUIDML));
+#endif // defined(XR_USE_PLATFORM_ML)
+
     // ---- XR_MSFT_spatial_anchor_persistence extension commands
     (get_inst_proc_addr(instance, "xrCreateSpatialAnchorStoreConnectionMSFT", (PFN_xrVoidFunction*)&table->CreateSpatialAnchorStoreConnectionMSFT));
     (get_inst_proc_addr(instance, "xrDestroySpatialAnchorStoreConnectionMSFT", (PFN_xrVoidFunction*)&table->DestroySpatialAnchorStoreConnectionMSFT));
@@ -354,6 +366,9 @@ void GeneratedXrPopulateDispatchTable(struct XrGeneratedDispatchTable *table,
     (get_inst_proc_addr(instance, "xrGetAudioInputDeviceGuidOculus", (PFN_xrVoidFunction*)&table->GetAudioInputDeviceGuidOculus));
 #endif // defined(XR_USE_PLATFORM_WIN32)
 
+    // ---- XR_FB_spatial_entity_sharing extension commands
+    (get_inst_proc_addr(instance, "xrShareSpacesFB", (PFN_xrVoidFunction*)&table->ShareSpacesFB));
+
     // ---- XR_FB_scene extension commands
     (get_inst_proc_addr(instance, "xrGetSpaceBoundingBox2DFB", (PFN_xrVoidFunction*)&table->GetSpaceBoundingBox2DFB));
     (get_inst_proc_addr(instance, "xrGetSpaceBoundingBox3DFB", (PFN_xrVoidFunction*)&table->GetSpaceBoundingBox3DFB));
@@ -364,24 +379,86 @@ void GeneratedXrPopulateDispatchTable(struct XrGeneratedDispatchTable *table,
     // ---- XR_ALMALENCE_digital_lens_control extension commands
     (get_inst_proc_addr(instance, "xrSetDigitalLensControlALMALENCE", (PFN_xrVoidFunction*)&table->SetDigitalLensControlALMALENCE));
 
+    // ---- XR_FB_scene_capture extension commands
+    (get_inst_proc_addr(instance, "xrRequestSceneCaptureFB", (PFN_xrVoidFunction*)&table->RequestSceneCaptureFB));
+
     // ---- XR_FB_spatial_entity_container extension commands
     (get_inst_proc_addr(instance, "xrGetSpaceContainerFB", (PFN_xrVoidFunction*)&table->GetSpaceContainerFB));
 
+    // ---- XR_META_foveation_eye_tracked extension commands
+    (get_inst_proc_addr(instance, "xrGetFoveationEyeTrackedStateMETA", (PFN_xrVoidFunction*)&table->GetFoveationEyeTrackedStateMETA));
+
+    // ---- XR_FB_face_tracking extension commands
+    (get_inst_proc_addr(instance, "xrCreateFaceTrackerFB", (PFN_xrVoidFunction*)&table->CreateFaceTrackerFB));
+    (get_inst_proc_addr(instance, "xrDestroyFaceTrackerFB", (PFN_xrVoidFunction*)&table->DestroyFaceTrackerFB));
+    (get_inst_proc_addr(instance, "xrGetFaceExpressionWeightsFB", (PFN_xrVoidFunction*)&table->GetFaceExpressionWeightsFB));
+
+    // ---- XR_FB_eye_tracking_social extension commands
+    (get_inst_proc_addr(instance, "xrCreateEyeTrackerFB", (PFN_xrVoidFunction*)&table->CreateEyeTrackerFB));
+    (get_inst_proc_addr(instance, "xrDestroyEyeTrackerFB", (PFN_xrVoidFunction*)&table->DestroyEyeTrackerFB));
+    (get_inst_proc_addr(instance, "xrGetEyeGazesFB", (PFN_xrVoidFunction*)&table->GetEyeGazesFB));
+
     // ---- XR_FB_passthrough_keyboard_hands extension commands
     (get_inst_proc_addr(instance, "xrPassthroughLayerSetKeyboardHandsIntensityFB", (PFN_xrVoidFunction*)&table->PassthroughLayerSetKeyboardHandsIntensityFB));
 
+    // ---- XR_FB_haptic_pcm extension commands
+    (get_inst_proc_addr(instance, "xrGetDeviceSampleRateFB", (PFN_xrVoidFunction*)&table->GetDeviceSampleRateFB));
+
+    // ---- XR_META_virtual_keyboard extension commands
+    (get_inst_proc_addr(instance, "xrCreateVirtualKeyboardMETA", (PFN_xrVoidFunction*)&table->CreateVirtualKeyboardMETA));
+    (get_inst_proc_addr(instance, "xrDestroyVirtualKeyboardMETA", (PFN_xrVoidFunction*)&table->DestroyVirtualKeyboardMETA));
+    (get_inst_proc_addr(instance, "xrCreateVirtualKeyboardSpaceMETA", (PFN_xrVoidFunction*)&table->CreateVirtualKeyboardSpaceMETA));
+    (get_inst_proc_addr(instance, "xrSuggestVirtualKeyboardLocationMETA", (PFN_xrVoidFunction*)&table->SuggestVirtualKeyboardLocationMETA));
+    (get_inst_proc_addr(instance, "xrGetVirtualKeyboardScaleMETA", (PFN_xrVoidFunction*)&table->GetVirtualKeyboardScaleMETA));
+    (get_inst_proc_addr(instance, "xrSetVirtualKeyboardModelVisibilityMETA", (PFN_xrVoidFunction*)&table->SetVirtualKeyboardModelVisibilityMETA));
+    (get_inst_proc_addr(instance, "xrGetVirtualKeyboardModelAnimationStatesMETA", (PFN_xrVoidFunction*)&table->GetVirtualKeyboardModelAnimationStatesMETA));
+    (get_inst_proc_addr(instance, "xrGetVirtualKeyboardDirtyTexturesMETA", (PFN_xrVoidFunction*)&table->GetVirtualKeyboardDirtyTexturesMETA));
+    (get_inst_proc_addr(instance, "xrGetVirtualKeyboardTextureDataMETA", (PFN_xrVoidFunction*)&table->GetVirtualKeyboardTextureDataMETA));
+    (get_inst_proc_addr(instance, "xrSendVirtualKeyboardInputMETA", (PFN_xrVoidFunction*)&table->SendVirtualKeyboardInputMETA));
+    (get_inst_proc_addr(instance, "xrChangeVirtualKeyboardTextContextMETA", (PFN_xrVoidFunction*)&table->ChangeVirtualKeyboardTextContextMETA));
+
+    // ---- XR_OCULUS_external_camera extension commands
+    (get_inst_proc_addr(instance, "xrEnumerateExternalCamerasOCULUS", (PFN_xrVoidFunction*)&table->EnumerateExternalCamerasOCULUS));
+
     // ---- XR_META_performance_metrics extension commands
     (get_inst_proc_addr(instance, "xrEnumeratePerformanceMetricsCounterPathsMETA", (PFN_xrVoidFunction*)&table->EnumeratePerformanceMetricsCounterPathsMETA));
     (get_inst_proc_addr(instance, "xrSetPerformanceMetricsStateMETA", (PFN_xrVoidFunction*)&table->SetPerformanceMetricsStateMETA));
     (get_inst_proc_addr(instance, "xrGetPerformanceMetricsStateMETA", (PFN_xrVoidFunction*)&table->GetPerformanceMetricsStateMETA));
     (get_inst_proc_addr(instance, "xrQueryPerformanceMetricsCounterMETA", (PFN_xrVoidFunction*)&table->QueryPerformanceMetricsCounterMETA));
 
+    // ---- XR_FB_spatial_entity_storage_batch extension commands
+    (get_inst_proc_addr(instance, "xrSaveSpaceListFB", (PFN_xrVoidFunction*)&table->SaveSpaceListFB));
+
+    // ---- XR_FB_spatial_entity_user extension commands
+    (get_inst_proc_addr(instance, "xrCreateSpaceUserFB", (PFN_xrVoidFunction*)&table->CreateSpaceUserFB));
+    (get_inst_proc_addr(instance, "xrGetSpaceUserIdFB", (PFN_xrVoidFunction*)&table->GetSpaceUserIdFB));
+    (get_inst_proc_addr(instance, "xrDestroySpaceUserFB", (PFN_xrVoidFunction*)&table->DestroySpaceUserFB));
+
+    // ---- XR_META_passthrough_color_lut extension commands
+    (get_inst_proc_addr(instance, "xrCreatePassthroughColorLutMETA", (PFN_xrVoidFunction*)&table->CreatePassthroughColorLutMETA));
+    (get_inst_proc_addr(instance, "xrDestroyPassthroughColorLutMETA", (PFN_xrVoidFunction*)&table->DestroyPassthroughColorLutMETA));
+    (get_inst_proc_addr(instance, "xrUpdatePassthroughColorLutMETA", (PFN_xrVoidFunction*)&table->UpdatePassthroughColorLutMETA));
+
+    // ---- XR_QCOM_tracking_optimization_settings extension commands
+    (get_inst_proc_addr(instance, "xrSetTrackingOptimizationSettingsHintQCOM", (PFN_xrVoidFunction*)&table->SetTrackingOptimizationSettingsHintQCOM));
+
     // ---- XR_HTC_passthrough extension commands
     (get_inst_proc_addr(instance, "xrCreatePassthroughHTC", (PFN_xrVoidFunction*)&table->CreatePassthroughHTC));
     (get_inst_proc_addr(instance, "xrDestroyPassthroughHTC", (PFN_xrVoidFunction*)&table->DestroyPassthroughHTC));
 
     // ---- XR_HTC_foveation extension commands
     (get_inst_proc_addr(instance, "xrApplyFoveationHTC", (PFN_xrVoidFunction*)&table->ApplyFoveationHTC));
+
+    // ---- XR_MNDX_force_feedback_curl extension commands
+    (get_inst_proc_addr(instance, "xrApplyForceFeedbackCurlMNDX", (PFN_xrVoidFunction*)&table->ApplyForceFeedbackCurlMNDX));
+
+    // ---- XR_EXT_plane_detection extension commands
+    (get_inst_proc_addr(instance, "xrCreatePlaneDetectorEXT", (PFN_xrVoidFunction*)&table->CreatePlaneDetectorEXT));
+    (get_inst_proc_addr(instance, "xrDestroyPlaneDetectorEXT", (PFN_xrVoidFunction*)&table->DestroyPlaneDetectorEXT));
+    (get_inst_proc_addr(instance, "xrBeginPlaneDetectionEXT", (PFN_xrVoidFunction*)&table->BeginPlaneDetectionEXT));
+    (get_inst_proc_addr(instance, "xrGetPlaneDetectionStateEXT", (PFN_xrVoidFunction*)&table->GetPlaneDetectionStateEXT));
+    (get_inst_proc_addr(instance, "xrGetPlaneDetectionsEXT", (PFN_xrVoidFunction*)&table->GetPlaneDetectionsEXT));
+    (get_inst_proc_addr(instance, "xrGetPlanePolygonBufferEXT", (PFN_xrVoidFunction*)&table->GetPlanePolygonBufferEXT));
 }
 
 

+ 78 - 2
thirdparty/openxr/src/xr_generated_dispatch_table.h

@@ -1,4 +1,4 @@
-// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2023, The Khronos Group Inc.
 // Copyright (c) 2017-2019 Valve Corporation
 // Copyright (c) 2017-2019 LunarG, Inc.
 // SPDX-License-Identifier: Apache-2.0 OR MIT
@@ -6,7 +6,7 @@
 //     See utility_source_generator.py for modifications
 // ************************************************************
 
-// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2023, The Khronos Group Inc.
 // Copyright (c) 2017-2019 Valve Corporation
 // Copyright (c) 2017-2019 LunarG, Inc.
 //
@@ -239,6 +239,12 @@ struct XrGeneratedDispatchTable {
     PFN_xrUpdateSwapchainFB UpdateSwapchainFB;
     PFN_xrGetSwapchainStateFB GetSwapchainStateFB;
 
+    // ---- XR_FB_body_tracking extension commands
+    PFN_xrCreateBodyTrackerFB CreateBodyTrackerFB;
+    PFN_xrDestroyBodyTrackerFB DestroyBodyTrackerFB;
+    PFN_xrLocateBodyJointsFB LocateBodyJointsFB;
+    PFN_xrGetBodySkeletonFB GetBodySkeletonFB;
+
     // ---- XR_MSFT_scene_understanding extension commands
     PFN_xrEnumerateSceneComputeFeaturesMSFT EnumerateSceneComputeFeaturesMSFT;
     PFN_xrCreateSceneObserverMSFT CreateSceneObserverMSFT;
@@ -332,6 +338,11 @@ struct XrGeneratedDispatchTable {
     // ---- XR_VARJO_view_offset extension commands
     PFN_xrSetViewOffsetVARJO SetViewOffsetVARJO;
 
+    // ---- XR_ML_compat extension commands
+#if defined(XR_USE_PLATFORM_ML)
+    PFN_xrCreateSpaceFromCoordinateFrameUIDML CreateSpaceFromCoordinateFrameUIDML;
+#endif // defined(XR_USE_PLATFORM_ML)
+
     // ---- XR_MSFT_spatial_anchor_persistence extension commands
     PFN_xrCreateSpatialAnchorStoreConnectionMSFT CreateSpatialAnchorStoreConnectionMSFT;
     PFN_xrDestroySpatialAnchorStoreConnectionMSFT DestroySpatialAnchorStoreConnectionMSFT;
@@ -357,6 +368,9 @@ struct XrGeneratedDispatchTable {
     PFN_xrGetAudioInputDeviceGuidOculus GetAudioInputDeviceGuidOculus;
 #endif // defined(XR_USE_PLATFORM_WIN32)
 
+    // ---- XR_FB_spatial_entity_sharing extension commands
+    PFN_xrShareSpacesFB ShareSpacesFB;
+
     // ---- XR_FB_scene extension commands
     PFN_xrGetSpaceBoundingBox2DFB GetSpaceBoundingBox2DFB;
     PFN_xrGetSpaceBoundingBox3DFB GetSpaceBoundingBox3DFB;
@@ -367,24 +381,86 @@ struct XrGeneratedDispatchTable {
     // ---- XR_ALMALENCE_digital_lens_control extension commands
     PFN_xrSetDigitalLensControlALMALENCE SetDigitalLensControlALMALENCE;
 
+    // ---- XR_FB_scene_capture extension commands
+    PFN_xrRequestSceneCaptureFB RequestSceneCaptureFB;
+
     // ---- XR_FB_spatial_entity_container extension commands
     PFN_xrGetSpaceContainerFB GetSpaceContainerFB;
 
+    // ---- XR_META_foveation_eye_tracked extension commands
+    PFN_xrGetFoveationEyeTrackedStateMETA GetFoveationEyeTrackedStateMETA;
+
+    // ---- XR_FB_face_tracking extension commands
+    PFN_xrCreateFaceTrackerFB CreateFaceTrackerFB;
+    PFN_xrDestroyFaceTrackerFB DestroyFaceTrackerFB;
+    PFN_xrGetFaceExpressionWeightsFB GetFaceExpressionWeightsFB;
+
+    // ---- XR_FB_eye_tracking_social extension commands
+    PFN_xrCreateEyeTrackerFB CreateEyeTrackerFB;
+    PFN_xrDestroyEyeTrackerFB DestroyEyeTrackerFB;
+    PFN_xrGetEyeGazesFB GetEyeGazesFB;
+
     // ---- XR_FB_passthrough_keyboard_hands extension commands
     PFN_xrPassthroughLayerSetKeyboardHandsIntensityFB PassthroughLayerSetKeyboardHandsIntensityFB;
 
+    // ---- XR_FB_haptic_pcm extension commands
+    PFN_xrGetDeviceSampleRateFB GetDeviceSampleRateFB;
+
+    // ---- XR_META_virtual_keyboard extension commands
+    PFN_xrCreateVirtualKeyboardMETA CreateVirtualKeyboardMETA;
+    PFN_xrDestroyVirtualKeyboardMETA DestroyVirtualKeyboardMETA;
+    PFN_xrCreateVirtualKeyboardSpaceMETA CreateVirtualKeyboardSpaceMETA;
+    PFN_xrSuggestVirtualKeyboardLocationMETA SuggestVirtualKeyboardLocationMETA;
+    PFN_xrGetVirtualKeyboardScaleMETA GetVirtualKeyboardScaleMETA;
+    PFN_xrSetVirtualKeyboardModelVisibilityMETA SetVirtualKeyboardModelVisibilityMETA;
+    PFN_xrGetVirtualKeyboardModelAnimationStatesMETA GetVirtualKeyboardModelAnimationStatesMETA;
+    PFN_xrGetVirtualKeyboardDirtyTexturesMETA GetVirtualKeyboardDirtyTexturesMETA;
+    PFN_xrGetVirtualKeyboardTextureDataMETA GetVirtualKeyboardTextureDataMETA;
+    PFN_xrSendVirtualKeyboardInputMETA SendVirtualKeyboardInputMETA;
+    PFN_xrChangeVirtualKeyboardTextContextMETA ChangeVirtualKeyboardTextContextMETA;
+
+    // ---- XR_OCULUS_external_camera extension commands
+    PFN_xrEnumerateExternalCamerasOCULUS EnumerateExternalCamerasOCULUS;
+
     // ---- XR_META_performance_metrics extension commands
     PFN_xrEnumeratePerformanceMetricsCounterPathsMETA EnumeratePerformanceMetricsCounterPathsMETA;
     PFN_xrSetPerformanceMetricsStateMETA SetPerformanceMetricsStateMETA;
     PFN_xrGetPerformanceMetricsStateMETA GetPerformanceMetricsStateMETA;
     PFN_xrQueryPerformanceMetricsCounterMETA QueryPerformanceMetricsCounterMETA;
 
+    // ---- XR_FB_spatial_entity_storage_batch extension commands
+    PFN_xrSaveSpaceListFB SaveSpaceListFB;
+
+    // ---- XR_FB_spatial_entity_user extension commands
+    PFN_xrCreateSpaceUserFB CreateSpaceUserFB;
+    PFN_xrGetSpaceUserIdFB GetSpaceUserIdFB;
+    PFN_xrDestroySpaceUserFB DestroySpaceUserFB;
+
+    // ---- XR_META_passthrough_color_lut extension commands
+    PFN_xrCreatePassthroughColorLutMETA CreatePassthroughColorLutMETA;
+    PFN_xrDestroyPassthroughColorLutMETA DestroyPassthroughColorLutMETA;
+    PFN_xrUpdatePassthroughColorLutMETA UpdatePassthroughColorLutMETA;
+
+    // ---- XR_QCOM_tracking_optimization_settings extension commands
+    PFN_xrSetTrackingOptimizationSettingsHintQCOM SetTrackingOptimizationSettingsHintQCOM;
+
     // ---- XR_HTC_passthrough extension commands
     PFN_xrCreatePassthroughHTC CreatePassthroughHTC;
     PFN_xrDestroyPassthroughHTC DestroyPassthroughHTC;
 
     // ---- XR_HTC_foveation extension commands
     PFN_xrApplyFoveationHTC ApplyFoveationHTC;
+
+    // ---- XR_MNDX_force_feedback_curl extension commands
+    PFN_xrApplyForceFeedbackCurlMNDX ApplyForceFeedbackCurlMNDX;
+
+    // ---- XR_EXT_plane_detection extension commands
+    PFN_xrCreatePlaneDetectorEXT CreatePlaneDetectorEXT;
+    PFN_xrDestroyPlaneDetectorEXT DestroyPlaneDetectorEXT;
+    PFN_xrBeginPlaneDetectionEXT BeginPlaneDetectionEXT;
+    PFN_xrGetPlaneDetectionStateEXT GetPlaneDetectionStateEXT;
+    PFN_xrGetPlaneDetectionsEXT GetPlaneDetectionsEXT;
+    PFN_xrGetPlanePolygonBufferEXT GetPlanePolygonBufferEXT;
 };
 
 

Some files were not shown because too many files changed in this diff