From 6c7d01602c2a8a3ade23a0aef3813eb8f7d37176 Mon Sep 17 00:00:00 2001 From: Unity Technologies <@unity> Date: Tue, 21 Feb 2023 00:00:00 +0000 Subject: [PATCH] com.unity.xr.openxr@1.7.0 ## [1.7.0] - 2023-02-21 ### Fixed * Fixed - Meta builds now don't include Bluetooth permissions in Android manifest by default when using Microphone class in script code. * Fixed crash in OpenXR runtime debugger when cache size is set to 0. * Fixed OpenXR project validation to check for correct versions of OpenGLES in Unity 2023 and up. * Fixed crash when runtime reports an invalid view configuration from xrWaitFrame. * Fixed - OpenXR plugin will only look up functions from supported and enabled extensions. * Fixed GPU selection in multi-GPU scenarios. ### Updated * Updated documentation for the Meta Quest feature. ### Added * Added API `OpenXRRuntime.retryInitializationOnFormFactorErrors` to retry xrGetSystem during initialization if xrGetSystem returns a form factor error. * Enable XR_META_performance_metrics. This enables performance stats for Meta Quest devices on OpenXR. * Add class MetaQuestTouchProControllerProfile.QuestProTouchController new interaction profile to support Meta Quest pro controllers. * Added ability for OpenXRFeature derived classes to add Awake() functions. * Added API `OpenXRInput.GetActionIsActive` to check whether an InputAction has any bindings which are currently active. * Added API `OpenXRInput.GetActionHandle` to get the action handle of an InputAction and returns 0 if not found. ## [1.6.1-preview.1] - 2022-12-01 --- CHANGELOG.md | 31 +- ConformanceAutomation/android.meta | 2 +- ConformanceAutomation/android/arm64.meta | 2 +- .../arm64/ConformanceAutomationExt.so.meta | 2 +- ConformanceAutomation/universalwindows.meta | 2 +- .../universalwindows/arm32.meta | 2 +- .../arm32/ConformanceAutomationExt.dll | Bin 15872 -> 15872 bytes .../arm32/ConformanceAutomationExt.dll.meta | 2 +- .../universalwindows/arm64.meta | 2 +- .../arm64/ConformanceAutomationExt.dll | Bin 18432 -> 18432 bytes .../arm64/ConformanceAutomationExt.dll.meta | 2 +- .../universalwindows/x64.meta | 2 +- .../x64/ConformanceAutomationExt.dll | Bin 18432 -> 18432 bytes .../x64/ConformanceAutomationExt.dll.meta | 2 +- ConformanceAutomation/windows.meta | 2 +- ConformanceAutomation/windows/x64.meta | 2 +- .../windows/x64/ConformanceAutomationExt.dll | Bin 102400 -> 102400 bytes .../x64/ConformanceAutomationExt.dll.meta | 2 +- Documentation~/TableOfContents.md | 2 +- .../features/{oculusquest.md => metaquest.md} | 6 +- .../metaquesttouchprocontrollerprofile.md | 41 + Documentation~/index.md | 2 +- MetaQuest/Editor/ModifyAndroidManifestMeta.cs | 22 + MetaQuest/Runtime/MetaQuestFeature.cs | 18 +- MockRuntime/MockRuntime.cs | 3 + .../mock_conformance_automation.cpp | 4 +- .../mock_meta_performance_metrics.cpp | 304 ++++++ .../mock_meta_performance_metrics.h | 73 ++ ...mock_msft_secondary_view_configuration.cpp | 14 +- MockRuntime/Native~/mock_runtime/mock_api.cpp | 18 + .../Native~/mock_runtime/mock_extensions.h | 2 + .../Native~/mock_runtime/mock_loader.cpp | 24 + .../Native~/mock_runtime/mock_runtime.cpp | 8 +- .../Native~/mock_runtime/mock_runtime.h | 2 + .../mock_runtime_interaction_profiles.cpp | 62 ++ MockRuntime/android.meta | 2 +- MockRuntime/android/arm64.meta | 2 +- MockRuntime/android/arm64/libmock_api.so | Bin 219896 -> 219896 bytes MockRuntime/android/arm64/libmock_api.so.meta | 2 +- MockRuntime/android/arm64/libmock_runtime.so | Bin 950544 -> 975120 bytes .../android/arm64/libmock_runtime.so.meta | 2 +- .../android/arm64/libopenxr_loader.so.meta | 2 +- MockRuntime/windows.meta | 2 +- MockRuntime/windows/x64.meta | 2 +- MockRuntime/windows/x64/mock_api.dll | Bin 94208 -> 95232 bytes MockRuntime/windows/x64/mock_api.dll.meta | 2 +- MockRuntime/windows/x64/mock_runtime.dll | Bin 253952 -> 394752 bytes MockRuntime/windows/x64/mock_runtime.dll.meta | 2 +- MockRuntime/windows/x64/openxr_loader.dll | Bin 137216 -> 137216 bytes .../windows/x64/openxr_loader.dll.meta | 2 +- OculusQuest/Runtime/OculusQuestFeature.cs | 1 - .../MetaQuestTouchProControllerProfile.cs | 964 ++++++++++++++++++ ...MetaQuestTouchProControllerProfile.cs.meta | 3 + Runtime/Features/OpenXRFeature.cs | 6 + Runtime/OpenXRLoader.cs | 7 +- Runtime/OpenXRProjectValidation.cs | 5 + Runtime/OpenXRRestarter.cs | 85 +- Runtime/OpenXRRuntime.cs | 22 + Runtime/UnitySubsystemsManifest.json | 2 +- Runtime/WaitForRestartFinish.cs | 36 + Runtime/WaitForRestartFinish.cs.meta | 11 + Runtime/android.meta | 2 +- Runtime/android/arm64.meta | 2 +- Runtime/android/arm64/libUnityOpenXR.so | Bin 1254864 -> 1271248 bytes Runtime/android/arm64/libUnityOpenXR.so.meta | 2 +- Runtime/input/OpenXRInput.cs | 30 +- Runtime/universalwindows.meta | 2 +- Runtime/universalwindows/arm32.meta | 2 +- .../universalwindows/arm32/UnityOpenXR.dll | Bin 316416 -> 323584 bytes .../arm32/UnityOpenXR.dll.meta | 2 +- Runtime/universalwindows/arm64.meta | 2 +- .../universalwindows/arm64/UnityOpenXR.dll | Bin 408576 -> 416768 bytes .../arm64/UnityOpenXR.dll.meta | 2 +- Runtime/universalwindows/x64.meta | 2 +- Runtime/universalwindows/x64/UnityOpenXR.dll | Bin 436224 -> 445440 bytes .../universalwindows/x64/UnityOpenXR.dll.meta | 2 +- Runtime/windows.meta | 2 +- Runtime/windows/x64.meta | 2 +- Runtime/windows/x64/UnityOpenXR.dll | Bin 673280 -> 683008 bytes Runtime/windows/x64/UnityOpenXR.dll.meta | 2 +- .../RuntimeDebuggerOpenXRFeature.cs | 3 +- RuntimeDebugger/android.meta | 2 +- RuntimeDebugger/android/arm64.meta | 2 +- .../arm64/libopenxr_runtime_debugger.so.meta | 2 +- RuntimeDebugger/universalwindows.meta | 2 +- RuntimeDebugger/universalwindows/arm32.meta | 2 +- .../arm32/openxr_runtime_debugger.dll | Bin 211968 -> 211968 bytes .../arm32/openxr_runtime_debugger.dll.meta | 2 +- RuntimeDebugger/universalwindows/arm64.meta | 2 +- .../arm64/openxr_runtime_debugger.dll | Bin 1910272 -> 1910272 bytes .../arm64/openxr_runtime_debugger.dll.meta | 2 +- RuntimeDebugger/universalwindows/x64.meta | 2 +- .../x64/openxr_runtime_debugger.dll | Bin 242688 -> 242688 bytes .../x64/openxr_runtime_debugger.dll.meta | 2 +- RuntimeDebugger/windows.meta | 2 +- RuntimeDebugger/windows/x64.meta | 2 +- .../windows/x64/openxr_runtime_debugger.dll | Bin 481792 -> 481792 bytes .../x64/openxr_runtime_debugger.dll.meta | 2 +- RuntimeLoaders/android.meta | 2 +- RuntimeLoaders/android/openxr_loader.aar.meta | 2 +- RuntimeLoaders/universalwindows.meta | 2 +- RuntimeLoaders/universalwindows/arm32.meta | 2 +- .../arm32/openxr_loader.dll.meta | 2 +- RuntimeLoaders/universalwindows/arm64.meta | 2 +- .../arm64/openxr_loader.dll.meta | 2 +- RuntimeLoaders/universalwindows/x64.meta | 2 +- .../x64/openxr_loader.dll.meta | 2 +- RuntimeLoaders/windows.meta | 2 +- RuntimeLoaders/windows/x64.meta | 2 +- .../windows/x64/openxr_loader.dll.meta | 2 +- .../InterceptFeaturePlugin/android.meta | 2 +- .../InterceptFeaturePlugin/android/arm64.meta | 2 +- .../universalwindows.meta | 2 +- .../universalwindows/arm32.meta | 2 +- .../universalwindows/arm64.meta | 2 +- .../universalwindows/x64.meta | 2 +- .../InterceptFeaturePlugin/windows.meta | 2 +- .../InterceptFeaturePlugin/windows/x64.meta | 2 +- .../windows/x64/InterceptFeaturePlugin.dll | Bin 97280 -> 97280 bytes .../MeshingFeaturePlugin/android.meta | 2 +- .../MeshingFeaturePlugin/android/arm64.meta | 2 +- .../arm64/libMeshingFeaturePlugin.so.meta | 2 +- .../universalwindows.meta | 2 +- .../universalwindows/arm32.meta | 2 +- .../universalwindows/arm64.meta | 2 +- .../universalwindows/x64.meta | 2 +- .../x64/MeshingFeaturePlugin.dll | Bin 40448 -> 40448 bytes .../MeshingFeaturePlugin/windows.meta | 2 +- .../MeshingFeaturePlugin/windows/x64.meta | 2 +- .../windows/x64/MeshingFeaturePlugin.dll | Bin 123392 -> 123392 bytes .../windows/x64/MeshingFeaturePlugin.dll.meta | 2 +- Tests/Editor/zBuildSamplesYamatoOnly.cs | 5 +- Tests/Runtime/MetaPerformanceMetricsTest.cs | 187 ++++ .../MetaPerformanceMetricsTest.cs.meta | 11 + Tests/Runtime/OpenXRInputTests.cs | 1 + Tests/Runtime/OpenXRRuntimeTests.cs | 110 +- Tests/Runtime/Unity.XR.OpenXR.Tests.asmdef | 3 +- package.json | 11 +- 138 files changed, 2148 insertions(+), 149 deletions(-) rename Documentation~/features/{oculusquest.md => metaquest.md} (83%) create mode 100644 Documentation~/features/metaquesttouchprocontrollerprofile.md create mode 100644 MockRuntime/Native~/mock_runtime/Extensions/mock_meta_performance_metrics.cpp create mode 100644 MockRuntime/Native~/mock_runtime/Extensions/mock_meta_performance_metrics.h create mode 100644 Runtime/Features/Interactions/MetaQuestTouchProControllerProfile.cs create mode 100644 Runtime/Features/Interactions/MetaQuestTouchProControllerProfile.cs.meta create mode 100644 Runtime/WaitForRestartFinish.cs create mode 100644 Runtime/WaitForRestartFinish.cs.meta create mode 100644 Tests/Runtime/MetaPerformanceMetricsTest.cs create mode 100644 Tests/Runtime/MetaPerformanceMetricsTest.cs.meta diff --git a/CHANGELOG.md b/CHANGELOG.md index 1f41d5f..311011d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,12 +4,35 @@ All notable changes to this package will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). +## [1.7.0] - 2023-02-21 + +### Fixed +* Fixed - Meta builds now don't include Bluetooth permissions in Android manifest by default when using Microphone class in script code. +* Fixed crash in OpenXR runtime debugger when cache size is set to 0. +* Fixed OpenXR project validation to check for correct versions of OpenGLES in Unity 2023 and up. +* Fixed crash when runtime reports an invalid view configuration from xrWaitFrame. +* Fixed - OpenXR plugin will only look up functions from supported and enabled extensions. +* Fixed GPU selection in multi-GPU scenarios. + +### Updated +* Updated documentation for the Meta Quest feature. + +### Added +* Added API `OpenXRRuntime.retryInitializationOnFormFactorErrors` to retry xrGetSystem during initialization if xrGetSystem returns a form factor error. +* Enable XR_META_performance_metrics. This enables performance stats for Meta Quest devices on OpenXR. +* Add class MetaQuestTouchProControllerProfile.QuestProTouchController new interaction profile to support Meta Quest pro controllers. +* Added ability for OpenXRFeature derived classes to add Awake() functions. +* Added API `OpenXRInput.GetActionIsActive` to check whether an InputAction has any bindings which are currently active. +* Added API `OpenXRInput.GetActionHandle` to get the action handle of an InputAction and returns 0 if not found. + +## [1.6.1-preview.1] - 2022-12-01 + ## [1.6.0] - 2022-11-29 ### Fixed -* Fixed black game window issue when building a URP project. -* Fixed `InputDevice.TryGetHapticCapabilities` always return True with OpenXR. -* Fixed repeated warnings for failed to restart OpenXR when no HMD is attached. -* Fixed invalid pose values got populated when tracked flags are invalid. +* Fixed issue where game window would show as black in URP. +* Fixed `InputDevice.TryGetHapticCapabilities` always returning True with OpenXR. +* Fixed repeated "Failed to restart OpenXR" warnings when no HMD is attached. +* Fixed invalid pose values getting populated when tracked flags are invalid. * Fixed XR_SPACE_BOUNDS_UNAVAILABLE return code marked as Error in the log. ### Updated diff --git a/ConformanceAutomation/android.meta b/ConformanceAutomation/android.meta index ae906aa..ea68c22 100644 --- a/ConformanceAutomation/android.meta +++ b/ConformanceAutomation/android.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: cfbc27dec15942e180a99ca680337396 +guid: 957f695da8ce4866818b85a08ed718cf folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/ConformanceAutomation/android/arm64.meta b/ConformanceAutomation/android/arm64.meta index c2974d6..9377a8e 100644 --- a/ConformanceAutomation/android/arm64.meta +++ b/ConformanceAutomation/android/arm64.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 65c5b539fcfc46c29211c8c91b1d3db8 +guid: cfd0c1bfd9a4400193e94ff9eb9024d0 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/ConformanceAutomation/android/arm64/ConformanceAutomationExt.so.meta b/ConformanceAutomation/android/arm64/ConformanceAutomationExt.so.meta index f563194..7627649 100644 --- a/ConformanceAutomation/android/arm64/ConformanceAutomationExt.so.meta +++ b/ConformanceAutomation/android/arm64/ConformanceAutomationExt.so.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 796e9d68728f4802980031e1f9fd6498 +guid: 41ccd112329b476b90136b3fdc35f89c PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/ConformanceAutomation/universalwindows.meta b/ConformanceAutomation/universalwindows.meta index 4f6b3ff..8937166 100644 --- a/ConformanceAutomation/universalwindows.meta +++ b/ConformanceAutomation/universalwindows.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: db6f11084d044042b7872e4c209af39f +guid: ff6ed522bce5436a99dad9157214048d folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/ConformanceAutomation/universalwindows/arm32.meta b/ConformanceAutomation/universalwindows/arm32.meta index 9cd20d0..feaffa6 100644 --- a/ConformanceAutomation/universalwindows/arm32.meta +++ b/ConformanceAutomation/universalwindows/arm32.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 41bf2eadf7374d29bb9784c4e4a32857 +guid: 8fc9185aa1f345e9bbd17acba01fc75a folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/ConformanceAutomation/universalwindows/arm32/ConformanceAutomationExt.dll b/ConformanceAutomation/universalwindows/arm32/ConformanceAutomationExt.dll index 22a17ca73c3025080af91ba42c31e66bf9c210c1..b3dd76c00c0413835b1c51487e67f78491ee7536 100644 GIT binary patch delta 59 zcmZpuX{ed-ftg9`@5axa>L7Y@y@n*1o(-WlZ`ZJ75@2NN&DDtB;nOAm@hxAUxYr_W FVF0+#76bqQ delta 59 zcmZpuX{ed-f%%VV>&DNW>L7Y@y@n*1o(-WlZ`ZJ75@al#Mg&zgTX{^m5a2GYq4K)?jVbAkAaGZ34CL>L%gay&q`2oO(k0b(al#Mg52mdfe{&jI1LLIUXQe1c;}&0I?ZJ j1}wMP-e@PYfC<~?2iq&3d+jaCINjFu%4IW$*$+Vg+ZP_T diff --git a/ConformanceAutomation/universalwindows/arm64/ConformanceAutomationExt.dll.meta b/ConformanceAutomation/universalwindows/arm64/ConformanceAutomationExt.dll.meta index 3699d9a..d5e6803 100644 --- a/ConformanceAutomation/universalwindows/arm64/ConformanceAutomationExt.dll.meta +++ b/ConformanceAutomation/universalwindows/arm64/ConformanceAutomationExt.dll.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: bc072079d69f4c119b77caad3de86da8 +guid: 3e847018538e45079ef463e49775c14d PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/ConformanceAutomation/universalwindows/x64.meta b/ConformanceAutomation/universalwindows/x64.meta index e79e358..037a75d 100644 --- a/ConformanceAutomation/universalwindows/x64.meta +++ b/ConformanceAutomation/universalwindows/x64.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: cc87159c50534b9387ca830bf6bc7953 +guid: f1fe2b691388474dac5774e4d9d6e30c folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/ConformanceAutomation/universalwindows/x64/ConformanceAutomationExt.dll b/ConformanceAutomation/universalwindows/x64/ConformanceAutomationExt.dll index b5ae5bec1c8f39f35adb014a10b7ba024c93e862..eae4c157fac9e38c0b8592a1f5c357397d8c7ba7 100644 GIT binary patch delta 103 zcmZpez}PT>al!}YXPSREex9gn4WyG9fPe{zX9MvR7a%qQi7+t0al!}YC#J0%KTp)P2GYq4K)?jVvw?Vu3lJNDL>L%gay&q`2oM{%0 Project Settings**). 2. Select the **XR Plug-in Management** from the list of settings on the left. 3. If necessary, enable **OpenXR** in the list of **Plug-in Providers**. Unity installs the OpenXR plug-in, if not already installed. 4. Select the OpenXR settings page under XR Plug-in Management. 5. Add the **Oculus Touch Controller Profile** to the **Interaction Profiles** list. (You can have multiple profiles enabled in the list, the OpenXR chooses the one to use based on the current device at runtime.) -6. Enable **Oculus Quest Support** under **OpenXR Feature Groups**. +6. Enable **Meta Quest Support** under **OpenXR Feature Groups**. The Android apks that are produced with Quest support enabled can be run on the Quest family of devices. See the [XR](xref:XR) section of the Unity Manual for more information about developing VR games and applications. diff --git a/Documentation~/features/metaquesttouchprocontrollerprofile.md b/Documentation~/features/metaquesttouchprocontrollerprofile.md new file mode 100644 index 0000000..2718d9b --- /dev/null +++ b/Documentation~/features/metaquesttouchprocontrollerprofile.md @@ -0,0 +1,41 @@ +# Meta Quest Pro Touch Controller Profile + +Enables the OpenXR interaction profile for Meta Quest Pro controllers and exposes the `` device layout within the [Unity Input System](https://docs.unity3d.com/Packages/com.unity.inputsystem@1.0/manual/). + +## Available controls + +| OpenXR Path | Unity Control Name | Type | +|----|----|----| +|`/input/thumbstick`| thumbstick | Vector2 | +|`/input/squeeze/value`| grip | Float | +|`/input/squeeze/value`| gripPressed | Float ( float cast to boolean) | +|`/input/menu/click`| menu (Left Hand Only)| Boolean | +|`/input/system/click`| menu (Right Hand Only)| Boolean | +|`/input/a/click`| primaryButton (Right Hand Only) | Boolean | +|`/input/a/touch`| primaryTouched (Right Hand Only) | Boolean | +|`/input/b/click`| secondaryButton (Right Hand Only) | Boolean | +|`/input/b/touch`| secondaryTouched (Right Hand Only) | Boolean | +|`/input/x/click`| primaryButton (Left Hand Only) | Boolean | +|`/input/x/touch`| primaryTouched (Left Hand Only) | Boolean | +|`/input/y/click`| secondaryButton (Left Hand Only) | Boolean | +|`/input/y/touch`| secondaryTouched (Left Hand Only) | Boolean | +|`/input/trigger/value`| trigger | Float | +|`/input/trigger/value`| triggerPressed | Boolean (float cast to boolean) | +|`/input/trigger/touch`| triggerTouched| Boolean (float cast to boolean) | +|`/input/thumbstick/click`| thumbstickClicked | Boolean | +|`/input/thumbstick/touch`| thumbstickTouched | Boolean | +|`/input/thumbrest/touch`| thumbrestTouched | Boolean | +|`/input/grip/pose` | devicePose | Pose | +|`/input/aim/pose` | pointer | Pose | +|`/input/stylus_fb/force` | stylusForce | Float | +|`/input/trigger/curl_fb` | triggerCurl | Float | +|`/input/trigger/slide_fb` | triggerSlide | Float | +|`/input/trigger/proximity_fb` | triggerProximity | Boolean | +|`/input/thumb_fb/proximity_fb` | thumbProximity | Boolean | +|`/output/haptic` | haptic | Vibrate | +|`/output/trigger_haptic_fb` | hapticTrigger | Vibrate | +|`/output/thumb_haptic_fb` | hapticThumb | Vibrate | +| Unity Layout Only | isTracked | Flag Data | +| Unity Layout Only | trackingState | Flag Data | +| Unity Layout Only | devicePosition | Vector3 | +| Unity Layout Only | deviceRotation | Quaternion | \ No newline at end of file diff --git a/Documentation~/index.md b/Documentation~/index.md index 74135e7..79a401c 100644 --- a/Documentation~/index.md +++ b/Documentation~/index.md @@ -17,7 +17,7 @@ Unity's OpenXR plug-in should work with any device that supports conformant Open |Windows Mixed Reality|Windows 64-bit|DX11|Full feature parity via [Mixed Reality OpenXR Plugin for Unity](https://docs.microsoft.com/en-us/windows/mixed-reality/develop/unity/openxr-getting-started)|| |HoloLens 2|UWP arm64|DX11|Full feature parity via [Mixed Reality OpenXR Plugin for Unity](https://docs.microsoft.com/en-us/windows/mixed-reality/develop/unity/openxr-getting-started)|| |Oculus PC + Link|Windows 64-bit|DX11|HMD + Controllers|Oculus Integration package features not available| -|Oculus Quest|Android arm64|Vulkan|HMD + Controllers via [Oculus Quest Support Feature](./features/oculusquest.md)|Oculus Integration package features not available

Not yet recommended for production.| +|Meta Quest|Android arm64|Vulkan|HMD + Controllers via [Meta Quest Support Feature](./features/metaquest.md)| |All other conformant runtimes (eg. SteamVR)|Windows 64-bit|DX11|HMD + Controllers|Given the unbounded combinations of possible hardware/software configurations, Unity is unable to test or guarantee that all configurations will work optimally.

SteamVR Plugin features not available| To help the community as a whole, Unity will continue to submit any runtime issues, and contribute conformance tests and specification changes to the Khronos working group. diff --git a/MetaQuest/Editor/ModifyAndroidManifestMeta.cs b/MetaQuest/Editor/ModifyAndroidManifestMeta.cs index be40cc3..269f01a 100644 --- a/MetaQuest/Editor/ModifyAndroidManifestMeta.cs +++ b/MetaQuest/Editor/ModifyAndroidManifestMeta.cs @@ -146,6 +146,24 @@ private void UpdateOrCreateAttribute(XmlElement xmlParentElement, string tag, st } } + void RemoveNameValueElementInTag(string parentPath, string tag, string name, string value) + { + var xmlNodeList = this.SelectNodes(parentPath + "/" + tag); + + foreach (XmlNode node in xmlNodeList) + { + var attributeList = ((XmlElement)node).Attributes; + + foreach (XmlAttribute attrib in attributeList) + { + if (attrib.Name == name && attrib.Value == value) + { + node.ParentNode?.RemoveChild(node); + } + } + } + } + internal void AddMetaData() { OpenXRSettings androidOpenXRSettings = OpenXRSettings.GetSettingsForBuildTargetGroup(BuildTargetGroup.Android); @@ -195,6 +213,10 @@ internal void AddMetaData() ("version", "1") }); + // if the Microphone class is used in a project, the BLUETOOTH permission is automatically added to the manifest + // we remove it here since it will cause projects to fail Meta cert + // this shouldn't affect Bluetooth HID devices, which don't need the permission + RemoveNameValueElementInTag("/manifest", "uses-permission", "android:name", "android.permission.BLUETOOTH"); } } } diff --git a/MetaQuest/Runtime/MetaQuestFeature.cs b/MetaQuest/Runtime/MetaQuestFeature.cs index f914904..7c71bac 100644 --- a/MetaQuest/Runtime/MetaQuestFeature.cs +++ b/MetaQuest/Runtime/MetaQuestFeature.cs @@ -90,7 +90,7 @@ protected override void GetValidationChecks(List rules, BuildTar { rules.Add(new ValidationRule(this) { - message = "Only the Oculus Touch Interaction Profile is supported right now.", + message = "Only the Oculus Touch Interaction Profile and Meta Quest Pro Touch Interaction Profile are supported right now.", checkPredicate = () => { var settings = OpenXRSettings.GetSettingsForBuildTargetGroup(targetGroup); @@ -103,7 +103,7 @@ protected override void GetValidationChecks(List rules, BuildTar { if (feature.enabled) { - if (feature is OculusTouchControllerProfile) + if ((feature is OculusTouchControllerProfile) || (feature is MetaQuestTouchProControllerProfile)) touchFeatureEnabled = true; else otherInteractionFeatureEnabled = true; @@ -111,18 +111,10 @@ protected override void GetValidationChecks(List rules, BuildTar } return touchFeatureEnabled && !otherInteractionFeatureEnabled; }, - fixIt = () => - { - var settings = OpenXRSettings.GetSettingsForBuildTargetGroup(targetGroup); - if (null == settings) - return; - - foreach (var feature in settings.GetFeatures()) - { - feature.enabled = (feature is OculusTouchControllerProfile); - } - }, error = true, + fixIt = () => { SettingsService.OpenProjectSettings("Project/XR Plug-in Management/OpenXR");}, + fixItAutomatic = false, + fixItMessage = "Open Project Settings to select Oculus Touch or Meta Quest Pro Touch interaction profiles or select both." }); rules.Add(new ValidationRule(this) diff --git a/MockRuntime/MockRuntime.cs b/MockRuntime/MockRuntime.cs index 76909eb..68897ff 100644 --- a/MockRuntime/MockRuntime.cs +++ b/MockRuntime/MockRuntime.cs @@ -458,6 +458,9 @@ protected internal override void GetValidationChecks(List result [DllImport(extLib, EntryPoint = "MockRuntime_RegisterFunctionCallbacks")] private static extern void MockRuntime_RegisterFunctionCallbacks(BeforeFunctionDelegate hookBefore, AfterFunctionDelegate hookAfter); + [DllImport(extLib, EntryPoint = "MockRuntime_MetaPerformanceMetrics_SeedCounterOnce_Float")] + internal static extern void MetaPerformanceMetrics_SeedCounterOnce_Float(string xrPathString, float value, uint unit); + #if UNITY_EDITOR static void UseGenericLoaderAndroid() { diff --git a/MockRuntime/Native~/mock_runtime/Extensions/mock_conformance_automation.cpp b/MockRuntime/Native~/mock_runtime/Extensions/mock_conformance_automation.cpp index 02a463e..a43464a 100644 --- a/MockRuntime/Native~/mock_runtime/Extensions/mock_conformance_automation.cpp +++ b/MockRuntime/Native~/mock_runtime/Extensions/mock_conformance_automation.cpp @@ -122,4 +122,6 @@ bool ConformanceAutomation_IsActive(XrPath interactionProfilePath, XrPath userPa active = s_ext->activeStates.find(std::pair(XR_NULL_PATH, userPath)); return (active != s_ext->activeStates.end()) ? active->second : defaultValue; -} \ No newline at end of file +} + +#undef CHECK_EXT diff --git a/MockRuntime/Native~/mock_runtime/Extensions/mock_meta_performance_metrics.cpp b/MockRuntime/Native~/mock_runtime/Extensions/mock_meta_performance_metrics.cpp new file mode 100644 index 0000000..b0cee0d --- /dev/null +++ b/MockRuntime/Native~/mock_runtime/Extensions/mock_meta_performance_metrics.cpp @@ -0,0 +1,304 @@ +#include "mock_meta_performance_metrics.h" + +#include "../mock.h" +#include + +#define CHECK_EXT() \ + if (nullptr == MockMetaPerformanceMetrics::Instance()) \ + return XR_ERROR_FUNCTION_UNSUPPORTED; + +// storage for static +std::unique_ptr MockMetaPerformanceMetrics::s_ext; + +enum class MockMetaPerformanceMetrics::InternalPaths : int +{ + Invalid = 0, + AppCPUFrametime, + AppGPUFrametime, + AppMotionToPhotonLatency, + CompositorCPUFrametime, + CompositorGPUFrametime, + CompositorDroppedFrameCount, + CompositorSpacewarpMode, + DeviceCPUUtilizationAvg, + DeviceCPUUtilizationWorst, + DeviceGPUUtilization, +}; + +namespace +{ +constexpr char kAppCPUFrametimeStr[] = "/perfmetrics_meta/app/cpu_frametime"; +constexpr char kAppGPUFrametimeStr[] = "/perfmetrics_meta/app/gpu_frametime"; +constexpr char kAppMotionToPhotonLatencyStr[] = "/perfmetrics_meta/app/motion_to_photon_latency"; +constexpr char kCompositorCPUFrametimeStr[] = "/perfmetrics_meta/compositor/cpu_frametime"; +constexpr char kCompositorGPUFrametimeStr[] = "/perfmetrics_meta/compositor/gpu_frametime"; +constexpr char kCompositorDroppedFrameCountStr[] = "/perfmetrics_meta/compositor/dropped_frame_count"; +constexpr char kCompositorSpacewarpModeStr[] = "/perfmetrics_meta/compositor/spacewarp_mode"; +constexpr char kDeviceCPUUtilizationAvgStr[] = "/perfmetrics_meta/device/cpu_utilization_average"; +constexpr char kDeviceCPUUtilizationWorstStr[] = "/perfmetrics_meta/device/cpu_utilization_worst"; +constexpr char kDeviceGPUUtilizationStr[] = "/perfmetrics_meta/device/gpu_utilization"; +} // namespace + +MockMetaPerformanceMetrics::InternalPaths MockMetaPerformanceMetrics::InternalPathFromString( + const std::string& s) +{ + if (s == kAppCPUFrametimeStr) + return InternalPaths::AppCPUFrametime; + if (s == kAppGPUFrametimeStr) + return InternalPaths::AppGPUFrametime; + if (s == kAppMotionToPhotonLatencyStr) + return InternalPaths::AppMotionToPhotonLatency; + if (s == kCompositorCPUFrametimeStr) + return InternalPaths::CompositorCPUFrametime; + if (s == kCompositorGPUFrametimeStr) + return InternalPaths::CompositorGPUFrametime; + if (s == kCompositorDroppedFrameCountStr) + return InternalPaths::CompositorDroppedFrameCount; + if (s == kCompositorSpacewarpModeStr) + return InternalPaths::CompositorSpacewarpMode; + if (s == kDeviceCPUUtilizationAvgStr) + return InternalPaths::DeviceCPUUtilizationAvg; + if (s == kDeviceCPUUtilizationWorstStr) + return InternalPaths::DeviceCPUUtilizationWorst; + if (s == kDeviceGPUUtilizationStr) + return InternalPaths::DeviceGPUUtilization; + return InternalPaths::Invalid; +} + +MockMetaPerformanceMetrics::MockMetaPerformanceMetrics(MockRuntime& runtime, const int numMockCPUs) + : m_NumMockCPUs{numMockCPUs} + , m_Runtime{runtime} +{ + static constexpr const char* k_ListPaths[] = { + kAppCPUFrametimeStr, + kAppGPUFrametimeStr, + kAppMotionToPhotonLatencyStr, + kCompositorCPUFrametimeStr, + kCompositorGPUFrametimeStr, + kCompositorDroppedFrameCountStr, + kCompositorSpacewarpModeStr, + kDeviceCPUUtilizationAvgStr, + kDeviceCPUUtilizationWorstStr, + kDeviceGPUUtilizationStr, + }; + + for (const char* const pathString : k_ListPaths) + { + const XrPath path = runtime.StringToPath(pathString); + m_Paths[path] = InternalPathFromString(pathString); + } + + for (int i = 0; i < m_NumMockCPUs; i++) + { + std::stringstream ss{"/perfmetrics_meta/device/cpu"}; + ss << i << "_utilization"; + + std::string pathString = ss.str(); + const XrPath path = runtime.StringToPath(pathString.c_str()); + m_Paths[path] = InternalPathFromString(pathString); + } +} + +void MockMetaPerformanceMetrics::Init(MockRuntime& runtime, const int numMockCPUs) +{ + s_ext.reset(new MockMetaPerformanceMetrics(runtime, numMockCPUs)); +} + +void MockMetaPerformanceMetrics::Deinit() +{ + s_ext.reset(); +} + +MockMetaPerformanceMetrics* MockMetaPerformanceMetrics::Instance() +{ + return s_ext.get(); +} + +XrResult MockMetaPerformanceMetrics::EnumeratePaths( + XrInstance instance, + uint32_t counterPathCapacityInput, + uint32_t* counterPathCountOutput, + XrPath* counterPaths) +{ + *counterPathCountOutput = static_cast(m_Paths.size()); + if (counterPathCapacityInput >= *counterPathCountOutput) + { + int i = 0; + for (const auto kv : m_Paths) + { + counterPaths[i] = kv.first; + i++; + } + } + return XR_SUCCESS; +} + +XrResult MockMetaPerformanceMetrics::SetState(XrSession session, const XrPerformanceMetricsStateMETA* state) +{ + if (!state || state->type != XR_TYPE_PERFORMANCE_METRICS_STATE_META) + { + return XR_ERROR_VALIDATION_FAILURE; + } + m_Enabled = state->enabled == XR_TRUE; + return XR_SUCCESS; +} + +XrResult MockMetaPerformanceMetrics::GetState(XrSession session, XrPerformanceMetricsStateMETA* state) +{ + if (!state || state->type != XR_TYPE_PERFORMANCE_METRICS_STATE_META) + { + return XR_ERROR_VALIDATION_FAILURE; + } + state->enabled = m_Enabled ? XR_TRUE : XR_FALSE; + return XR_SUCCESS; +} + +XrResult MockMetaPerformanceMetrics::QueryCounter( + XrSession session, + XrPath counterPath, + XrPerformanceMetricsCounterMETA* counter) +{ + if (!m_Enabled || !counter || counter->type != XR_TYPE_PERFORMANCE_METRICS_COUNTER_META) + { + // disabled state return value confirmed by Xiang Wei @ Meta. + return XR_ERROR_VALIDATION_FAILURE; + } + + std::list& values = m_SeededResults[m_Paths[counterPath]]; + if (values.empty()) + { + if (!m_NoResultsSeededWarningShown) + { + m_NoResultsSeededWarningShown = true; + MOCK_TRACE_DEBUG("No results were seeded for the requested stat. If you aren't testing stats, ignore this warning."); + } + *counter = m_DefaultResult.value; + return m_DefaultResult.rv; + } + + // FIFO, fill in the counter struct and return the seeded return value. + *counter = values.front().value; + XrResult rv = values.front().rv; + values.pop_front(); + return rv; +} + +void MockMetaPerformanceMetrics::SeedCounterOnce(const std::string& counterPathString, MockResult result) +{ + const XrPath path = m_Runtime.StringToPath(counterPathString.c_str()); + if (path == XR_NULL_PATH) + { + // providing an invalid path during testing shouldn't happen, kill and warn our dev + // if you want to test whether a path exists, use the runtime functions themselves. + MOCK_TRACE_ERROR("Could not find path %s", counterPathString.c_str()); + return; + } + + if (result.value.type != XR_TYPE_PERFORMANCE_METRICS_COUNTER_META) + { + MOCK_TRACE_ERROR( + "Invalid or no type supplied for XrPerformanceMetricsCounterMETA. Type MUST be" + " XR_TYPE_PERFORMANCE_METRICS_COUNTER_META."); + return; + } + if (result.value.next != nullptr) + { + MOCK_TRACE_ERROR( + "This structure does not currently support chaining (`next` should be `nullptr`)."); + return; + } + std::list& values = m_SeededResults[m_Paths[path]]; + values.push_back(result); +} + +extern "C" XrResult UNITY_INTERFACE_EXPORT XRAPI_PTR +xrEnumeratePerformanceMetricsCounterPathsMETA( + XrInstance instance, + uint32_t counterPathCapacityInput, + uint32_t* counterPathCountOutput, + XrPath* counterPaths) +{ + LOG_FUNC(); + CHECK_RUNTIME(); + CHECK_INSTANCE(instance); + CHECK_EXT(); + MOCK_HOOK_BEFORE(); + + const XrResult result = + MockMetaPerformanceMetrics::Instance()->EnumeratePaths( + instance, + counterPathCapacityInput, + counterPathCountOutput, + counterPaths); + + MOCK_HOOK_AFTER(result); + + return result; +} + +extern "C" XrResult UNITY_INTERFACE_EXPORT XRAPI_PTR +xrSetPerformanceMetricsStateMETA( + XrSession session, + const XrPerformanceMetricsStateMETA* state) +{ + LOG_FUNC(); + CHECK_SESSION(session); + CHECK_EXT(); + MOCK_HOOK_BEFORE(); + + const XrResult result = MockMetaPerformanceMetrics::Instance()->SetState(session, state); + + MOCK_HOOK_AFTER(result); + + return result; +} + +extern "C" XrResult UNITY_INTERFACE_EXPORT XRAPI_PTR +xrGetPerformanceMetricsStateMETA( + XrSession session, + XrPerformanceMetricsStateMETA* state) +{ + LOG_FUNC(); + CHECK_SESSION(session); + CHECK_EXT(); + MOCK_HOOK_BEFORE(); + + const XrResult result = MockMetaPerformanceMetrics::Instance()->GetState(session, state); + + MOCK_HOOK_AFTER(result); + + return result; +} + +extern "C" XrResult UNITY_INTERFACE_EXPORT XRAPI_PTR +xrQueryPerformanceMetricsCounterMETA( + XrSession session, + XrPath counterPath, + XrPerformanceMetricsCounterMETA* counter) +{ + LOG_FUNC(); + CHECK_SESSION(session); + CHECK_EXT(); + MOCK_HOOK_BEFORE(); + + const XrResult result = + MockMetaPerformanceMetrics::Instance()->QueryCounter( + session, + counterPath, + counter); + + MOCK_HOOK_AFTER(result); + + return result; +} + +XrResult MockMetaPerformanceMetrics_GetInstanceProcAddr(const char* name, PFN_xrVoidFunction* function) +{ + GET_PROC_ADDRESS(xrEnumeratePerformanceMetricsCounterPathsMETA) + GET_PROC_ADDRESS(xrSetPerformanceMetricsStateMETA) + GET_PROC_ADDRESS(xrGetPerformanceMetricsStateMETA) + GET_PROC_ADDRESS(xrQueryPerformanceMetricsCounterMETA) + return XR_ERROR_FUNCTION_UNSUPPORTED; +} + +#undef CHECK_EXT diff --git a/MockRuntime/Native~/mock_runtime/Extensions/mock_meta_performance_metrics.h b/MockRuntime/Native~/mock_runtime/Extensions/mock_meta_performance_metrics.h new file mode 100644 index 0000000..04c6a85 --- /dev/null +++ b/MockRuntime/Native~/mock_runtime/Extensions/mock_meta_performance_metrics.h @@ -0,0 +1,73 @@ +// Mock extension for XR_META_performance_metrics extension +// https://registry.khronos.org/OpenXR/specs/1.0/html/xrspec.html#XR_META_performance_metrics + +#pragma once + +#include "openxr/openxr.h" +#include +#include +#include +#include +#include + +class MockRuntime; + +class MockMetaPerformanceMetrics +{ +public: + enum class InternalPaths : int; + + struct MockResult + { + XrResult rv; + XrPerformanceMetricsCounterMETA value; + }; + + static void Init(MockRuntime& runtime, const int numMockCPUs); + static void Deinit(); + static MockMetaPerformanceMetrics* Instance(); + + static InternalPaths InternalPathFromString(const std::string& s); + + XrResult EnumeratePaths( + XrInstance instance, + uint32_t counterPathCapacityInput, + uint32_t* counterPathCountOutput, + XrPath* counterPaths); + XrResult SetState(XrSession session, const XrPerformanceMetricsStateMETA* state); + XrResult GetState(XrSession session, XrPerformanceMetricsStateMETA* state); + XrResult QueryCounter( + XrSession session, + XrPath counterPath, + XrPerformanceMetricsCounterMETA* counter); + + void SeedCounterOnce(const std::string& counterPath, MockResult result); + +private: + MockMetaPerformanceMetrics(MockRuntime& runtime, const int numMockCPUs); + + static std::unique_ptr s_ext; + MockRuntime& m_Runtime; + + const int m_NumMockCPUs; + + // we use an ordered set just to keep things consistent for enumeration + std::map m_Paths; + + bool m_Enabled; + bool m_NoResultsSeededWarningShown; + + std::map> m_SeededResults; + MockResult m_DefaultResult{ + XR_SUCCESS, + { + XR_TYPE_PERFORMANCE_METRICS_COUNTER_META, + nullptr, + XR_PERFORMANCE_METRICS_COUNTER_ANY_VALUE_VALID_BIT_META, + XR_PERFORMANCE_METRICS_COUNTER_UNIT_GENERIC_META, + 0, + 0.f, + }}; +}; + +XrResult MockMetaPerformanceMetrics_GetInstanceProcAddr(const char* name, PFN_xrVoidFunction* function); diff --git a/MockRuntime/Native~/mock_runtime/Extensions/mock_msft_secondary_view_configuration.cpp b/MockRuntime/Native~/mock_runtime/Extensions/mock_msft_secondary_view_configuration.cpp index b5a5690..e4c3b46 100644 --- a/MockRuntime/Native~/mock_runtime/Extensions/mock_msft_secondary_view_configuration.cpp +++ b/MockRuntime/Native~/mock_runtime/Extensions/mock_msft_secondary_view_configuration.cpp @@ -52,7 +52,12 @@ XrResult MockRuntime::MSFTSecondaryViewConfiguration_WaitFrame(const XrFrameWait return XR_ERROR_VALIDATION_FAILURE; for (auto& viewConfiguration : secondaryViewConfigurationStates) - viewConfiguration.active = GetMockViewConfiguration(viewConfiguration.viewConfigurationType)->active; + { + if (viewConfiguration.viewConfigurationType != 0) + { + viewConfiguration.active = GetMockViewConfiguration(viewConfiguration.viewConfigurationType)->active; + } + } memcpy(secondaryFrameState->viewConfigurationStates, secondaryViewConfigurationStates.data(), secondaryViewConfigurationStates.size() * sizeof(XrSecondaryViewConfigurationStateMSFT)); @@ -89,6 +94,13 @@ XrResult MockRuntime::MSFTSecondaryViewConfiguration_EndFrame(const XrFrameEndIn XrResult MockRuntime::ActivateSecondaryView(XrViewConfigurationType viewConfigurationType, bool active) { + if (viewConfigurationType == 0) + { + // emulating a bug we saw with microsoft runtime + secondaryViewConfigurationStates.clear(); + secondaryViewConfigurationStates.push_back({XR_TYPE_SECONDARY_VIEW_CONFIGURATION_STATE_MSFT}); + } + MockViewConfiguration* viewConfiguration = GetMockViewConfiguration(viewConfigurationType); if (nullptr == viewConfiguration || (IsSessionRunning() && !viewConfiguration->enabled)) return XR_ERROR_SECONDARY_VIEW_CONFIGURATION_TYPE_NOT_ENABLED_MSFT; diff --git a/MockRuntime/Native~/mock_runtime/mock_api.cpp b/MockRuntime/Native~/mock_runtime/mock_api.cpp index b9d591c..bef8112 100644 --- a/MockRuntime/Native~/mock_runtime/mock_api.cpp +++ b/MockRuntime/Native~/mock_runtime/mock_api.cpp @@ -286,6 +286,23 @@ MOCK_API_TRAMPOLINE(bool, false, MockRuntime_TransitionToState, } #endif +MOCK_API_TRAMPOLINE(void, NO_RETURN(), MockRuntime_MetaPerformanceMetrics_SeedCounterOnce_Float, + (const char* xrPathString, float value, uint32_t unit), + (xrPathString, value, unit)) +#if !TRAMPOLINE +{ + MockMetaPerformanceMetrics::Instance()->SeedCounterOnce( + xrPathString, + {XR_SUCCESS, + {XR_TYPE_PERFORMANCE_METRICS_COUNTER_META, + nullptr, + XR_PERFORMANCE_METRICS_COUNTER_FLOAT_VALUE_VALID_BIT_META, + static_cast(unit), + 0, + value}}); +} +#endif + #if !TRAMPOLINE XrResult GetProcAddrMockAPI(XrInstance instance, const char* name, PFN_xrVoidFunction* function) { @@ -302,6 +319,7 @@ XrResult GetProcAddrMockAPI(XrInstance instance, const char* name, PFN_xrVoidFun GET_PROC_ADDRESS(MockRuntime_RegisterScriptEventCallback) GET_PROC_ADDRESS(MockRuntime_RegisterFunctionCallbacks) GET_PROC_ADDRESS(MockRuntime_TransitionToState) + GET_PROC_ADDRESS(MockRuntime_MetaPerformanceMetrics_SeedCounterOnce_Float) return XR_ERROR_FUNCTION_UNSUPPORTED; } diff --git a/MockRuntime/Native~/mock_runtime/mock_extensions.h b/MockRuntime/Native~/mock_runtime/mock_extensions.h index b533076..783d63e 100644 --- a/MockRuntime/Native~/mock_runtime/mock_extensions.h +++ b/MockRuntime/Native~/mock_runtime/mock_extensions.h @@ -1,5 +1,7 @@ #pragma once +#include "Extensions/mock_meta_performance_metrics.h" + // XR_EXT_conformance_automation struct ConformanceAutomation; diff --git a/MockRuntime/Native~/mock_runtime/mock_loader.cpp b/MockRuntime/Native~/mock_runtime/mock_loader.cpp index a7c23b7..57c4089 100644 --- a/MockRuntime/Native~/mock_runtime/mock_loader.cpp +++ b/MockRuntime/Native~/mock_runtime/mock_loader.cpp @@ -82,6 +82,13 @@ uint64_t s_nextInstanceId = 11; // Start at 11 because 10 is a special test case XR_MSFT_HAND_INTERACTION_EXTENSION_NAME, XR_MSFT_hand_interaction_SPEC_VERSION }, + //To-Do: update to proper ext name when it is released in the openxr spec. + { + XR_TYPE_EXTENSION_PROPERTIES, + nullptr, + "XR_FB_touch_controller_pro", + 1 + }, { XR_TYPE_EXTENSION_PROPERTIES, nullptr, @@ -93,6 +100,12 @@ uint64_t s_nextInstanceId = 11; // Start at 11 because 10 is a special test case nullptr, XR_MSFT_THIRD_PERSON_OBSERVER_PRIVATE_EXTENSION_NAME, XR_MSFT_third_person_observer_private_SPEC_VERSION + }, + { + XR_TYPE_EXTENSION_PROPERTIES, + nullptr, + XR_META_PERFORMANCE_METRICS_EXTENSION_NAME, + XR_META_performance_metrics_SPEC_VERSION } #if defined(XR_USE_GRAPHICS_API_VULKAN) ,{ @@ -237,6 +250,17 @@ extern "C" XrResult UNITY_INTERFACE_EXPORT XRAPI_PTR xrCreateInstance(const XrIn flags |= MR_CREATE_MSFT_HAND_INTERACTION_EXT; continue; } + //To-Do: update to proper ext name when it is released in the openxr spec. + if (strncmp("XR_FB_touch_controller_pro", extension, sizeof("XR_FB_touch_controller_pro")) == 0) + { + flags |= MR_CREATE_FB_TOUCH_CONTROLLER_PRO; + continue; + } + + if (strncmp(XR_META_PERFORMANCE_METRICS_EXTENSION_NAME, extension, sizeof(XR_META_PERFORMANCE_METRICS_EXTENSION_NAME)) == 0) + { + flags |= MR_CREATE_META_PERFORMANCE_METRICS_EXT; + } } if ((flags & MR_CREATE_ALL_GFX_EXT) == 0) diff --git a/MockRuntime/Native~/mock_runtime/mock_runtime.cpp b/MockRuntime/Native~/mock_runtime/mock_runtime.cpp index d5ecc2c..a43f677 100644 --- a/MockRuntime/Native~/mock_runtime/mock_runtime.cpp +++ b/MockRuntime/Native~/mock_runtime/mock_runtime.cpp @@ -35,7 +35,7 @@ MockRuntime::MockRuntime(XrInstance instance, MockRuntimeCreateFlags flags) defaultViewConfig.recommendedSwapchainSampleCount = 1; defaultViewConfig.maxSwapchainSampleCount = 1; - // Initialzie stereo view + // Initialize stereo view MockViewConfiguration stereoViewConfig = {}; stereoViewConfig.primary = true; stereoViewConfig.enabled = true; @@ -91,6 +91,9 @@ MockRuntime::MockRuntime(XrInstance instance, MockRuntimeCreateFlags flags) if ((createFlags & (MR_CREATE_MSFT_THIRD_PERSON_OBSERVER_EXT | MR_CREATE_MSFT_SECONDARY_VIEW_CONFIGURATION_EXT)) == (MR_CREATE_MSFT_THIRD_PERSON_OBSERVER_EXT | MR_CREATE_MSFT_SECONDARY_VIEW_CONFIGURATION_EXT)) MSFTThirdPersonObserver_Init(); + if ((createFlags & MR_CREATE_META_PERFORMANCE_METRICS_EXT) == MR_CREATE_META_PERFORMANCE_METRICS_EXT) + MockMetaPerformanceMetrics::Init(*this, 4); + // Generate the internal strings userPaths = { {"/user/hand/left", "Left Hand", nullptr}, @@ -1675,6 +1678,9 @@ XrResult MockRuntime::GetInstanceProcAddr(const char* name, PFN_xrVoidFunction* if (IsConformanceAutomationEnabled() && XR_SUCCESS == ConformanceAutomation_GetInstanceProcAddr(name, function)) return XR_SUCCESS; + if (MockMetaPerformanceMetrics::Instance() && XR_SUCCESS == MockMetaPerformanceMetrics_GetInstanceProcAddr(name, function)) + return XR_SUCCESS; + return XR_ERROR_FUNCTION_UNSUPPORTED; } diff --git a/MockRuntime/Native~/mock_runtime/mock_runtime.h b/MockRuntime/Native~/mock_runtime/mock_runtime.h index a68434c..1eced4d 100644 --- a/MockRuntime/Native~/mock_runtime/mock_runtime.h +++ b/MockRuntime/Native~/mock_runtime/mock_runtime.h @@ -13,6 +13,8 @@ static const MockRuntimeCreateFlags MR_CREATE_MSFT_FIRST_PERSON_OBSERVER_EXT = 0 static const MockRuntimeCreateFlags MR_CREATE_EYE_GAZE_INTERACTION_EXT = 0x00000200; static const MockRuntimeCreateFlags MR_CREATE_MSFT_HAND_INTERACTION_EXT = 0x00000400; static const MockRuntimeCreateFlags MR_CREATE_MSFT_THIRD_PERSON_OBSERVER_EXT = 0x00000800; +static const MockRuntimeCreateFlags MR_CREATE_FB_TOUCH_CONTROLLER_PRO = 0x00001000; +static const MockRuntimeCreateFlags MR_CREATE_META_PERFORMANCE_METRICS_EXT = 0x00002000; static const MockRuntimeCreateFlags MR_CREATE_ALL_GFX_EXT = MR_CREATE_VULKAN_GFX_EXT | MR_CREATE_NULL_GFX_EXT | MR_CREATE_D3D11_GFX_EXT; diff --git a/MockRuntime/Native~/mock_runtime/mock_runtime_interaction_profiles.cpp b/MockRuntime/Native~/mock_runtime/mock_runtime_interaction_profiles.cpp index 66c0fb8..1d6ba2a 100644 --- a/MockRuntime/Native~/mock_runtime/mock_runtime_interaction_profiles.cpp +++ b/MockRuntime/Native~/mock_runtime/mock_runtime_interaction_profiles.cpp @@ -349,6 +349,68 @@ static std::vector s_InteractionProfiles = { {"/user/hand/right/input/squeeze/value", XR_ACTION_TYPE_FLOAT_INPUT, "Squeeze"}, {"/user/hand/right/input/aim/pose", XR_ACTION_TYPE_POSE_INPUT, "Aim"}, {"/user/hand/right/input/grip/pose", XR_ACTION_TYPE_POSE_INPUT, "Grip"}}}, + + // Meta Quest Pro Touch Controller Profile + { + "Quest Pro Touch Controller", + "/interaction_profiles/facebook/touch_controller_pro", + MR_CREATE_FB_TOUCH_CONTROLLER_PRO, + {"/user/hand/left", + "/user/hand/right"}, + { + {"/user/hand/left/input/x/click", XR_ACTION_TYPE_BOOLEAN_INPUT, "X"}, + {"/user/hand/left/input/x/touch", XR_ACTION_TYPE_BOOLEAN_INPUT, "X Touch"}, + {"/user/hand/left/input/y/click", XR_ACTION_TYPE_BOOLEAN_INPUT, "Y"}, + {"/user/hand/left/input/y/touch", XR_ACTION_TYPE_BOOLEAN_INPUT, "Y Touch"}, + {"/user/hand/left/input/menu/click", XR_ACTION_TYPE_BOOLEAN_INPUT, "Menu"}, + {"/user/hand/left/input/squeeze/value", XR_ACTION_TYPE_FLOAT_INPUT, "Grip"}, + {"/user/hand/left/input/trigger/value", XR_ACTION_TYPE_FLOAT_INPUT, "Trigger"}, + {"/user/hand/left/input/trigger/touch", XR_ACTION_TYPE_BOOLEAN_INPUT, "Touch"}, + {"/user/hand/left/input/thumbstick/x", XR_ACTION_TYPE_FLOAT_INPUT, "Thumbstick X"}, + {"/user/hand/left/input/thumbstick/y", XR_ACTION_TYPE_FLOAT_INPUT, "Thumbstick Y"}, + {"/user/hand/left/input/thumbstick/click", XR_ACTION_TYPE_BOOLEAN_INPUT, "Thumbstick Click"}, + {"/user/hand/left/input/thumbstick/touch", XR_ACTION_TYPE_BOOLEAN_INPUT, "Thumbstick Touch"}, + {"/user/hand/left/input/thumbstick", XR_ACTION_TYPE_VECTOR2F_INPUT, "Thumbstick"}, + {"/user/hand/left/input/thumbrest/touch", XR_ACTION_TYPE_BOOLEAN_INPUT}, + {"/user/hand/left/input/grip/pose", XR_ACTION_TYPE_POSE_INPUT, "Grip"}, + {"/user/hand/left/input/aim/pose", XR_ACTION_TYPE_POSE_INPUT, "Aim"}, + {"/user/hand/left/output/haptic", XR_ACTION_TYPE_VIBRATION_OUTPUT, "Haptic"}, + {"/user/hand/left/input/thumbrest/force", XR_ACTION_TYPE_FLOAT_INPUT, "Thumbrest Force"}, + {"/user/hand/left/input/stylus_fb/force", XR_ACTION_TYPE_FLOAT_INPUT, "Stylus Force"}, + {"/user/hand/left/input/trigger/curl_fb", XR_ACTION_TYPE_FLOAT_INPUT, "Trigger Curl"}, + {"/user/hand/left/input/trigger/slide_fb", XR_ACTION_TYPE_FLOAT_INPUT, "Trigger Slide"}, + {"/user/hand/left/input/trigger/proximity_fb", XR_ACTION_TYPE_BOOLEAN_INPUT, "Trigger Proximity"}, + {"/user/hand/left/input/thumb_fb/proximity_fb", XR_ACTION_TYPE_BOOLEAN_INPUT, "Thumb Proximity"}, + {"/user/hand/left/output/trigger_haptic_fb", XR_ACTION_TYPE_VIBRATION_OUTPUT, "Haptic Trigger"}, + {"/user/hand/left/output/thumb_haptic_fb", XR_ACTION_TYPE_VIBRATION_OUTPUT, "Haptic Thumb"}, + + {"/user/hand/right/input/a/click", XR_ACTION_TYPE_BOOLEAN_INPUT, "A"}, + {"/user/hand/right/input/a/touch", XR_ACTION_TYPE_BOOLEAN_INPUT, "A Touch"}, + {"/user/hand/right/input/b/click", XR_ACTION_TYPE_BOOLEAN_INPUT, "B"}, + {"/user/hand/right/input/b/touch", XR_ACTION_TYPE_BOOLEAN_INPUT, "B Touch"}, + // The system ("Oculus") button is reserved for system applications + {"/user/hand/right/input/system/click", XR_ACTION_TYPE_BOOLEAN_INPUT, "System"}, + {"/user/hand/right/input/squeeze/value", XR_ACTION_TYPE_FLOAT_INPUT, "Grip"}, + {"/user/hand/right/input/trigger/value", XR_ACTION_TYPE_FLOAT_INPUT, "Trigger"}, + {"/user/hand/right/input/trigger/touch", XR_ACTION_TYPE_BOOLEAN_INPUT, "Trigger Touch"}, + {"/user/hand/right/input/thumbstick/x", XR_ACTION_TYPE_FLOAT_INPUT, "Thumbstick X"}, + {"/user/hand/right/input/thumbstick/y", XR_ACTION_TYPE_FLOAT_INPUT, "Thumbstick Y"}, + {"/user/hand/right/input/thumbstick/click", XR_ACTION_TYPE_BOOLEAN_INPUT, "Thumbstick Click"}, + {"/user/hand/right/input/thumbstick/touch", XR_ACTION_TYPE_BOOLEAN_INPUT, "Thumbstick Touch"}, + {"/user/hand/right/input/thumbstick", XR_ACTION_TYPE_VECTOR2F_INPUT, "Thumbstick"}, + {"/user/hand/right/input/thumbrest/touch", XR_ACTION_TYPE_BOOLEAN_INPUT}, + {"/user/hand/right/input/grip/pose", XR_ACTION_TYPE_POSE_INPUT, "Grip"}, + {"/user/hand/right/input/aim/pose", XR_ACTION_TYPE_POSE_INPUT, "Aim"}, + {"/user/hand/right/output/haptic", XR_ACTION_TYPE_VIBRATION_OUTPUT, "Haptic"}, + {"/user/hand/right/input/thumbrest/force", XR_ACTION_TYPE_FLOAT_INPUT, "Thumbrest Force"}, + {"/user/hand/right/input/stylus_fb/force", XR_ACTION_TYPE_FLOAT_INPUT, "Stylus Force"}, + {"/user/hand/right/input/trigger/curl_fb", XR_ACTION_TYPE_FLOAT_INPUT, "Trigger Curl"}, + {"/user/hand/right/input/trigger/slide_fb", XR_ACTION_TYPE_FLOAT_INPUT, "Trigger Slide"}, + {"/user/hand/right/input/trigger/proximity_fb", XR_ACTION_TYPE_BOOLEAN_INPUT, "Trigger Proximity"}, + {"/user/hand/right/input/thumb_fb/proximity_fb", XR_ACTION_TYPE_BOOLEAN_INPUT, "Thumb Proximity"}, + {"/user/hand/right/output/trigger_haptic_fb", XR_ACTION_TYPE_VIBRATION_OUTPUT, "Haptic Trigger"}, + {"/user/hand/right/output/thumb_haptic_fb", XR_ACTION_TYPE_VIBRATION_OUTPUT, "Haptic Thumb"}, + }}, }; void MockRuntime::InitializeInteractionProfiles() diff --git a/MockRuntime/android.meta b/MockRuntime/android.meta index 4988f55..fcba2c8 100644 --- a/MockRuntime/android.meta +++ b/MockRuntime/android.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 50c7d15845b84abcae748d68b9990bfd +guid: 5ef351e83987442c9023f1d17570600c folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/MockRuntime/android/arm64.meta b/MockRuntime/android/arm64.meta index e6d0011..45fe916 100644 --- a/MockRuntime/android/arm64.meta +++ b/MockRuntime/android/arm64.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ddce170ff3f641519a106125b725472b +guid: 0178db5572934885a00b12ac59000066 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/MockRuntime/android/arm64/libmock_api.so b/MockRuntime/android/arm64/libmock_api.so index f994e94921c79fa0cac1ca41c9afbd7d609b5c7c..d40add152a90adf2d4d0d9a46f64abd7b747eb74 100644 GIT binary patch delta 62375 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 delta 61876 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

myBa65 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