diff options
Diffstat (limited to 'gfx/vr/service/oculus')
-rw-r--r-- | gfx/vr/service/oculus/ovr_capi_dynamic.h | 984 |
1 files changed, 984 insertions, 0 deletions
diff --git a/gfx/vr/service/oculus/ovr_capi_dynamic.h b/gfx/vr/service/oculus/ovr_capi_dynamic.h new file mode 100644 index 0000000000..77eb0a3aa0 --- /dev/null +++ b/gfx/vr/service/oculus/ovr_capi_dynamic.h @@ -0,0 +1,984 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* This file contains just the needed struct definitions for + * interacting with the Oculus VR C API, without needing to #include + * OVR_CAPI.h directly. Note that it uses the same type names as the + * CAPI, and cannot be #included at the same time as OVR_CAPI.h. It + * does not include the entire C API, just want's needed. + */ + +#ifdef OVR_CAPI_h +# ifdef _MSC_VER +# pragma message( \ + "ovr_capi_dyanmic.h: OVR_CAPI.h included before ovr_capi_dynamic.h, skipping this") +# else +# warning OVR_CAPI.h included before ovr_capi_dynamic.h, skipping this +# endif +# define mozilla_ovr_capi_dynamic_h_ + +#else + +# ifndef mozilla_ovr_capi_dynamic_h_ +# define mozilla_ovr_capi_dynamic_h_ + +# ifdef HAVE_64BIT_BUILD +# define OVR_PTR_SIZE 8 +# define OVR_ON64(x) x +# else +# define OVR_PTR_SIZE 4 +# define OVR_ON64(x) /**/ +# endif + +# if defined(_WIN32) +# define OVR_PFN __cdecl +# else +# define OVR_PFN +# endif + +# if !defined(OVR_ALIGNAS) +# if defined(__GNUC__) || defined(__clang__) +# define OVR_ALIGNAS(n) __attribute__((aligned(n))) +# elif defined(_MSC_VER) || defined(__INTEL_COMPILER) +# define OVR_ALIGNAS(n) __declspec(align(n)) +# elif defined(__CC_ARM) +# define OVR_ALIGNAS(n) __align(n) +# else +# error Need to define OVR_ALIGNAS +# endif +# endif + +# if !defined(OVR_UNUSED_STRUCT_PAD) +# define OVR_UNUSED_STRUCT_PAD(padName, size) char padName[size]; +# endif + +# ifdef __cplusplus +extern "C" { +# endif + +typedef int32_t ovrResult; + +typedef enum { + ovrSuccess = 0, +} 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; + +typedef struct OVR_ALIGNAS(4) { + ovrQuatf Orientation; + ovrVector3f Position; +} ovrPosef; + +typedef struct OVR_ALIGNAS(8) { + ovrPosef ThePose; + ovrVector3f AngularVelocity; + ovrVector3f LinearVelocity; + ovrVector3f AngularAcceleration; + ovrVector3f LinearAcceleration; + OVR_UNUSED_STRUCT_PAD(pad0, 4) + double TimeInSeconds; +} ovrPoseStatef; + +typedef struct { + float UpTan; + float DownTan; + float LeftTan; + float RightTan; +} ovrFovPort; + +typedef enum { + ovrHmd_None = 0, + ovrHmd_DK1 = 3, + ovrHmd_DKHD = 4, + ovrHmd_DK2 = 6, + ovrHmd_CB = 8, + ovrHmd_Other = 9, + ovrHmd_E3_2015 = 10, + ovrHmd_ES06 = 11, + ovrHmd_ES09 = 12, + ovrHmd_ES11 = 13, + ovrHmd_CV1 = 14, + ovrHmd_EnumSize = 0x7fffffff +} ovrHmdType; + +typedef enum { + ovrHmdCap_DebugDevice = 0x0010, + ovrHmdCap_EnumSize = 0x7fffffff +} ovrHmdCaps; + +typedef enum { + ovrTrackingCap_Orientation = 0x0010, + ovrTrackingCap_MagYawCorrection = 0x0020, + ovrTrackingCap_Position = 0x0040, + ovrTrackingCap_EnumSize = 0x7fffffff +} ovrTrackingCaps; + +typedef enum { + ovrExtension_TextureLayout_Octilinear = 0, + ovrExtension_Count, + ovrExtension_EnumSize = 0x7fffffff +} ovrExtensions; + +typedef enum { + ovrEye_Left = 0, + ovrEye_Right = 1, + ovrEye_Count = 2, + ovrEye_EnumSize = 0x7fffffff +} ovrEyeType; + +typedef enum { + ovrTrackingOrigin_EyeLevel = 0, + ovrTrackingOrigin_FloorLevel = 1, + ovrTrackingOrigin_Count = 2, ///< \internal Count of enumerated elements. + ovrTrackingOrigin_EnumSize = 0x7fffffff ///< \internal Force type int32_t. +} ovrTrackingOrigin; + +typedef struct OVR_ALIGNAS(OVR_PTR_SIZE) { + char Reserved[8]; +} ovrGraphicsLuid; + +typedef struct OVR_ALIGNAS(OVR_PTR_SIZE) { + ovrHmdType Type; + OVR_ON64(OVR_UNUSED_STRUCT_PAD(pad0, 4)) + char ProductName[64]; + char Manufacturer[64]; + short VendorId; + short ProductId; + char SerialNumber[24]; + short FirmwareMajor; + short FirmwareMinor; + unsigned int AvailableHmdCaps; + unsigned int DefaultHmdCaps; + unsigned int AvailableTrackingCaps; + unsigned int DefaultTrackingCaps; + ovrFovPort DefaultEyeFov[ovrEye_Count]; + 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; + float FrustumVFovInRadians; + float FrustumNearZInMeters; + float FrustumFarZInMeters; +} ovrTrackerDesc; + +typedef enum { + ovrTracker_Connected = 0x0020, + ovrTracker_PoseTracked = 0x0004 +} ovrTrackerFlags; + +typedef struct OVR_ALIGNAS(8) { + unsigned int TrackerFlags; + ovrPosef Pose; + ovrPosef LeveledPose; + OVR_UNUSED_STRUCT_PAD(pad0, 4) +} ovrTrackerPose; + +typedef struct OVR_ALIGNAS(8) { + ovrPoseStatef HeadPose; + unsigned int StatusFlags; + ovrPoseStatef HandPoses[2]; + unsigned int HandStatusFlags[2]; + ovrPosef CalibratedOrigin; +} ovrTrackingState; + +typedef struct OVR_ALIGNAS(4) { + ovrEyeType Eye; + ovrFovPort Fov; + ovrRecti DistortedViewport; + ovrVector2f PixelsPerTanAngleAtCenter; + ovrPosef HmdToEyePose; +} ovrEyeRenderDesc; + +typedef struct OVR_ALIGNAS(4) { + float Projection22; + float Projection23; + float Projection32; +} ovrTimewarpProjectionDesc; + +typedef struct OVR_ALIGNAS(4) { + ovrPosef HmdToEyePose[ovrEye_Count]; + float HmdSpaceToWorldScaleInMeters; +} ovrViewScaleDesc; + +typedef enum { + ovrTexture_2D, + ovrTexture_2D_External, + ovrTexture_Cube, + ovrTexture_Count, + ovrTexture_EnumSize = 0x7fffffff +} ovrTextureType; + +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 = 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, + ovrTextureMisc_AutoGenerateMips = 0x0008, + ovrTextureMisc_EnumSize = 0x7fffffff +} ovrTextureFlags; + +typedef struct { + ovrTextureType Type; + ovrTextureFormat Format; + int ArraySize; + int Width; + int Height; + int MipLevels; + int SampleCount; + ovrBool StaticImage; + unsigned int MiscFlags; + unsigned int BindFlags; +} ovrTextureSwapChainDesc; + +typedef struct { + ovrTextureFormat Format; + int Width; + int Height; + unsigned int MiscFlags; + unsigned int MirrorOptions; +} ovrMirrorTextureDesc; + +typedef struct ovrTextureSwapChainData* ovrTextureSwapChain; +typedef struct ovrMirrorTextureData* ovrMirrorTexture; + +typedef enum { + ovrButton_A = 0x00000001, + ovrButton_B = 0x00000002, + ovrButton_RThumb = 0x00000004, + ovrButton_RShoulder = 0x00000008, + ovrButton_X = 0x00000100, + ovrButton_Y = 0x00000200, + ovrButton_LThumb = 0x00000400, + ovrButton_LShoulder = 0x00000800, + 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, + ovrTouch_RIndexTrigger = 0x00000010, + ovrTouch_RButtonMask = ovrTouch_A | ovrTouch_B | ovrTouch_RThumb | + ovrTouch_RThumbRest | ovrTouch_RIndexTrigger, + 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_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 = 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; + +# define OVR_HAPTICS_BUFFER_SAMPLES_MAX 256 + +typedef struct { + const void* Samples; + int SamplesCount; + ovrHapticsBufferSubmitMode SubmitMode; +} ovrHapticsBuffer; + +typedef struct { + int RemainingQueueSpace; + int SamplesQueued; +} ovrHapticsPlaybackState; + +typedef enum { + ovrTrackedDevice_None = 0x0000, + ovrTrackedDevice_HMD = 0x0001, + ovrTrackedDevice_LTouch = 0x0002, + ovrTrackedDevice_RTouch = 0x0004, + 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; + unsigned int Buttons; + 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_FocusAware = 0x00000040, + ovrinit_WritableBits = 0x00ffffff, + ovrInit_EnumSize = 0x7fffffff +} ovrInitFlags; + +typedef enum { + ovrLogLevel_Debug = 0, + ovrLogLevel_Info = 1, + ovrLogLevel_Error = 2, + ovrLogLevel_EnumSize = 0x7fffffff +} ovrLogLevel; + +typedef void(OVR_PFN* ovrLogCallback)(uintptr_t userData, int level, + const char* message); + +typedef struct OVR_ALIGNAS(8) { + uint32_t Flags; + uint32_t RequestedMinorVersion; + ovrLogCallback LogCallback; + uintptr_t UserData; + uint32_t ConnectionTimeoutMS; + OVR_ON64(OVR_UNUSED_STRUCT_PAD(pad0, 4)) +} ovrInitParams; + +typedef ovrResult(OVR_PFN* pfn_ovr_Initialize)(const ovrInitParams* params); +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 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; + ovrBool HasInputFocus; + ovrBool OverlayPresent; +} ovrSessionStatus; + +typedef ovrResult(OVR_PFN* pfn_ovr_GetSessionStatus)( + ovrSession session, ovrSessionStatus* sessionStatus); +typedef ovrResult(OVR_PFN* pfn_ovr_IsExtensionSupported)( + ovrSession session, ovrExtensions extension, + ovrBool* outExtensionSupported); +typedef ovrResult(OVR_PFN* pfn_ovr_EnableExtension)(ovrSession session, + ovrExtensions extension); +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, + ovrLayerType_Quad = 3, + ovrLayerType_EyeMatrix = 5, + ovrLayerType_EyeFovMultires = 7, + ovrLayerType_Cube = 10, + ovrLayerType_EnumSize = 0x7fffffff +} ovrLayerType; + +typedef enum { + ovrLayerFlag_HighQuality = 0x01, + ovrLayerFlag_TextureOriginAtBottomLeft = 0x02, + ovrLayerFlag_HeadLocked = 0x04 +} ovrLayerFlags; + +typedef struct OVR_ALIGNAS(OVR_PTR_SIZE) { + ovrLayerType Type; + unsigned Flags; +} ovrLayerHeader; + +typedef struct OVR_ALIGNAS(OVR_PTR_SIZE) { + ovrLayerHeader Header; + ovrTextureSwapChain ColorTexture[ovrEye_Count]; + ovrRecti Viewport[ovrEye_Count]; + ovrFovPort Fov[ovrEye_Count]; + ovrPosef RenderPose[ovrEye_Count]; + double SensorSampleTime; +} ovrLayerEyeFov; + +typedef enum { + ovrTextureLayout_Rectilinear = 0, + ovrTextureLayout_Octilinear = 1, + ovrTextureLayout_EnumSize = 0x7fffffff +} ovrTextureLayout; + +typedef struct OVR_ALIGNAS(OVR_PTR_SIZE) { + float WarpLeft; + float WarpRight; + float WarpUp; + float WarpDown; + float SizeLeft; + float SizeRight; + float SizeUp; + float SizeDown; + +} ovrTextureLayoutOctilinear; + +typedef union OVR_ALIGNAS(OVR_PTR_SIZE) { + ovrTextureLayoutOctilinear Octilinear[ovrEye_Count]; +} ovrTextureLayoutDesc_Union; + +typedef struct OVR_ALIGNAS(OVR_PTR_SIZE) { + ovrLayerHeader Header; + ovrTextureSwapChain ColorTexture[ovrEye_Count]; + ovrRecti Viewport[ovrEye_Count]; + ovrFovPort Fov[ovrEye_Count]; + ovrPosef RenderPose[ovrEye_Count]; + double SensorSampleTime; + ovrTextureLayout TextureLayout; + ovrTextureLayoutDesc_Union TextureLayoutDesc; +} ovrLayerEyeFovMultires; + +typedef struct OVR_ALIGNAS(OVR_PTR_SIZE) { + ovrLayerHeader Header; + ovrTextureSwapChain ColorTexture[ovrEye_Count]; + ovrRecti Viewport[ovrEye_Count]; + ovrPosef RenderPose[ovrEye_Count]; + ovrMatrix4f Matrix[ovrEye_Count]; + double SensorSampleTime; +} ovrLayerEyeMatrix; + +typedef struct OVR_ALIGNAS(OVR_PTR_SIZE) { + ovrLayerHeader Header; + ovrTextureSwapChain ColorTexture; + ovrRecti Viewport; + ovrPosef QuadPoseCenter; + ovrVector2f QuadSize; +} ovrLayerQuad; + +typedef struct OVR_ALIGNAS(OVR_PTR_SIZE) { + ovrLayerHeader Header; + ovrQuatf Orientation; + ovrTextureSwapChain CubeMapTexture; +} ovrLayerCube; + +typedef union { + ovrLayerHeader Header; + ovrLayerEyeFov EyeFov; + ovrLayerQuad Quad; + ovrLayerEyeFovMultires Multires; + ovrLayerCube Cube; +} ovrLayer_Union; + +typedef ovrResult(OVR_PFN* pfn_ovr_GetTextureSwapChainLength)( + ovrSession session, ovrTextureSwapChain chain, int* out_Length); +typedef ovrResult(OVR_PFN* pfn_ovr_GetTextureSwapChainCurrentIndex)( + ovrSession session, ovrTextureSwapChain chain, int* out_Index); +typedef ovrResult(OVR_PFN* pfn_ovr_GetTextureSwapChainDesc)( + ovrSession session, ovrTextureSwapChain chain, + ovrTextureSwapChainDesc* out_Desc); +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_GetRenderDesc2)(ovrSession session, + ovrEyeType eyeType, + ovrFovPort fov); +typedef ovrResult(OVR_PFN* pfn_ovr_WaitToBeginFrame)(ovrSession session, + long long frameIndex); +typedef ovrResult(OVR_PFN* pfn_ovr_BeginFrame)(ovrSession session, + long long frameIndex); +typedef ovrResult(OVR_PFN* pfn_ovr_EndFrame)( + ovrSession session, long long frameIndex, + const ovrViewScaleDesc* viewScaleDesc, + ovrLayerHeader const* const* layerPtrList, unsigned int layerCount); +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 = 7, + ovrPerfHud_EnumSize = 0x7fffffff +} ovrPerfHudMode; + +typedef enum { + ovrLayerHud_Off = 0, + ovrLayerHud_Info = 1, + ovrLayerHud_EnumSize = 0x7fffffff +} ovrLayerHudMode; + +typedef enum { + ovrDebugHudStereo_Off = 0, + ovrDebugHudStereo_Quad = 1, + ovrDebugHudStereo_QuadWithCrosshair = 2, + ovrDebugHudStereo_CrosshairAtInfinity = 3, + ovrDebugHudStereo_Count, + ovrDebugHudStereo_EnumSize = 0x7fffffff +} ovrDebugHudStereoMode; + +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_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_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_ServiceDeadlockDetected = -1014, + ovrError_InvalidOperation = -1015, + ovrError_InsufficientArraySize = -1016, + ovrError_NoExternalCameraInfo = -1017, + ovrError_LostTracking = -1018, + ovrError_AudioDeviceNotFound = -2001, + ovrError_AudioComError = -2002, + ovrError_Initialize = -3000, + ovrError_LibLoad = -3001, + ovrError_LibVersion = -3002, + ovrError_ServiceConnection = -3003, + ovrError_ServiceVersion = -3004, + ovrError_IncompatibleOS = -3005, + ovrError_DisplayInit = -3006, + ovrError_ServerStart = -3007, + ovrError_Reinitialization = -3008, + ovrError_MismatchedAdapters = -3009, + ovrError_LeakingResources = -3010, + ovrError_ClientVersion = -3011, + ovrError_OutOfDateOS = -3012, + 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_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_NoCalibration = -9000, + ovrError_OldVersion = -9001, + ovrError_MisformattedBlock = -9002, +} ovrErrorType; + +# ifdef XP_WIN + +struct IUnknown; + +typedef ovrResult(OVR_PFN* pfn_ovr_CreateTextureSwapChainDX)( + ovrSession session, IUnknown* d3dPtr, const ovrTextureSwapChainDesc* desc, + ovrTextureSwapChain* out_TextureSwapChain); + +typedef ovrResult(OVR_PFN* pfn_ovr_GetTextureSwapChainBufferDX)( + ovrSession session, ovrTextureSwapChain chain, int index, IID iid, + void** out_Buffer); + +typedef ovrResult(OVR_PFN* pfn_ovr_CreateMirrorTextureDX)( + ovrSession session, IUnknown* d3dPtr, const ovrMirrorTextureDesc* desc, + ovrMirrorTexture* out_MirrorTexture); + +typedef ovrResult(OVR_PFN* pfn_ovr_GetMirrorTextureBufferDX)( + ovrSession session, ovrMirrorTexture mirrorTexture, IID iid, + void** out_Buffer); + +# endif + +typedef ovrResult(OVR_PFN* pfn_ovr_CreateTextureSwapChainGL)( + ovrSession session, const ovrTextureSwapChainDesc* desc, + ovrTextureSwapChain* out_TextureSwapChain); + +typedef ovrResult(OVR_PFN* pfn_ovr_GetTextureSwapChainBufferGL)( + ovrSession session, ovrTextureSwapChain chain, int index, + unsigned int* out_TexId); + +typedef ovrResult(OVR_PFN* pfn_ovr_CreateMirrorTextureGL)( + ovrSession session, const ovrMirrorTextureDesc* desc, + ovrMirrorTexture* out_MirrorTexture); + +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) +# endif + +# 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 + +# ifdef __cplusplus +} +# endif + +# endif /* mozilla_ovr_capi_dynamic_h_ */ +#endif /* OVR_CAPI_h */ |