Bug 1375060 - Update Oculus headers to match requested API version. draft
authorKearwood "Kip" Gilbert <kgilbert@mozilla.com>
Wed, 21 Jun 2017 15:42:10 -0700
changeset 598625 5884467afe5757d945d02894b919e7177297a97d
parent 598307 92eb911c35da48907d326604c4c92cf55e551895
child 634524 60f87be6ca44769d2d99d41934847a23a6869eab
push id65259
push userkgilbert@mozilla.com
push dateWed, 21 Jun 2017 22:45:50 +0000
bugs1375060
milestone56.0a1
Bug 1375060 - Update Oculus headers to match requested API version. 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 */