Bug 1375060 - Update Oculus headers to match requested API version. r=daoshengmu
authorKearwood "Kip" Gilbert <kgilbert@mozilla.com>
Wed, 21 Jun 2017 15:42:10 -0700
changeset 365537 e8a170f2d33185e6f2bfe1983da0affa7bfb366f
parent 365536 2b190948b81bb6a571630bf16719ecde88f8e3b3
child 365538 a1f253f8a9f93cb804f55acdeb14855e12fe2c2b
push id45300
push userkgilbert@mozilla.com
push dateThu, 22 Jun 2017 15:47:55 +0000
treeherderautoland@e8a170f2d331 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersdaoshengmu
bugs1375060
milestone56.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1375060 - Update Oculus headers to match requested API version. r=daoshengmu MozReview-Commit-ID: KADOmlLm674
gfx/vr/gfxVROculus.cpp
gfx/vr/ovr_capi_dynamic.h
--- a/gfx/vr/gfxVROculus.cpp
+++ b/gfx/vr/gfxVROculus.cpp
@@ -61,53 +61,70 @@ using namespace mozilla::dom;
 
 namespace {
 
 static pfn_ovr_Initialize ovr_Initialize = nullptr;
 static pfn_ovr_Shutdown ovr_Shutdown = nullptr;
 static pfn_ovr_GetLastErrorInfo ovr_GetLastErrorInfo = nullptr;
 static pfn_ovr_GetVersionString ovr_GetVersionString = nullptr;
 static pfn_ovr_TraceMessage ovr_TraceMessage = nullptr;
+static pfn_ovr_IdentifyClient ovr_IdentifyClient = nullptr;
 static pfn_ovr_GetHmdDesc ovr_GetHmdDesc = nullptr;
 static pfn_ovr_GetTrackerCount ovr_GetTrackerCount = nullptr;
 static pfn_ovr_GetTrackerDesc ovr_GetTrackerDesc = nullptr;
 static pfn_ovr_Create ovr_Create = nullptr;
 static pfn_ovr_Destroy ovr_Destroy = nullptr;
 static pfn_ovr_GetSessionStatus ovr_GetSessionStatus = nullptr;
 static pfn_ovr_SetTrackingOriginType ovr_SetTrackingOriginType = nullptr;
 static pfn_ovr_GetTrackingOriginType ovr_GetTrackingOriginType = nullptr;
 static pfn_ovr_RecenterTrackingOrigin ovr_RecenterTrackingOrigin = nullptr;
+static pfn_ovr_SpecifyTrackingOrigin ovr_SpecifyTrackingOrigin = nullptr;
 static pfn_ovr_ClearShouldRecenterFlag ovr_ClearShouldRecenterFlag = nullptr;
 static pfn_ovr_GetTrackingState ovr_GetTrackingState = nullptr;
+static pfn_ovr_GetDevicePoses ovr_GetDevicePoses = nullptr;
 static pfn_ovr_GetTrackerPose ovr_GetTrackerPose = nullptr;
 static pfn_ovr_GetInputState ovr_GetInputState = nullptr;
 static pfn_ovr_GetConnectedControllerTypes ovr_GetConnectedControllerTypes = nullptr;
+static pfn_ovr_GetTouchHapticsDesc ovr_GetTouchHapticsDesc = nullptr;
 static pfn_ovr_SetControllerVibration ovr_SetControllerVibration = nullptr;
+static pfn_ovr_SubmitControllerVibration ovr_SubmitControllerVibration = nullptr;
+static pfn_ovr_GetControllerVibrationState ovr_GetControllerVibrationState = nullptr;
+static pfn_ovr_TestBoundary ovr_TestBoundary = nullptr;
+static pfn_ovr_TestBoundaryPoint ovr_TestBoundaryPoint = nullptr;
+static pfn_ovr_SetBoundaryLookAndFeel ovr_SetBoundaryLookAndFeel = nullptr;
+static pfn_ovr_ResetBoundaryLookAndFeel ovr_ResetBoundaryLookAndFeel = nullptr;
+static pfn_ovr_GetBoundaryGeometry ovr_GetBoundaryGeometry = nullptr;
+static pfn_ovr_GetBoundaryDimensions ovr_GetBoundaryDimensions = nullptr;
+static pfn_ovr_GetBoundaryVisible ovr_GetBoundaryVisible = nullptr;
+static pfn_ovr_RequestBoundaryVisible ovr_RequestBoundaryVisible = nullptr;
 static pfn_ovr_GetTextureSwapChainLength ovr_GetTextureSwapChainLength = nullptr;
 static pfn_ovr_GetTextureSwapChainCurrentIndex ovr_GetTextureSwapChainCurrentIndex = nullptr;
 static pfn_ovr_GetTextureSwapChainDesc ovr_GetTextureSwapChainDesc = nullptr;
 static pfn_ovr_CommitTextureSwapChain ovr_CommitTextureSwapChain = nullptr;
 static pfn_ovr_DestroyTextureSwapChain ovr_DestroyTextureSwapChain = nullptr;
 static pfn_ovr_DestroyMirrorTexture ovr_DestroyMirrorTexture = nullptr;
 static pfn_ovr_GetFovTextureSize ovr_GetFovTextureSize = nullptr;
 static pfn_ovr_GetRenderDesc ovr_GetRenderDesc = nullptr;
 static pfn_ovr_SubmitFrame ovr_SubmitFrame = nullptr;
+static pfn_ovr_GetPerfStats ovr_GetPerfStats = nullptr;
+static pfn_ovr_ResetPerfStats ovr_ResetPerfStats = nullptr;
 static pfn_ovr_GetPredictedDisplayTime ovr_GetPredictedDisplayTime = nullptr;
 static pfn_ovr_GetTimeInSeconds ovr_GetTimeInSeconds = nullptr;
 static pfn_ovr_GetBool ovr_GetBool = nullptr;
 static pfn_ovr_SetBool ovr_SetBool = nullptr;
 static pfn_ovr_GetInt ovr_GetInt = nullptr;
 static pfn_ovr_SetInt ovr_SetInt = nullptr;
 static pfn_ovr_GetFloat ovr_GetFloat = nullptr;
 static pfn_ovr_SetFloat ovr_SetFloat = nullptr;
 static pfn_ovr_GetFloatArray ovr_GetFloatArray = nullptr;
 static pfn_ovr_SetFloatArray ovr_SetFloatArray = nullptr;
 static pfn_ovr_GetString ovr_GetString = nullptr;
 static pfn_ovr_SetString ovr_SetString = nullptr;
-static pfn_ovr_GetBoundaryDimensions ovr_GetBoundaryDimensions = nullptr;
+static pfn_ovr_GetExternalCameras ovr_GetExternalCameras = nullptr;
+static pfn_ovr_SetExternalCameraProperties ovr_SetExternalCameraProperties = nullptr;
 
 #ifdef XP_WIN
 static pfn_ovr_CreateTextureSwapChainDX ovr_CreateTextureSwapChainDX = nullptr;
 static pfn_ovr_GetTextureSwapChainBufferDX ovr_GetTextureSwapChainBufferDX = nullptr;
 static pfn_ovr_CreateMirrorTextureDX ovr_CreateMirrorTextureDX = nullptr;
 static pfn_ovr_GetMirrorTextureBufferDX ovr_GetMirrorTextureBufferDX = nullptr;
 #endif
 
@@ -235,53 +252,70 @@ VRSystemManagerOculus::LoadOvrLib()
     if (!_x) { printf_stderr(#_x " symbol missing\n"); goto fail; }       \
   } while (0)
 
   REQUIRE_FUNCTION(ovr_Initialize);
   REQUIRE_FUNCTION(ovr_Shutdown);
   REQUIRE_FUNCTION(ovr_GetLastErrorInfo);
   REQUIRE_FUNCTION(ovr_GetVersionString);
   REQUIRE_FUNCTION(ovr_TraceMessage);
+  REQUIRE_FUNCTION(ovr_IdentifyClient);
   REQUIRE_FUNCTION(ovr_GetHmdDesc);
   REQUIRE_FUNCTION(ovr_GetTrackerCount);
   REQUIRE_FUNCTION(ovr_GetTrackerDesc);
   REQUIRE_FUNCTION(ovr_Create);
   REQUIRE_FUNCTION(ovr_Destroy);
   REQUIRE_FUNCTION(ovr_GetSessionStatus);
   REQUIRE_FUNCTION(ovr_SetTrackingOriginType);
   REQUIRE_FUNCTION(ovr_GetTrackingOriginType);
   REQUIRE_FUNCTION(ovr_RecenterTrackingOrigin);
+  REQUIRE_FUNCTION(ovr_SpecifyTrackingOrigin);
   REQUIRE_FUNCTION(ovr_ClearShouldRecenterFlag);
   REQUIRE_FUNCTION(ovr_GetTrackingState);
+  REQUIRE_FUNCTION(ovr_GetDevicePoses);
   REQUIRE_FUNCTION(ovr_GetTrackerPose);
   REQUIRE_FUNCTION(ovr_GetInputState);
   REQUIRE_FUNCTION(ovr_GetConnectedControllerTypes);
+  REQUIRE_FUNCTION(ovr_GetTouchHapticsDesc);
   REQUIRE_FUNCTION(ovr_SetControllerVibration);
+  REQUIRE_FUNCTION(ovr_SubmitControllerVibration);
+  REQUIRE_FUNCTION(ovr_GetControllerVibrationState);
+  REQUIRE_FUNCTION(ovr_TestBoundary);
+  REQUIRE_FUNCTION(ovr_TestBoundaryPoint);
+  REQUIRE_FUNCTION(ovr_SetBoundaryLookAndFeel);
+  REQUIRE_FUNCTION(ovr_ResetBoundaryLookAndFeel);
+  REQUIRE_FUNCTION(ovr_GetBoundaryGeometry);
+  REQUIRE_FUNCTION(ovr_GetBoundaryDimensions);
+  REQUIRE_FUNCTION(ovr_GetBoundaryVisible);
+  REQUIRE_FUNCTION(ovr_RequestBoundaryVisible);
   REQUIRE_FUNCTION(ovr_GetTextureSwapChainLength);
   REQUIRE_FUNCTION(ovr_GetTextureSwapChainCurrentIndex);
   REQUIRE_FUNCTION(ovr_GetTextureSwapChainDesc);
   REQUIRE_FUNCTION(ovr_CommitTextureSwapChain);
   REQUIRE_FUNCTION(ovr_DestroyTextureSwapChain);
   REQUIRE_FUNCTION(ovr_DestroyMirrorTexture);
   REQUIRE_FUNCTION(ovr_GetFovTextureSize);
   REQUIRE_FUNCTION(ovr_GetRenderDesc);
   REQUIRE_FUNCTION(ovr_SubmitFrame);
+  REQUIRE_FUNCTION(ovr_GetPerfStats);
+  REQUIRE_FUNCTION(ovr_ResetPerfStats);
   REQUIRE_FUNCTION(ovr_GetPredictedDisplayTime);
   REQUIRE_FUNCTION(ovr_GetTimeInSeconds);
   REQUIRE_FUNCTION(ovr_GetBool);
   REQUIRE_FUNCTION(ovr_SetBool);
   REQUIRE_FUNCTION(ovr_GetInt);
   REQUIRE_FUNCTION(ovr_SetInt);
   REQUIRE_FUNCTION(ovr_GetFloat);
   REQUIRE_FUNCTION(ovr_SetFloat);
   REQUIRE_FUNCTION(ovr_GetFloatArray);
   REQUIRE_FUNCTION(ovr_SetFloatArray);
   REQUIRE_FUNCTION(ovr_GetString);
   REQUIRE_FUNCTION(ovr_SetString);
-  REQUIRE_FUNCTION(ovr_GetBoundaryDimensions);
+  REQUIRE_FUNCTION(ovr_GetExternalCameras);
+  REQUIRE_FUNCTION(ovr_SetExternalCameraProperties);
 
 #ifdef XP_WIN
 
   REQUIRE_FUNCTION(ovr_CreateTextureSwapChainDX);
   REQUIRE_FUNCTION(ovr_GetTextureSwapChainBufferDX);
   REQUIRE_FUNCTION(ovr_CreateMirrorTextureDX);
   REQUIRE_FUNCTION(ovr_GetMirrorTextureBufferDX);
 
--- a/gfx/vr/ovr_capi_dynamic.h
+++ b/gfx/vr/ovr_capi_dynamic.h
@@ -54,25 +54,24 @@
 #endif
 
 #ifdef __cplusplus 
 extern "C" {
 #endif
 
 typedef int32_t ovrResult;
 
+
+
 typedef enum {
   ovrSuccess = 0,
-  ovrSuccess_NotVisible = 1000,
-  ovrSuccess_HMDFirmwareMismatch = 4100,
-  ovrSuccess_TrackerFirmwareMismatch = 4101,
-  ovrSuccess_ControllerFirmwareMismatch = 4104,
 } ovrSuccessType;
 
 typedef char ovrBool;
+typedef struct OVR_ALIGNAS(4) { float r, g, b, a; } ovrColorf;
 typedef struct OVR_ALIGNAS(4) { int x, y; } ovrVector2i;
 typedef struct OVR_ALIGNAS(4) { int w, h; } ovrSizei;
 typedef struct OVR_ALIGNAS(4) { ovrVector2i Pos; ovrSizei Size; } ovrRecti;
 typedef struct OVR_ALIGNAS(4) { float x, y, z, w; } ovrQuatf;
 typedef struct OVR_ALIGNAS(4) { float x, y; } ovrVector2f;
 typedef struct OVR_ALIGNAS(4) { float x, y, z; } ovrVector3f;
 typedef struct OVR_ALIGNAS(4) { float M[4][4]; } ovrMatrix4f;
 
@@ -162,16 +161,22 @@ typedef struct OVR_ALIGNAS(OVR_PTR_SIZE)
   ovrFovPort MaxEyeFov[ovrEye_Count];
   ovrSizei Resolution;
   float DisplayRefreshRate;
   OVR_ON64(OVR_UNUSED_STRUCT_PAD(pad1, 4))
 } ovrHmdDesc;
 
 typedef struct ovrHmdStruct* ovrSession;
 
+#ifdef XP_WIN
+typedef uint32_t ovrProcessId;
+#else
+typedef pid_t ovrProcessId;
+#endif
+
 typedef enum {
   ovrStatus_OrientationTracked    = 0x0001,
   ovrStatus_PositionTracked       = 0x0002,
   ovrStatus_EnumSize              = 0x7fffffff
 } ovrStatusBits;
 
 typedef struct OVR_ALIGNAS(OVR_PTR_SIZE) {
   float FrustumHFovInRadians;
@@ -210,17 +215,17 @@ typedef struct OVR_ALIGNAS(4) {
 
 typedef struct OVR_ALIGNAS(4) {
   float Projection22;
   float Projection23;
   float Projection32;
 } ovrTimewarpProjectionDesc;
 
 typedef struct OVR_ALIGNAS(4) {
-  ovrVector3f HmdToEyeViewOffset[ovrEye_Count];
+  ovrVector3f HmdToEyeOffset[ovrEye_Count];
   float HmdSpaceToWorldScaleInMeters;
 } ovrViewScaleDesc;
 
 typedef enum {
   ovrTexture_2D,
   ovrTexture_2D_External,
   ovrTexture_Cube,
   ovrTexture_Count,
@@ -231,42 +236,43 @@ typedef enum {
   ovrTextureBind_None,
   ovrTextureBind_DX_RenderTarget = 0x0001,
   ovrTextureBind_DX_UnorderedAccess = 0x0002,
   ovrTextureBind_DX_DepthStencil = 0x0004,
   ovrTextureBind_EnumSize = 0x7fffffff
 } ovrTextureBindFlags;
 
 typedef enum {
-  OVR_FORMAT_UNKNOWN,
-  OVR_FORMAT_B5G6R5_UNORM,
-  OVR_FORMAT_B5G5R5A1_UNORM,
-  OVR_FORMAT_B4G4R4A4_UNORM,
-  OVR_FORMAT_R8G8B8A8_UNORM,
-  OVR_FORMAT_R8G8B8A8_UNORM_SRGB,
-  OVR_FORMAT_B8G8R8A8_UNORM,
-  OVR_FORMAT_B8G8R8A8_UNORM_SRGB,
-  OVR_FORMAT_B8G8R8X8_UNORM,
-  OVR_FORMAT_B8G8R8X8_UNORM_SRGB,
-  OVR_FORMAT_R16G16B16A16_FLOAT,
-  OVR_FORMAT_D16_UNORM,
-  OVR_FORMAT_D24_UNORM_S8_UINT,
-  OVR_FORMAT_D32_FLOAT,
-  OVR_FORMAT_D32_FLOAT_S8X24_UINT,
-  OVR_FORMAT_BC1_UNORM,
-  OVR_FORMAT_BC1_UNORM_SRGB,
-  OVR_FORMAT_BC2_UNORM,
-  OVR_FORMAT_BC2_UNORM_SRGB,
-  OVR_FORMAT_BC3_UNORM,
-  OVR_FORMAT_BC3_UNORM_SRGB,
-  OVR_FORMAT_BC6H_UF16,
-  OVR_FORMAT_BC6H_SF16,
-  OVR_FORMAT_BC7_UNORM,
-  OVR_FORMAT_BC7_UNORM_SRGB,
-  OVR_FORMAT_R11G11B10_FLOAT,
+  OVR_FORMAT_UNKNOWN = 0,
+  OVR_FORMAT_B5G6R5_UNORM = 1,
+  OVR_FORMAT_B5G5R5A1_UNORM = 2,
+  OVR_FORMAT_B4G4R4A4_UNORM = 3,
+  OVR_FORMAT_R8G8B8A8_UNORM = 4,
+  OVR_FORMAT_R8G8B8A8_UNORM_SRGB = 5,
+  OVR_FORMAT_B8G8R8A8_UNORM = 6,
+  OVR_FORMAT_B8G8R8A8_UNORM_SRGB = 7,
+  OVR_FORMAT_B8G8R8X8_UNORM = 8,
+  OVR_FORMAT_B8G8R8X8_UNORM_SRGB = 9,
+  OVR_FORMAT_R16G16B16A16_FLOAT = 10,
+  OVR_FORMAT_R11G11B10_FLOAT = 25,
+  OVR_FORMAT_D16_UNORM = 11,
+  OVR_FORMAT_D24_UNORM_S8_UINT = 12,
+  OVR_FORMAT_D32_FLOAT = 13,
+  OVR_FORMAT_D32_FLOAT_S8X24_UINT = 14,
+  OVR_FORMAT_BC1_UNORM = 15,
+  OVR_FORMAT_BC1_UNORM_SRGB = 16,
+  OVR_FORMAT_BC2_UNORM = 17,
+  OVR_FORMAT_BC2_UNORM_SRGB = 18,
+  OVR_FORMAT_BC3_UNORM = 19,
+  OVR_FORMAT_BC3_UNORM_SRGB = 20,
+  OVR_FORMAT_BC6H_UF16 = 21,
+  OVR_FORMAT_BC6H_SF16 = 22,
+  OVR_FORMAT_BC7_UNORM = 23,
+  OVR_FORMAT_BC7_UNORM_SRGB = 24,
+
   OVR_FORMAT_ENUMSIZE = 0x7fffffff
 } ovrTextureFormat;
 
 typedef enum {
   ovrTextureMisc_None,
   ovrTextureMisc_DX_Typeless = 0x0001,
   ovrTextureMisc_AllowGenerateMips = 0x0002,
   ovrTextureMisc_ProtectedContent = 0x0004,
@@ -286,42 +292,43 @@ typedef struct {
   unsigned int BindFlags;
 } ovrTextureSwapChainDesc;
 
 typedef struct {
   ovrTextureFormat Format;
   int Width;
   int Height;
   unsigned int MiscFlags;
+  unsigned int MirrorOptions;
 } ovrMirrorTextureDesc;
 
-typedef void* ovrTextureSwapChain;
+typedef struct ovrTextureSwapChainData* ovrTextureSwapChain;
 typedef struct ovrMirrorTextureData* ovrMirrorTexture;
 
 typedef enum {
   ovrButton_A = 0x00000001,
   ovrButton_B = 0x00000002,
   ovrButton_RThumb = 0x00000004,
   ovrButton_RShoulder = 0x00000008,
-  ovrButton_RMask = ovrButton_A | ovrButton_B | ovrButton_RThumb | ovrButton_RShoulder,
   ovrButton_X = 0x00000100,
   ovrButton_Y = 0x00000200,
   ovrButton_LThumb = 0x00000400,
   ovrButton_LShoulder = 0x00000800,
-  ovrButton_LMask = ovrButton_X | ovrButton_Y | ovrButton_LThumb | ovrButton_LShoulder,
   ovrButton_Up = 0x00010000,
   ovrButton_Down = 0x00020000,
   ovrButton_Left = 0x00040000,
   ovrButton_Right = 0x00080000,
   ovrButton_Enter = 0x00100000,
   ovrButton_Back = 0x00200000,
   ovrButton_VolUp = 0x00400000,
   ovrButton_VolDown = 0x00800000,
   ovrButton_Home = 0x01000000,
   ovrButton_Private = ovrButton_VolUp | ovrButton_VolDown | ovrButton_Home,
+  ovrButton_RMask = ovrButton_A | ovrButton_B | ovrButton_RThumb | ovrButton_RShoulder,
+  ovrButton_LMask = ovrButton_X | ovrButton_Y | ovrButton_LThumb | ovrButton_LShoulder | ovrButton_Enter,
   ovrButton_EnumSize = 0x7fffffff
 } ovrButton;
 
 typedef enum {
   ovrTouch_A = ovrButton_A,
   ovrTouch_B = ovrButton_B,
   ovrTouch_RThumb = ovrButton_RThumb,
   ovrTouch_RThumbRest = 0x00000008,
@@ -330,40 +337,44 @@ typedef enum {
   ovrTouch_X = ovrButton_X,
   ovrTouch_Y = ovrButton_Y,
   ovrTouch_LThumb = ovrButton_LThumb,
   ovrTouch_LThumbRest = 0x00000800,
   ovrTouch_LIndexTrigger = 0x00001000,
   ovrTouch_LButtonMask = ovrTouch_X | ovrTouch_Y | ovrTouch_LThumb | ovrTouch_LThumbRest | ovrTouch_LIndexTrigger,
   ovrTouch_RIndexPointing = 0x00000020,
   ovrTouch_RThumbUp = 0x00000040,
-  ovrTouch_RPoseMask = ovrTouch_RIndexPointing | ovrTouch_RThumbUp,
   ovrTouch_LIndexPointing = 0x00002000,
   ovrTouch_LThumbUp = 0x00004000,
+  ovrTouch_RPoseMask = ovrTouch_RIndexPointing | ovrTouch_RThumbUp,
   ovrTouch_LPoseMask = ovrTouch_LIndexPointing | ovrTouch_LThumbUp,
   ovrTouch_EnumSize = 0x7fffffff
 } ovrTouch;
 
 typedef struct OVR_ALIGNAS(OVR_PTR_SIZE) {
   int SampleRateHz;
   int SampleSizeInBytes;
   int QueueMinSizeToAvoidStarvation;
   int SubmitMinSamples;
   int SubmitMaxSamples;
   int SubmitOptimalSamples;
 } ovrTouchHapticsDesc;
 
 typedef enum {
-  ovrControllerType_None = 0x00,
-  ovrControllerType_LTouch = 0x01,
-  ovrControllerType_RTouch = 0x02,
-  ovrControllerType_Touch = 0x03,
-  ovrControllerType_Remote = 0x04,
-  ovrControllerType_XBox = 0x10,
-  ovrControllerType_Active = 0xff,
+  ovrControllerType_None = 0x0000,
+  ovrControllerType_LTouch = 0x0001,
+  ovrControllerType_RTouch = 0x0002,
+  ovrControllerType_Touch = (ovrControllerType_LTouch | ovrControllerType_RTouch),
+  ovrControllerType_Remote = 0x0004,
+  ovrControllerType_XBox = 0x0010,
+  ovrControllerType_Object0 = 0x0100,
+  ovrControllerType_Object1 = 0x0200,
+  ovrControllerType_Object2 = 0x0400,
+  ovrControllerType_Object3 = 0x0800,
+  ovrControllerType_Active = 0xffffffff,
   ovrControllerType_EnumSize = 0x7fffffff
 } ovrControllerType;
 
 typedef enum {
   ovrHapticsBufferSubmit_Enqueue
 } ovrHapticsBufferSubmitMode;
 
 typedef struct {
@@ -373,24 +384,45 @@ typedef struct {
 } ovrHapticsBuffer;
 
 typedef struct {
   int RemainingQueueSpace;
   int SamplesQueued;
 } ovrHapticsPlaybackState;
 
 typedef enum {
+  ovrTrackedDevice_None = 0x0000,
   ovrTrackedDevice_HMD = 0x0001,
   ovrTrackedDevice_LTouch = 0x0002,
   ovrTrackedDevice_RTouch = 0x0004,
-  ovrTrackedDevice_Touch = 0x0006,
+  ovrTrackedDevice_Touch = (ovrTrackedDevice_LTouch | ovrTrackedDevice_RTouch),
+  ovrTrackedDevice_Object0 = 0x0010,
+  ovrTrackedDevice_Object1 = 0x0020,
+  ovrTrackedDevice_Object2 = 0x0040,
+  ovrTrackedDevice_Object3 = 0x0080,
   ovrTrackedDevice_All = 0xFFFF,
 } ovrTrackedDeviceType;
 
 typedef enum {
+  ovrBoundary_Outer = 0x0001,
+  ovrBoundary_PlayArea = 0x0100,
+} ovrBoundaryType;
+
+typedef struct {
+  ovrColorf Color;
+} ovrBoundaryLookAndFeel;
+
+typedef struct {
+  ovrBool IsTriggering;
+  float ClosestDistance;
+  ovrVector3f ClosestPoint;
+  ovrVector3f ClosestPointNormal;
+} ovrBoundaryTestResult;
+
+typedef enum {
   ovrHand_Left = 0,
   ovrHand_Right = 1,
   ovrHand_Count = 2,
   ovrHand_EnumSize = 0x7fffffff
 } ovrHandType;
 
 typedef struct {
   double TimeInSeconds;
@@ -398,18 +430,58 @@ typedef struct {
   unsigned int Touches;
   float IndexTrigger[ovrHand_Count];
   float HandTrigger[ovrHand_Count];
   ovrVector2f Thumbstick[ovrHand_Count];
   ovrControllerType ControllerType;
   float IndexTriggerNoDeadzone[ovrHand_Count];
   float HandTriggerNoDeadzone[ovrHand_Count];
   ovrVector2f ThumbstickNoDeadzone[ovrHand_Count];
+  float IndexTriggerRaw[ovrHand_Count];
+  float HandTriggerRaw[ovrHand_Count];
+  ovrVector2f ThumbstickRaw[ovrHand_Count];
 } ovrInputState;
 
+typedef struct {
+  double LastChangedTime;
+  ovrFovPort FOVPort;
+  float VirtualNearPlaneDistanceMeters;
+  float VirtualFarPlaneDistanceMeters;
+  ovrSizei ImageSensorPixelResolution;
+  ovrMatrix4f LensDistortionMatrix;
+  double ExposurePeriodSeconds;
+  double ExposureDurationSeconds;
+} ovrCameraIntrinsics;
+
+typedef enum {
+  ovrCameraStatus_None = 0x0,
+  ovrCameraStatus_Connected = 0x1,
+  ovrCameraStatus_Calibrating = 0x2,
+  ovrCameraStatus_CalibrationFailed = 0x4,
+  ovrCameraStatus_Calibrated = 0x8,
+  ovrCameraStatus_EnumSize = 0x7fffffff
+} ovrCameraStatusFlags;
+
+typedef struct {
+  double LastChangedTimeSeconds;
+  unsigned int CameraStatusFlags;
+  ovrTrackedDeviceType AttachedToDevice;
+  ovrPosef RelativePose;
+  double LastExposureTimeSeconds;
+  double ExposureLatencySeconds;
+  double AdditionalLatencySeconds;
+} ovrCameraExtrinsics;
+
+#define OVR_EXTERNAL_CAMERA_NAME_SIZE 32
+typedef struct {
+  char Name[OVR_EXTERNAL_CAMERA_NAME_SIZE];
+  ovrCameraIntrinsics Intrinsics;
+  ovrCameraExtrinsics Extrinsics;
+} ovrExternalCamera;
+
 typedef enum {
   ovrInit_Debug          = 0x00000001,
   ovrInit_RequestVersion = 0x00000004,
   ovrInit_Invisible      = 0x00000010,
   ovrInit_MixedRendering = 0x00000020,
   ovrinit_WritableBits   = 0x00ffffff,
   ovrInit_EnumSize       = 0x7fffffff
 } ovrInitFlags;
@@ -438,42 +510,74 @@ typedef void (OVR_PFN* pfn_ovr_Shutdown)
 typedef struct {
   ovrResult Result;
   char      ErrorString[512];
 } ovrErrorInfo;
 
 typedef void (OVR_PFN* pfn_ovr_GetLastErrorInfo)(ovrErrorInfo* errorInfo);
 typedef const char* (OVR_PFN* pfn_ovr_GetVersionString)();
 typedef int (OVR_PFN* pfn_ovr_TraceMessage)(int level, const char* message);
+typedef ovrResult (OVR_PFN* pfn_ovr_IdentifyClient)(const char* identity);
 typedef ovrHmdDesc (OVR_PFN* pfn_ovr_GetHmdDesc)(ovrSession session);
 typedef unsigned int (OVR_PFN* pfn_ovr_GetTrackerCount)(ovrSession session);
-typedef ovrTrackerDesc* (OVR_PFN* pfn_ovr_GetTrackerDesc)(ovrSession session, unsigned int trackerDescIndex);
+typedef ovrTrackerDesc (OVR_PFN* pfn_ovr_GetTrackerDesc)(ovrSession session, unsigned int trackerDescIndex);
 typedef ovrResult (OVR_PFN* pfn_ovr_Create)(ovrSession* pSession, ovrGraphicsLuid* pLuid);
 typedef void (OVR_PFN* pfn_ovr_Destroy)(ovrSession session);
 
 typedef struct {
   ovrBool IsVisible;
   ovrBool HmdPresent;
   ovrBool HmdMounted;
   ovrBool DisplayLost;
   ovrBool ShouldQuit;
   ovrBool ShouldRecenter;
 } ovrSessionStatus;
 
 typedef ovrResult (OVR_PFN* pfn_ovr_GetSessionStatus)(ovrSession session, ovrSessionStatus* sessionStatus);
-
 typedef ovrResult (OVR_PFN* pfn_ovr_SetTrackingOriginType)(ovrSession session, ovrTrackingOrigin origin);
 typedef ovrTrackingOrigin (OVR_PFN* pfn_ovr_GetTrackingOriginType)(ovrSession session);
 typedef ovrResult (OVR_PFN* pfn_ovr_RecenterTrackingOrigin)(ovrSession session);
+typedef ovrResult (OVR_PFN* pfn_ovr_SpecifyTrackingOrigin)(ovrSession session, ovrPosef originPose);
 typedef void (OVR_PFN* pfn_ovr_ClearShouldRecenterFlag)(ovrSession session);
 typedef ovrTrackingState (OVR_PFN* pfn_ovr_GetTrackingState)(ovrSession session, double absTime, ovrBool latencyMarker);
+typedef ovrResult  (OVR_PFN* pfn_ovr_GetDevicePoses)(ovrSession session,
+                                                     ovrTrackedDeviceType* deviceTypes,
+                                                     int deviceCount,
+                                                     double absTime,
+                                                     ovrPoseStatef* outDevicePoses);
 typedef ovrTrackerPose (OVR_PFN* pfn_ovr_GetTrackerPose)(ovrSession session, unsigned int trackerPoseIndex);
 typedef ovrResult (OVR_PFN* pfn_ovr_GetInputState)(ovrSession session, ovrControllerType controllerType, ovrInputState* inputState);
 typedef unsigned int (OVR_PFN* pfn_ovr_GetConnectedControllerTypes)(ovrSession session);
+typedef ovrTouchHapticsDesc (OVR_PFN* pfn_ovr_GetTouchHapticsDesc)(ovrSession session, ovrControllerType controllerType);
 typedef ovrResult (OVR_PFN* pfn_ovr_SetControllerVibration)(ovrSession session, ovrControllerType controllerType, float frequency, float amplitude);
+typedef ovrResult (OVR_PFN* pfn_ovr_SubmitControllerVibration)(ovrSession session,
+                                                               ovrControllerType controllerType,
+                                                               const ovrHapticsBuffer* buffer);
+typedef ovrResult (OVR_PFN* pfn_ovr_GetControllerVibrationState)(ovrSession session,
+                                                                 ovrControllerType controllerType,
+                                                                 ovrHapticsPlaybackState* outState);
+typedef ovrResult (OVR_PFN* pfn_ovr_TestBoundary)(ovrSession session,
+                                                  ovrTrackedDeviceType deviceBitmask,
+                                                  ovrBoundaryType boundaryType,
+                                                  ovrBoundaryTestResult* outTestResult);
+typedef ovrResult (OVR_PFN* pfn_ovr_TestBoundaryPoint)(ovrSession session,
+                                                       const ovrVector3f* point,
+                                                       ovrBoundaryType singleBoundaryType,
+                                                       ovrBoundaryTestResult* outTestResult);
+typedef ovrResult (OVR_PFN* pfn_ovr_SetBoundaryLookAndFeel)(ovrSession session, const ovrBoundaryLookAndFeel* lookAndFeel);
+typedef ovrResult (OVR_PFN* pfn_ovr_ResetBoundaryLookAndFeel)(ovrSession session);
+typedef ovrResult (OVR_PFN* pfn_ovr_GetBoundaryGeometry)(ovrSession session,
+                                                         ovrBoundaryType boundaryType,
+                                                         ovrVector3f* outFloorPoints,
+                                                         int* outFloorPointsCount);
+typedef ovrResult (OVR_PFN* pfn_ovr_GetBoundaryDimensions)(ovrSession session,
+                                                           ovrBoundaryType boundaryType,
+                                                           ovrVector3f* outDimensions);
+typedef ovrResult (OVR_PFN* pfn_ovr_GetBoundaryVisible)(ovrSession session, ovrBool* outIsVisible);
+typedef ovrResult (OVR_PFN* pfn_ovr_RequestBoundaryVisible)(ovrSession session, ovrBool visible);
 
 enum {
   ovrMaxLayerCount = 16
 };
 
 typedef enum {
   ovrLayerType_Disabled       = 0,
   ovrLayerType_EyeFov         = 1,
@@ -532,28 +636,63 @@ typedef ovrResult (OVR_PFN* pfn_ovr_GetT
 typedef ovrResult (OVR_PFN* pfn_ovr_CommitTextureSwapChain)(ovrSession session, ovrTextureSwapChain chain);
 typedef void (OVR_PFN* pfn_ovr_DestroyTextureSwapChain)(ovrSession session, ovrTextureSwapChain chain);
 typedef void (OVR_PFN* pfn_ovr_DestroyMirrorTexture)(ovrSession session, ovrMirrorTexture mirrorTexture);
 typedef ovrSizei(OVR_PFN* pfn_ovr_GetFovTextureSize)(ovrSession session, ovrEyeType eye, ovrFovPort fov, float pixelsPerDisplayPixel);
 typedef ovrEyeRenderDesc(OVR_PFN* pfn_ovr_GetRenderDesc)(ovrSession session, ovrEyeType eyeType, ovrFovPort fov);
 typedef ovrResult(OVR_PFN* pfn_ovr_SubmitFrame)(ovrSession session, long long frameIndex,
 	const ovrViewScaleDesc* viewScaleDesc,
 	ovrLayerHeader const * const * layerPtrList, unsigned int layerCount);
+
+typedef struct OVR_ALIGNAS(4) {
+  int HmdVsyncIndex;
+  int AppFrameIndex;
+  int AppDroppedFrameCount;
+  float AppMotionToPhotonLatency;
+  float AppQueueAheadTime;
+  float AppCpuElapsedTime;
+  float AppGpuElapsedTime;
+  int CompositorFrameIndex;
+  int CompositorDroppedFrameCount;
+  float CompositorLatency;
+  float CompositorCpuElapsedTime;
+  float CompositorGpuElapsedTime;
+  float CompositorCpuStartToGpuEndElapsedTime;
+  float CompositorGpuEndToVsyncElapsedTime;
+  ovrBool AswIsActive;
+  int AswActivatedToggleCount;
+  int AswPresentedFrameCount;
+  int AswFailedFrameCount;
+} ovrPerfStatsPerCompositorFrame;
+
+enum { ovrMaxProvidedFrameStats = 5 };
+
+typedef struct OVR_ALIGNAS(4) {
+  ovrPerfStatsPerCompositorFrame FrameStats[ovrMaxProvidedFrameStats];
+  int FrameStatsCount;
+  ovrBool AnyFrameStatsDropped;
+  float AdaptiveGpuPerformanceScale;
+  ovrBool AswIsAvailable;
+  ovrProcessId VisibleProcessId;
+} ovrPerfStats;
+
+typedef ovrResult (OVR_PFN* pfn_ovr_GetPerfStats)(ovrSession session, ovrPerfStats* outStats);
+typedef ovrResult (OVR_PFN* pfn_ovr_ResetPerfStats)(ovrSession session);
 typedef double (OVR_PFN* pfn_ovr_GetPredictedDisplayTime)(ovrSession session, long long frameIndex);
 typedef double (OVR_PFN* pfn_ovr_GetTimeInSeconds)();
 
-
 typedef enum {
   ovrPerfHud_Off = 0,
   ovrPerfHud_PerfSummary = 1,
   ovrPerfHud_LatencyTiming = 2,
   ovrPerfHud_AppRenderTiming = 3,
   ovrPerfHud_CompRenderTiming = 4,
+  ovrPerfHud_AswStats = 6,
   ovrPerfHud_VersionInfo = 5,
-  ovrPerfHud_Count = 6,
+  ovrPerfHud_Count = 7,
   ovrPerfHud_EnumSize = 0x7fffffff
 } ovrPerfHudMode;
 
 typedef enum {
   ovrLayerHud_Off = 0,
   ovrLayerHud_Info = 1,
   ovrLayerHud_EnumSize = 0x7fffffff
 } ovrLayerHudMode;
@@ -562,59 +701,64 @@ typedef enum {
   ovrDebugHudStereo_Off = 0,
   ovrDebugHudStereo_Quad = 1,
   ovrDebugHudStereo_QuadWithCrosshair = 2,
   ovrDebugHudStereo_CrosshairAtInfinity = 3,
   ovrDebugHudStereo_Count,
   ovrDebugHudStereo_EnumSize = 0x7fffffff
 } ovrDebugHudStereoMode;
 
-typedef enum {
-  // Outer boundary - closely represents user setup walls
-  ovrBoundary_Outer = 0x0001,
-  // Play area - safe rectangular area inside outer boundary which can optionally be used to restrict user interactions and motion.
-  ovrBoundary_PlayArea = 0x0100,
-} ovrBoundaryType;
-
 typedef ovrBool(OVR_PFN* pfn_ovr_GetBool)(ovrSession session, const char* propertyName, ovrBool defaultVal);
 typedef ovrBool(OVR_PFN* pfn_ovr_SetBool)(ovrSession session, const char* propertyName, ovrBool value);
 typedef int (OVR_PFN* pfn_ovr_GetInt)(ovrSession session, const char* propertyName, int defaultVal);
 typedef ovrBool (OVR_PFN* pfn_ovr_SetInt)(ovrSession session, const char* propertyName, int value);
 typedef float (OVR_PFN* pfn_ovr_GetFloat)(ovrSession session, const char* propertyName, float defaultVal);
 typedef ovrBool (OVR_PFN* pfn_ovr_SetFloat)(ovrSession session, const char* propertyName, float value);
 typedef unsigned int (OVR_PFN* pfn_ovr_GetFloatArray)(ovrSession session, const char* propertyName,
   float values[], unsigned int valuesCapacity);
 typedef ovrBool (OVR_PFN* pfn_ovr_SetFloatArray)(ovrSession session, const char* propertyName,
   const float values[], unsigned int valuesSize);
 typedef const char* (OVR_PFN* pfn_ovr_GetString)(ovrSession session, const char* propertyName,
   const char* defaultVal);
 typedef ovrBool (OVR_PFN* pfn_ovr_SetString)(ovrSession session, const char* propertyName,
   const char* value);
-typedef ovrResult (OVR_PFN* pfn_ovr_GetBoundaryDimensions)(ovrSession session,
-                                                           ovrBoundaryType boundaryType,
-                                                           ovrVector3f* outDimensions);
+
+typedef ovrResult (OVR_PFN* pfn_ovr_GetExternalCameras)(ovrSession session,
+                                                    ovrExternalCamera* cameras,
+                                                    unsigned int* inoutCameraCount);
+typedef ovrResult (OVR_PFN* pfn_ovr_SetExternalCameraProperties)(ovrSession session,
+                                                             const char* name,
+                                                             const ovrCameraIntrinsics* const intrinsics,
+                                                             const ovrCameraExtrinsics* const extrinsics);
+
+typedef enum {
+  ovrSuccess_NotVisible = 1000,
+  ovrSuccess_BoundaryInvalid = 1001,
+  ovrSuccess_DeviceUnavailable = 1002,
+} ovrSuccessTypes;
 
 typedef enum {
   ovrError_MemoryAllocationFailure = -1000,
-  ovrError_SocketCreationFailure = -1001,
   ovrError_InvalidSession = -1002,
   ovrError_Timeout = -1003,
   ovrError_NotInitialized = -1004,
   ovrError_InvalidParameter = -1005,
   ovrError_ServiceError = -1006,
   ovrError_NoHmd = -1007,
   ovrError_Unsupported = -1009,
   ovrError_DeviceUnavailable = -1010,
   ovrError_InvalidHeadsetOrientation = -1011,
   ovrError_ClientSkippedDestroy = -1012,
   ovrError_ClientSkippedShutdown = -1013,
-  ovrError_AudioReservedBegin = -2000,
+  ovrError_ServiceDeadlockDetected = -1014,
+  ovrError_InvalidOperation = -1015,
+  ovrError_InsufficientArraySize = -1016,
+  ovrError_NoExternalCameraInfo = -1017,
   ovrError_AudioDeviceNotFound = -2001,
   ovrError_AudioComError = -2002,
-  ovrError_AudioReservedEnd = -2999,
   ovrError_Initialize = -3000,
   ovrError_LibLoad = -3001,
   ovrError_LibVersion = -3002,
   ovrError_ServiceConnection = -3003,
   ovrError_ServiceVersion = -3004,
   ovrError_IncompatibleOS = -3005,
   ovrError_DisplayInit = -3006,
   ovrError_ServerStart = -3007,
@@ -626,59 +770,34 @@ typedef enum {
   ovrError_OutOfDateGfxDriver = -3013,
   ovrError_IncompatibleGPU = -3014,
   ovrError_NoValidVRDisplaySystem = -3015,
   ovrError_Obsolete = -3016,
   ovrError_DisabledOrDefaultAdapter = -3017,
   ovrError_HybridGraphicsNotSupported = -3018,
   ovrError_DisplayManagerInit = -3019,
   ovrError_TrackerDriverInit = -3020,
-  ovrError_InvalidBundleAdjustment = -4000,
-  ovrError_USBBandwidth = -4001,
-  ovrError_USBEnumeratedSpeed = -4002,
-  ovrError_ImageSensorCommError = -4003,
-  ovrError_GeneralTrackerFailure = -4004,
-  ovrError_ExcessiveFrameTruncation = -4005,
-  ovrError_ExcessiveFrameSkipping = -4006,
-  ovrError_SyncDisconnected = -4007,
-  ovrError_TrackerMemoryReadFailure = -4008,
-  ovrError_TrackerMemoryWriteFailure = -4009,
-  ovrError_TrackerFrameTimeout = -4010,
-  ovrError_TrackerTruncatedFrame = -4011,
-  ovrError_TrackerDriverFailure = -4012,
-  ovrError_TrackerNRFFailure = -4013,
-  ovrError_HardwareGone = -4014,
-  ovrError_NordicEnabledNoSync = -4015,
-  ovrError_NordicSyncNoFrames = -4016,
-  ovrError_CatastrophicFailure = -4017,
-  ovrError_HMDFirmwareMismatch = -4100,
-  ovrError_TrackerFirmwareMismatch = -4101,
-  ovrError_BootloaderDeviceDetected = -4102,
-  ovrError_TrackerCalibrationError = -4103,
-  ovrError_ControllerFirmwareMismatch = -4104,
-  ovrError_IMUTooManyLostSamples = -4200,
-  ovrError_IMURateError = -4201,
-  ovrError_FeatureReportFailure = -4202,
-  ovrError_Incomplete = -5000,
-  ovrError_Abandoned = -5001,
+  ovrError_LibSignCheck = -3021,
+  ovrError_LibPath = -3022,
+  ovrError_LibSymbols = -3023,
+  ovrError_RemoteSession = -3024,
+  ovrError_InitializeVulkan = -3025,
   ovrError_DisplayLost = -6000,
   ovrError_TextureSwapChainFull = -6001,
   ovrError_TextureSwapChainInvalid = -6002,
+  ovrError_GraphicsDeviceReset = -6003,
+  ovrError_DisplayRemoved = -6004,
+  ovrError_ContentProtectionNotAvailable = -6005,
+  ovrError_ApplicationInvisible = -6006,
+  ovrError_Disallowed = -6007,
+  ovrError_DisplayPluggedIncorrectly = -6008,
   ovrError_RuntimeException = -7000,
-  ovrError_MetricsUnknownApp = -90000,
-  ovrError_MetricsDuplicateApp = -90001,
-  ovrError_MetricsNoEvents = -90002,
-  ovrError_MetricsRuntime = -90003,
-  ovrError_MetricsFile = -90004,
-  ovrError_MetricsNoClientInfo = -90005,
-  ovrError_MetricsNoAppMetaData = -90006,
-  ovrError_MetricsNoApp = -90007,
-  ovrError_MetricsOafFailure = -90008,
-  ovrError_MetricsSessionAlreadyActive = -90009,
-  ovrError_MetricsSessionNotActive = -90010,
+  ovrError_NoCalibration = -9000,
+  ovrError_OldVersion = -9001,
+  ovrError_MisformattedBlock = -9002,
 } ovrErrorType;
 
 
 #ifdef XP_WIN
 
 struct IUnknown;
 
 typedef ovrResult (OVR_PFN* pfn_ovr_CreateTextureSwapChainDX)(ovrSession session,
@@ -720,26 +839,26 @@ typedef ovrResult (OVR_PFN* pfn_ovr_Crea
 
 typedef ovrResult (OVR_PFN* pfn_ovr_GetMirrorTextureBufferGL)(ovrSession session,
 	ovrMirrorTexture mirrorTexture,
 	unsigned int* out_TexId);
 
 #define OVR_KEY_EYE_HEIGHT "EyeHeight" // float meters
 #define OVR_DEFAULT_EYE_HEIGHT 1.675f
 
-#if !defined(OVR_SUCCESS)
-#define OVR_SUCCESS(result) (result >= 0)
+#if !defined(OVR_SUCCESS)
+#define OVR_SUCCESS(result) (result >= 0)
 #endif
 
-#if !defined(OVR_UNQUALIFIED_SUCCESS)
-#define OVR_UNQUALIFIED_SUCCESS(result) (result == ovrSuccess)
+#if !defined(OVR_UNQUALIFIED_SUCCESS)
+#define OVR_UNQUALIFIED_SUCCESS(result) (result == ovrSuccess)
 #endif
 
-#if !defined(OVR_FAILURE)
-#define OVR_FAILURE(result) (!OVR_SUCCESS(result))
-#endif
+#if !defined(OVR_FAILURE)
+#define OVR_FAILURE(result) (!OVR_SUCCESS(result))
+#endif
 
 #ifdef __cplusplus
 }
 #endif
 
 #endif /* mozilla_ovr_capi_dynamic_h_ */
 #endif /* OVR_CAPI_h */