Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/ValveSoftware/openvr.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNat Brown <natb@valvesoftware.com>2017-09-01 21:09:43 +0300
committerNat Brown <natb@valvesoftware.com>2017-09-01 21:09:43 +0300
commitebdea152f8aac77e9a6db29682b81d762159df7e (patch)
tree5f5701085d0d680cb10286e7a780ce556582f2d8
parent5d0574bf6473130d25dd296ad30206ccd148590b (diff)
OpenVR 1.0.10v1.0.10
IVRCompositor: - New IVRCompositor::SetExplicitTimingMode and IVRCompositor::SubmitExplicitTimingData for DX12 (https://github.com/ValveSoftware/openvr/wiki/DirectX12#explicit-timing) and Vulkan (https://github.com/ValveSoftware/openvr/wiki/Vulkan#explicit-timing) - Adds Submit_TextureWithPose flag and VRTextureWithPose_t structure so applications can specify the pose the texture was rendered for when calling IVRCompositor::Submit IVROverlay: - New IVROverlay::CloseMessageOverlay for closing modal dashboard dialogs the process owns IVRSystem: - Adds context to IVRSystem::GetOutputDevice required to discriminate graphics device in Vulkan Miscellaneous - Fixes crashes under some multithreading circumstances using OpenVR VR_* APIs - Updates hellovr_vulkan sample to use IVRSystem::GetOutputDevice - Fixes a crash with hellovr_opengl sample under macOS [git-p4: depot-paths = "//vr/steamvr/sdk_release/": change = 4122485]
-rwxr-xr-xbin/linux32/libopenvr_api.sobin287376 -> 291637 bytes
-rwxr-xr-xbin/linux32/libopenvr_api.so.dbgbin1904038 -> 1918879 bytes
-rwxr-xr-xbin/linux64/libopenvr_api.sobin288923 -> 289184 bytes
-rwxr-xr-xbin/linux64/libopenvr_api.so.dbgbin2392561 -> 2405942 bytes
-rwxr-xr-xbin/osx32/libopenvr_api.dylibbin300868 -> 302352 bytes
-rw-r--r--bin/osx32/libopenvr_api.dylib.dSYM/Contents/Resources/DWARF/libopenvr_api.dylibbin2010999 -> 2028737 bytes
-rw-r--r--bin/osx64/OpenVR.framework/Versions/A/Headers/openvr.h192
-rw-r--r--bin/osx64/OpenVR.framework/Versions/A/Headers/openvr_api.cs65
-rw-r--r--bin/osx64/OpenVR.framework/Versions/A/Headers/openvr_api.json42
-rw-r--r--bin/osx64/OpenVR.framework/Versions/A/Headers/openvr_capi.h30
-rw-r--r--bin/osx64/OpenVR.framework/Versions/A/Headers/openvr_driver.h136
-rwxr-xr-xbin/osx64/OpenVR.framework/Versions/A/OpenVRbin1318196 -> 1297628 bytes
-rw-r--r--bin/win32/openvr_api.dllbin258336 -> 424736 bytes
-rw-r--r--bin/win32/openvr_api.pdbbin4378624 -> 6680576 bytes
-rw-r--r--bin/win64/openvr_api.dllbin304416 -> 522528 bytes
-rw-r--r--bin/win64/openvr_api.pdbbin4190208 -> 6385664 bytes
-rw-r--r--headers/openvr.h185
-rw-r--r--headers/openvr_api.cs48
-rw-r--r--headers/openvr_api.json34
-rw-r--r--headers/openvr_capi.h23
-rw-r--r--headers/openvr_driver.h132
-rwxr-xr-xlib/linux32/libopenvr_api.sobin1897474 -> 1912315 bytes
-rwxr-xr-xlib/linux64/libopenvr_api.sobin2385833 -> 2399222 bytes
-rw-r--r--lib/win32/openvr_api.libbin5964 -> 6178 bytes
-rw-r--r--lib/win64/openvr_api.libbin5876 -> 6084 bytes
-rw-r--r--samples/bin/linux64/libopenvr_api.sobin288923 -> 289184 bytes
-rw-r--r--samples/bin/osx32/libopenvr_api.dylibbin300868 -> 302352 bytes
-rw-r--r--samples/bin/win32/openvr_api.dllbin258336 -> 424736 bytes
-rw-r--r--samples/bin/win64/openvr_api.dllbin304416 -> 522528 bytes
-rw-r--r--samples/hellovr_opengl/hellovr_opengl_main.cpp7
-rw-r--r--samples/hellovr_vulkan/hellovr_vulkan_main.cpp22
-rw-r--r--src/ivrclientcore.h4
-rw-r--r--src/openvr_api_public.cpp58
-rw-r--r--src/vrcommon/hmderrors_public.cpp134
34 files changed, 744 insertions, 368 deletions
diff --git a/bin/linux32/libopenvr_api.so b/bin/linux32/libopenvr_api.so
index 0836f1e..95bc2f5 100755
--- a/bin/linux32/libopenvr_api.so
+++ b/bin/linux32/libopenvr_api.so
Binary files differ
diff --git a/bin/linux32/libopenvr_api.so.dbg b/bin/linux32/libopenvr_api.so.dbg
index 0f5498f..feaafdd 100755
--- a/bin/linux32/libopenvr_api.so.dbg
+++ b/bin/linux32/libopenvr_api.so.dbg
Binary files differ
diff --git a/bin/linux64/libopenvr_api.so b/bin/linux64/libopenvr_api.so
index 56c5200..7130664 100755
--- a/bin/linux64/libopenvr_api.so
+++ b/bin/linux64/libopenvr_api.so
Binary files differ
diff --git a/bin/linux64/libopenvr_api.so.dbg b/bin/linux64/libopenvr_api.so.dbg
index 6e22f6e..99bedeb 100755
--- a/bin/linux64/libopenvr_api.so.dbg
+++ b/bin/linux64/libopenvr_api.so.dbg
Binary files differ
diff --git a/bin/osx32/libopenvr_api.dylib b/bin/osx32/libopenvr_api.dylib
index fb1d77f..b353422 100755
--- a/bin/osx32/libopenvr_api.dylib
+++ b/bin/osx32/libopenvr_api.dylib
Binary files differ
diff --git a/bin/osx32/libopenvr_api.dylib.dSYM/Contents/Resources/DWARF/libopenvr_api.dylib b/bin/osx32/libopenvr_api.dylib.dSYM/Contents/Resources/DWARF/libopenvr_api.dylib
index 2aee6ec..57684cf 100644
--- a/bin/osx32/libopenvr_api.dylib.dSYM/Contents/Resources/DWARF/libopenvr_api.dylib
+++ b/bin/osx32/libopenvr_api.dylib.dSYM/Contents/Resources/DWARF/libopenvr_api.dylib
Binary files differ
diff --git a/bin/osx64/OpenVR.framework/Versions/A/Headers/openvr.h b/bin/osx64/OpenVR.framework/Versions/A/Headers/openvr.h
index 79abf06..f945dbc 100644
--- a/bin/osx64/OpenVR.framework/Versions/A/Headers/openvr.h
+++ b/bin/osx64/OpenVR.framework/Versions/A/Headers/openvr.h
@@ -315,6 +315,7 @@ enum ETrackedDeviceProperty
Prop_DriverDirectModeSendsVsyncEvents_Bool = 2043,
Prop_DisplayDebugMode_Bool = 2044,
Prop_GraphicsAdapterLuid_Uint64 = 2045,
+ Prop_DriverProvidedChaperonePath_String = 2048,
// Properties that are unique to TrackedDeviceClass_Controller
Prop_AttachedDeviceId_String = 3000,
@@ -392,6 +393,11 @@ struct VRTextureBounds_t
float uMax, vMax;
};
+/** Allows specifying pose used to render provided scene texture (if different from value returned by WaitGetPoses). */
+struct VRTextureWithPose_t : public Texture_t
+{
+ HmdMatrix34_t mDeviceToAbsoluteTracking; // Actual pose used to render scene textures.
+};
/** Allows the application to control how scene textures are used by the compositor when calling Submit. */
enum EVRSubmitFlags
@@ -409,6 +415,9 @@ enum EVRSubmitFlags
// Do not use
Submit_Reserved = 0x04,
+
+ // Set to indicate that pTexture is a pointer to a VRTextureWithPose_t.
+ Submit_TextureWithPose = 0x08,
};
/** Data required for passing Vulkan textures to IVRCompositor::Submit.
@@ -464,6 +473,8 @@ enum EVREventType
VREvent_WatchdogWakeUpRequested = 109,
VREvent_LensDistortionChanged = 110,
VREvent_PropertyChanged = 111,
+ VREvent_WirelessDisconnect = 112,
+ VREvent_WirelessReconnect = 113,
VREvent_ButtonPress = 200, // data is controller
VREvent_ButtonUnpress = 201, // data is controller
@@ -583,6 +594,7 @@ enum EVREventType
VREvent_PerformanceTest_FidelityLevel = 1602,
VREvent_MessageOverlay_Closed = 1650,
+ VREvent_MessageOverlayCloseRequested = 1651,
// Vendors are free to expose private events in this reserved region
VREvent_VendorSpecific_Reserved_Start = 10000,
@@ -1016,65 +1028,69 @@ enum EVRInitError
VRInitError_None = 0,
VRInitError_Unknown = 1,
- VRInitError_Init_InstallationNotFound = 100,
- VRInitError_Init_InstallationCorrupt = 101,
- VRInitError_Init_VRClientDLLNotFound = 102,
- VRInitError_Init_FileNotFound = 103,
- VRInitError_Init_FactoryNotFound = 104,
- VRInitError_Init_InterfaceNotFound = 105,
- VRInitError_Init_InvalidInterface = 106,
- VRInitError_Init_UserConfigDirectoryInvalid = 107,
- VRInitError_Init_HmdNotFound = 108,
- VRInitError_Init_NotInitialized = 109,
- VRInitError_Init_PathRegistryNotFound = 110,
- VRInitError_Init_NoConfigPath = 111,
- VRInitError_Init_NoLogPath = 112,
- VRInitError_Init_PathRegistryNotWritable = 113,
- VRInitError_Init_AppInfoInitFailed = 114,
- VRInitError_Init_Retry = 115, // Used internally to cause retries to vrserver
- VRInitError_Init_InitCanceledByUser = 116, // The calling application should silently exit. The user canceled app startup
- VRInitError_Init_AnotherAppLaunching = 117,
- VRInitError_Init_SettingsInitFailed = 118,
- VRInitError_Init_ShuttingDown = 119,
- VRInitError_Init_TooManyObjects = 120,
- VRInitError_Init_NoServerForBackgroundApp = 121,
- VRInitError_Init_NotSupportedWithCompositor = 122,
- VRInitError_Init_NotAvailableToUtilityApps = 123,
- VRInitError_Init_Internal = 124,
- VRInitError_Init_HmdDriverIdIsNone = 125,
- VRInitError_Init_HmdNotFoundPresenceFailed = 126,
- VRInitError_Init_VRMonitorNotFound = 127,
- VRInitError_Init_VRMonitorStartupFailed = 128,
- VRInitError_Init_LowPowerWatchdogNotSupported = 129,
- VRInitError_Init_InvalidApplicationType = 130,
- VRInitError_Init_NotAvailableToWatchdogApps = 131,
- VRInitError_Init_WatchdogDisabledInSettings = 132,
- VRInitError_Init_VRDashboardNotFound = 133,
- VRInitError_Init_VRDashboardStartupFailed = 134,
- VRInitError_Init_VRHomeNotFound = 135,
- VRInitError_Init_VRHomeStartupFailed = 136,
-
- VRInitError_Driver_Failed = 200,
- VRInitError_Driver_Unknown = 201,
- VRInitError_Driver_HmdUnknown = 202,
- VRInitError_Driver_NotLoaded = 203,
- VRInitError_Driver_RuntimeOutOfDate = 204,
- VRInitError_Driver_HmdInUse = 205,
- VRInitError_Driver_NotCalibrated = 206,
- VRInitError_Driver_CalibrationInvalid = 207,
- VRInitError_Driver_HmdDisplayNotFound = 208,
+ VRInitError_Init_InstallationNotFound = 100,
+ VRInitError_Init_InstallationCorrupt = 101,
+ VRInitError_Init_VRClientDLLNotFound = 102,
+ VRInitError_Init_FileNotFound = 103,
+ VRInitError_Init_FactoryNotFound = 104,
+ VRInitError_Init_InterfaceNotFound = 105,
+ VRInitError_Init_InvalidInterface = 106,
+ VRInitError_Init_UserConfigDirectoryInvalid = 107,
+ VRInitError_Init_HmdNotFound = 108,
+ VRInitError_Init_NotInitialized = 109,
+ VRInitError_Init_PathRegistryNotFound = 110,
+ VRInitError_Init_NoConfigPath = 111,
+ VRInitError_Init_NoLogPath = 112,
+ VRInitError_Init_PathRegistryNotWritable = 113,
+ VRInitError_Init_AppInfoInitFailed = 114,
+ VRInitError_Init_Retry = 115, // Used internally to cause retries to vrserver
+ VRInitError_Init_InitCanceledByUser = 116, // The calling application should silently exit. The user canceled app startup
+ VRInitError_Init_AnotherAppLaunching = 117,
+ VRInitError_Init_SettingsInitFailed = 118,
+ VRInitError_Init_ShuttingDown = 119,
+ VRInitError_Init_TooManyObjects = 120,
+ VRInitError_Init_NoServerForBackgroundApp = 121,
+ VRInitError_Init_NotSupportedWithCompositor = 122,
+ VRInitError_Init_NotAvailableToUtilityApps = 123,
+ VRInitError_Init_Internal = 124,
+ VRInitError_Init_HmdDriverIdIsNone = 125,
+ VRInitError_Init_HmdNotFoundPresenceFailed = 126,
+ VRInitError_Init_VRMonitorNotFound = 127,
+ VRInitError_Init_VRMonitorStartupFailed = 128,
+ VRInitError_Init_LowPowerWatchdogNotSupported = 129,
+ VRInitError_Init_InvalidApplicationType = 130,
+ VRInitError_Init_NotAvailableToWatchdogApps = 131,
+ VRInitError_Init_WatchdogDisabledInSettings = 132,
+ VRInitError_Init_VRDashboardNotFound = 133,
+ VRInitError_Init_VRDashboardStartupFailed = 134,
+ VRInitError_Init_VRHomeNotFound = 135,
+ VRInitError_Init_VRHomeStartupFailed = 136,
+ VRInitError_Init_RebootingBusy = 137,
+ VRInitError_Init_FirmwareUpdateBusy = 138,
+ VRInitError_Init_FirmwareRecoveryBusy = 139,
+
+
+ VRInitError_Driver_Failed = 200,
+ VRInitError_Driver_Unknown = 201,
+ VRInitError_Driver_HmdUnknown = 202,
+ VRInitError_Driver_NotLoaded = 203,
+ VRInitError_Driver_RuntimeOutOfDate = 204,
+ VRInitError_Driver_HmdInUse = 205,
+ VRInitError_Driver_NotCalibrated = 206,
+ VRInitError_Driver_CalibrationInvalid = 207,
+ VRInitError_Driver_HmdDisplayNotFound = 208,
VRInitError_Driver_TrackedDeviceInterfaceUnknown = 209,
- // VRInitError_Driver_HmdDisplayNotFoundAfterFix = 210, // not needed: here for historic reasons
- VRInitError_Driver_HmdDriverIdOutOfBounds = 211,
- VRInitError_Driver_HmdDisplayMirrored = 212,
-
- VRInitError_IPC_ServerInitFailed = 300,
- VRInitError_IPC_ConnectFailed = 301,
- VRInitError_IPC_SharedStateInitFailed = 302,
- VRInitError_IPC_CompositorInitFailed = 303,
- VRInitError_IPC_MutexInitFailed = 304,
- VRInitError_IPC_Failed = 305,
- VRInitError_IPC_CompositorConnectFailed = 306,
+ // VRInitError_Driver_HmdDisplayNotFoundAfterFix = 210, // not needed: here for historic reasons
+ VRInitError_Driver_HmdDriverIdOutOfBounds = 211,
+ VRInitError_Driver_HmdDisplayMirrored = 212,
+
+ VRInitError_IPC_ServerInitFailed = 300,
+ VRInitError_IPC_ConnectFailed = 301,
+ VRInitError_IPC_SharedStateInitFailed = 302,
+ VRInitError_IPC_CompositorInitFailed = 303,
+ VRInitError_IPC_MutexInitFailed = 304,
+ VRInitError_IPC_Failed = 305,
+ VRInitError_IPC_CompositorConnectFailed = 306,
VRInitError_IPC_CompositorInvalidConnectResponse = 307,
VRInitError_IPC_ConnectFailedAfterMultipleAttempts = 308,
@@ -1085,7 +1101,7 @@ enum EVRInitError
VRInitError_Compositor_ScreenshotsInitFailed = 404,
VRInitError_Compositor_UnableToCreateDevice = 405,
- VRInitError_VendorSpecific_UnableToConnectToOculusRuntime = 1000,
+ VRInitError_VendorSpecific_UnableToConnectToOculusRuntime = 1000,
VRInitError_VendorSpecific_HmdFound_CantOpenDevice = 1101,
VRInitError_VendorSpecific_HmdFound_UnableToRequestConfigStart = 1102,
@@ -1280,17 +1296,20 @@ public:
* Returns platform- and texture-type specific adapter identification so that applications and the
* compositor are creating textures and swap chains on the same GPU. If an error occurs the device
* will be set to 0.
+ * pInstance is an optional parameter that is required only when textureType is TextureType_Vulkan.
* [D3D10/11/12 Only (D3D9 Not Supported)]
* Returns the adapter LUID that identifies the GPU attached to the HMD. The user should
* enumerate all adapters using IDXGIFactory::EnumAdapters and IDXGIAdapter::GetDesc to find
* the adapter with the matching LUID, or use IDXGIFactory4::EnumAdapterByLuid.
* The discovered IDXGIAdapter should be used to create the device and swap chain.
* [Vulkan Only]
- * Returns the vk::PhysicalDevice that should be used by the application.
+ * Returns the VkPhysicalDevice that should be used by the application.
+ * pInstance must be the instance the application will use to query for the VkPhysicalDevice. The application
+ * must create the VkInstance with extensions returned by IVRCompositor::GetVulkanInstanceExtensionsRequired enabled.
* [macOS Only]
* Returns an id<MTLDevice> that should be used by the application.
*/
- virtual void GetOutputDevice( uint64_t *pnDevice, ETextureType textureType ) = 0;
+ virtual void GetOutputDevice( uint64_t *pnDevice, ETextureType textureType, VkInstance_T *pInstance = nullptr ) = 0;
// ------------------------------------
// Display Mode methods
@@ -1508,7 +1527,7 @@ public:
};
-static const char * const IVRSystem_Version = "IVRSystem_016";
+static const char * const IVRSystem_Version = "IVRSystem_017";
}
@@ -1537,6 +1556,7 @@ namespace vr
VRApplicationError_OldApplicationQuitting = 112,
VRApplicationError_TransitionAborted = 113,
VRApplicationError_IsTemplate = 114, // error when you try to call LaunchApplication() on a template type app (use LaunchTemplateApplication)
+ VRApplicationError_SteamVRIsExiting = 115,
VRApplicationError_BufferTooSmall = 200, // The provided buffer was too small to fit the requested data
VRApplicationError_PropertyNotSet = 201, // The requested property was not set
@@ -1567,6 +1587,7 @@ namespace vr
VRApplicationProperty_IsTemplate_Bool = 61,
VRApplicationProperty_IsInstanced_Bool = 62,
VRApplicationProperty_IsInternal_Bool = 63,
+ VRApplicationProperty_WantsCompositorPauseInStandby_Bool = 64,
VRApplicationProperty_LastLaunchTime_Uint64 = 70,
};
@@ -1813,6 +1834,7 @@ namespace vr
static const char * const k_pch_SteamVR_RetailDemo_Bool = "retailDemo";
static const char * const k_pch_SteamVR_IpdOffset_Float = "ipdOffset";
static const char * const k_pch_SteamVR_AllowSupersampleFiltering_Bool = "allowSupersampleFiltering";
+ static const char * const k_pch_SteamVR_EnableLinuxVulkanAsync_Bool = "enableLinuxVulkanAsync";
//-----------------------------------------------------------------------------
// lighthouse keys
@@ -1916,6 +1938,7 @@ namespace vr
static const char * const k_pch_Power_TurnOffControllersTimeout_Float = "turnOffControllersTimeout";
static const char * const k_pch_Power_ReturnToWatchdogTimeout_Float = "returnToWatchdogTimeout";
static const char * const k_pch_Power_AutoLaunchSteamVROnButtonPress = "autoLaunchSteamVROnButtonPress";
+ static const char * const k_pch_Power_PauseCompositorOnStandby_Bool = "pauseCompositorOnStandby";
//-----------------------------------------------------------------------------
// dashboard keys
@@ -2114,6 +2137,7 @@ enum EVRCompositorError
VRCompositorError_SharedTexturesNotSupported = 106,
VRCompositorError_IndexOutOfRange = 107,
VRCompositorError_AlreadySubmitted = 108,
+ VRCompositorError_InvalidBounds = 109,
};
const uint32_t VRCompositor_ReprojectionReason_Cpu = 0x01;
@@ -2362,9 +2386,36 @@ public:
* null. The string will be a space separated list of required device extensions to enable in VkCreateDevice */
virtual uint32_t GetVulkanDeviceExtensionsRequired( VkPhysicalDevice_T *pPhysicalDevice, VR_OUT_STRING() char *pchValue, uint32_t unBufferSize ) = 0;
+ /** [ Vulkan/D3D12 Only ]
+ * There are two purposes for SetExplicitTimingMode:
+ * 1. To get a more accurate GPU timestamp for when the frame begins in Vulkan/D3D12 applications.
+ * 2. (Optional) To avoid having WaitGetPoses access the Vulkan queue so that the queue can be accessed from
+ * another thread while WaitGetPoses is executing.
+ *
+ * More accurate GPU timestamp for the start of the frame is achieved by the application calling
+ * SubmitExplicitTimingData immediately before its first submission to the Vulkan/D3D12 queue.
+ * This is more accurate because normally this GPU timestamp is recorded during WaitGetPoses. In D3D11,
+ * WaitGetPoses queues a GPU timestamp write, but it does not actually get submitted to the GPU until the
+ * application flushes. By using SubmitExplicitTimingData, the timestamp is recorded at the same place for
+ * Vulkan/D3D12 as it is for D3D11, resulting in a more accurate GPU time measurement for the frame.
+ *
+ * Avoiding WaitGetPoses accessing the Vulkan queue can be achieved using SetExplicitTimingMode as well. If this is desired,
+ * the application *MUST* call PostPresentHandoff itself prior to WaitGetPoses. If SetExplicitTimingMode is true and the
+ * application calls PostPresentHandoff, then WaitGetPoses is guaranteed not to access the queue. Note that PostPresentHandoff
+ * and SubmitExplicitTimingData will access the queue, so only WaitGetPoses becomes safe for accessing the queue from another
+ * thread. */
+ virtual void SetExplicitTimingMode( bool bExplicitTimingMode ) = 0;
+
+ /** [ Vulkan/D3D12 Only ]
+ * Submit explicit timing data. When SetExplicitTimingMode is true, this must be called immediately before
+ * the application's first vkQueueSubmit (Vulkan) or ID3D12CommandQueue::ExecuteCommandLists (D3D12) of each frame.
+ * This function will insert a GPU timestamp write just before the application starts its rendering. This function
+ * will perform a vkQueueSubmit on Vulkan so must not be done simultaneously with VkQueue operations on another thread.
+ * Returns VRCompositorError_RequestFailed if SetExplicitTimingMode is not enabled. */
+ virtual EVRCompositorError SubmitExplicitTimingData() = 0;
};
-static const char * const IVRCompositor_Version = "IVRCompositor_020";
+static const char * const IVRCompositor_Version = "IVRCompositor_021";
} // namespace vr
@@ -2949,6 +3000,9 @@ namespace vr
/** Show the message overlay. This will block and return you a result. **/
virtual VRMessageOverlayResponse ShowMessageOverlay( const char* pchText, const char* pchCaption, const char* pchButton0Text, const char* pchButton1Text = nullptr, const char* pchButton2Text = nullptr, const char* pchButton3Text = nullptr ) = 0;
+
+ /** If the calling process owns the overlay and it's open, this will close it. **/
+ virtual void CloseMessageOverlay() = 0;
};
static const char * const IVROverlay_Version = "IVROverlay_016";
@@ -3409,8 +3463,10 @@ namespace vr
*
* This path is to the "root" of the VR API install. That's the directory with
* the "drivers" directory and a platform (i.e. "win32") directory in it, not the directory with the DLL itself.
+ *
+ * pStartupInfo is reserved for future use.
*/
- inline IVRSystem *VR_Init( EVRInitError *peError, EVRApplicationType eApplicationType );
+ inline IVRSystem *VR_Init( EVRInitError *peError, EVRApplicationType eApplicationType, const char *pStartupInfo = nullptr );
/** unloads vrclient.dll. Any interface pointers from the interface are
* invalid after this point */
@@ -3680,17 +3736,17 @@ namespace vr
m_pVRScreenshots = nullptr;
m_pVRDriverManager = nullptr;
}
-
- VR_INTERFACE uint32_t VR_CALLTYPE VR_InitInternal( EVRInitError *peError, EVRApplicationType eApplicationType );
+
+ VR_INTERFACE uint32_t VR_CALLTYPE VR_InitInternal2( EVRInitError *peError, EVRApplicationType eApplicationType, const char *pStartupInfo );
VR_INTERFACE void VR_CALLTYPE VR_ShutdownInternal();
/** Finds the active installation of vrclient.dll and initializes it */
- inline IVRSystem *VR_Init( EVRInitError *peError, EVRApplicationType eApplicationType )
+ inline IVRSystem *VR_Init( EVRInitError *peError, EVRApplicationType eApplicationType, const char *pStartupInfo )
{
IVRSystem *pVRSystem = nullptr;
EVRInitError eError;
- VRToken() = VR_InitInternal( &eError, eApplicationType );
+ VRToken() = VR_InitInternal2( &eError, eApplicationType, pStartupInfo );
COpenVRContext &ctx = OpenVRInternal_ModuleContext();
ctx.Clear();
diff --git a/bin/osx64/OpenVR.framework/Versions/A/Headers/openvr_api.cs b/bin/osx64/OpenVR.framework/Versions/A/Headers/openvr_api.cs
index 2596b37..393a917 100644
--- a/bin/osx64/OpenVR.framework/Versions/A/Headers/openvr_api.cs
+++ b/bin/osx64/OpenVR.framework/Versions/A/Headers/openvr_api.cs
@@ -56,7 +56,7 @@ public struct IVRSystem
internal _GetDXGIOutputInfo GetDXGIOutputInfo;
[UnmanagedFunctionPointer(CallingConvention.StdCall)]
- internal delegate void _GetOutputDevice(ref ulong pnDevice, ETextureType textureType);
+ internal delegate void _GetOutputDevice(ref ulong pnDevice, ETextureType textureType, IntPtr pInstance);
[MarshalAs(UnmanagedType.FunctionPtr)]
internal _GetOutputDevice GetOutputDevice;
@@ -845,6 +845,16 @@ public struct IVRCompositor
[MarshalAs(UnmanagedType.FunctionPtr)]
internal _GetVulkanDeviceExtensionsRequired GetVulkanDeviceExtensionsRequired;
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate void _SetExplicitTimingMode(bool bExplicitTimingMode);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _SetExplicitTimingMode SetExplicitTimingMode;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate EVRCompositorError _SubmitExplicitTimingData();
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _SubmitExplicitTimingData SubmitExplicitTimingData;
+
}
[StructLayout(LayoutKind.Sequential)]
@@ -1250,6 +1260,11 @@ public struct IVROverlay
[MarshalAs(UnmanagedType.FunctionPtr)]
internal _ShowMessageOverlay ShowMessageOverlay;
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate void _CloseMessageOverlay();
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _CloseMessageOverlay CloseMessageOverlay;
+
}
[StructLayout(LayoutKind.Sequential)]
@@ -1551,10 +1566,10 @@ public class CVRSystem
pnAdapterIndex = 0;
FnTable.GetDXGIOutputInfo(ref pnAdapterIndex);
}
- public void GetOutputDevice(ref ulong pnDevice,ETextureType textureType)
+ public void GetOutputDevice(ref ulong pnDevice,ETextureType textureType,IntPtr pInstance)
{
pnDevice = 0;
- FnTable.GetOutputDevice(ref pnDevice,textureType);
+ FnTable.GetOutputDevice(ref pnDevice,textureType,pInstance);
}
public bool IsDisplayOnDesktop()
{
@@ -1667,6 +1682,7 @@ public class CVRSystem
}
public bool PollNextEvent(ref VREvent_t pEvent,uint uncbVREvent)
{
+#if !UNITY_METRO
if ((System.Environment.OSVersion.Platform == System.PlatformID.MacOSX) ||
(System.Environment.OSVersion.Platform == System.PlatformID.Unix))
{
@@ -1679,6 +1695,7 @@ public class CVRSystem
event_packed.Unpack(ref pEvent);
return packed_result;
}
+#endif
bool result = FnTable.PollNextEvent(ref pEvent,uncbVREvent);
return result;
}
@@ -1711,6 +1728,7 @@ public class CVRSystem
}
public bool GetControllerState(uint unControllerDeviceIndex,ref VRControllerState_t pControllerState,uint unControllerStateSize)
{
+#if !UNITY_METRO
if ((System.Environment.OSVersion.Platform == System.PlatformID.MacOSX) ||
(System.Environment.OSVersion.Platform == System.PlatformID.Unix))
{
@@ -1723,6 +1741,7 @@ public class CVRSystem
state_packed.Unpack(ref pControllerState);
return packed_result;
}
+#endif
bool result = FnTable.GetControllerState(unControllerDeviceIndex,ref pControllerState,unControllerStateSize);
return result;
}
@@ -1740,6 +1759,7 @@ public class CVRSystem
}
public bool GetControllerStateWithPose(ETrackingUniverseOrigin eOrigin,uint unControllerDeviceIndex,ref VRControllerState_t pControllerState,uint unControllerStateSize,ref TrackedDevicePose_t pTrackedDevicePose)
{
+#if !UNITY_METRO
if ((System.Environment.OSVersion.Platform == System.PlatformID.MacOSX) ||
(System.Environment.OSVersion.Platform == System.PlatformID.Unix))
{
@@ -1752,6 +1772,7 @@ public class CVRSystem
state_packed.Unpack(ref pControllerState);
return packed_result;
}
+#endif
bool result = FnTable.GetControllerStateWithPose(eOrigin,unControllerDeviceIndex,ref pControllerState,unControllerStateSize,ref pTrackedDevicePose);
return result;
}
@@ -2439,6 +2460,15 @@ public class CVRCompositor
uint result = FnTable.GetVulkanDeviceExtensionsRequired(pPhysicalDevice,pchValue,unBufferSize);
return result;
}
+ public void SetExplicitTimingMode(bool bExplicitTimingMode)
+ {
+ FnTable.SetExplicitTimingMode(bExplicitTimingMode);
+ }
+ public EVRCompositorError SubmitExplicitTimingData()
+ {
+ EVRCompositorError result = FnTable.SubmitExplicitTimingData();
+ return result;
+ }
}
@@ -2705,6 +2735,7 @@ public class CVROverlay
}
public bool PollNextOverlayEvent(ulong ulOverlayHandle,ref VREvent_t pEvent,uint uncbVREvent)
{
+#if !UNITY_METRO
if ((System.Environment.OSVersion.Platform == System.PlatformID.MacOSX) ||
(System.Environment.OSVersion.Platform == System.PlatformID.Unix))
{
@@ -2717,6 +2748,7 @@ public class CVROverlay
event_packed.Unpack(ref pEvent);
return packed_result;
}
+#endif
bool result = FnTable.PollNextOverlayEvent(ulOverlayHandle,ref pEvent,uncbVREvent);
return result;
}
@@ -2895,6 +2927,10 @@ public class CVROverlay
VRMessageOverlayResponse result = FnTable.ShowMessageOverlay(pchText,pchCaption,pchButton0Text,pchButton1Text,pchButton2Text,pchButton3Text);
return result;
}
+ public void CloseMessageOverlay()
+ {
+ FnTable.CloseMessageOverlay();
+ }
}
@@ -2981,6 +3017,7 @@ public class CVRRenderModels
}
public bool GetComponentState(string pchRenderModelName,string pchComponentName,ref VRControllerState_t pControllerState,ref RenderModel_ControllerMode_State_t pState,ref RenderModel_ComponentState_t pComponentState)
{
+#if !UNITY_METRO
if ((System.Environment.OSVersion.Platform == System.PlatformID.MacOSX) ||
(System.Environment.OSVersion.Platform == System.PlatformID.Unix))
{
@@ -2993,6 +3030,7 @@ public class CVRRenderModels
state_packed.Unpack(ref pControllerState);
return packed_result;
}
+#endif
bool result = FnTable.GetComponentState(pchRenderModelName,pchComponentName,ref pControllerState,ref pState,ref pComponentState);
return result;
}
@@ -3344,6 +3382,7 @@ public enum ETrackedDeviceProperty
Prop_DriverDirectModeSendsVsyncEvents_Bool = 2043,
Prop_DisplayDebugMode_Bool = 2044,
Prop_GraphicsAdapterLuid_Uint64 = 2045,
+ Prop_DriverProvidedChaperonePath_String = 2048,
Prop_AttachedDeviceId_String = 3000,
Prop_SupportedButtons_Uint64 = 3001,
Prop_Axis0Type_Int32 = 3002,
@@ -3401,6 +3440,7 @@ public enum EVRSubmitFlags
Submit_LensDistortionAlreadyApplied = 1,
Submit_GlRenderBuffer = 2,
Submit_Reserved = 4,
+ Submit_TextureWithPose = 8,
}
public enum EVRState
{
@@ -3429,6 +3469,8 @@ public enum EVREventType
VREvent_WatchdogWakeUpRequested = 109,
VREvent_LensDistortionChanged = 110,
VREvent_PropertyChanged = 111,
+ VREvent_WirelessDisconnect = 112,
+ VREvent_WirelessReconnect = 113,
VREvent_ButtonPress = 200,
VREvent_ButtonUnpress = 201,
VREvent_ButtonTouch = 202,
@@ -3526,6 +3568,7 @@ public enum EVREventType
VREvent_PerformanceTest_DisableCapture = 1601,
VREvent_PerformanceTest_FidelityLevel = 1602,
VREvent_MessageOverlay_Closed = 1650,
+ VREvent_MessageOverlayCloseRequested = 1651,
VREvent_VendorSpecific_Reserved_Start = 10000,
VREvent_VendorSpecific_Reserved_End = 19999,
}
@@ -3683,6 +3726,9 @@ public enum EVRInitError
Init_VRDashboardStartupFailed = 134,
Init_VRHomeNotFound = 135,
Init_VRHomeStartupFailed = 136,
+ Init_RebootingBusy = 137,
+ Init_FirmwareUpdateBusy = 138,
+ Init_FirmwareRecoveryBusy = 139,
Driver_Failed = 200,
Driver_Unknown = 201,
Driver_HmdUnknown = 202,
@@ -3785,6 +3831,7 @@ public enum EVRApplicationError
OldApplicationQuitting = 112,
TransitionAborted = 113,
IsTemplate = 114,
+ SteamVRIsExiting = 115,
BufferTooSmall = 200,
PropertyNotSet = 201,
UnknownProperty = 202,
@@ -3806,6 +3853,7 @@ public enum EVRApplicationProperty
IsTemplate_Bool = 61,
IsInstanced_Bool = 62,
IsInternal_Bool = 63,
+ WantsCompositorPauseInStandby_Bool = 64,
LastLaunchTime_Uint64 = 70,
}
public enum EVRApplicationTransitionState
@@ -3850,6 +3898,7 @@ public enum EVRCompositorError
SharedTexturesNotSupported = 106,
IndexOutOfRange = 107,
AlreadySubmitted = 108,
+ InvalidBounds = 109,
}
public enum VROverlayInputMethod
{
@@ -4120,6 +4169,10 @@ public enum EVRScreenshotError
public float uMax;
public float vMax;
}
+[StructLayout(LayoutKind.Sequential)] public struct VRTextureWithPose_t
+{
+ public HmdMatrix34_t mDeviceToAbsoluteTracking;
+}
[StructLayout(LayoutKind.Sequential)] public struct VRVulkanTextureData_t
{
public ulong m_nImage;
@@ -4601,7 +4654,7 @@ public class OpenVR
public const uint k_unControllerStateAxisCount = 5;
public const ulong k_ulOverlayHandleInvalid = 0;
public const uint k_unScreenshotHandleInvalid = 0;
- public const string IVRSystem_Version = "IVRSystem_016";
+ public const string IVRSystem_Version = "IVRSystem_017";
public const string IVRExtendedDisplay_Version = "IVRExtendedDisplay_001";
public const string IVRTrackedCamera_Version = "IVRTrackedCamera_003";
public const uint k_unMaxApplicationKeyLength = 128;
@@ -4610,7 +4663,7 @@ public class OpenVR
public const string IVRApplications_Version = "IVRApplications_006";
public const string IVRChaperone_Version = "IVRChaperone_003";
public const string IVRChaperoneSetup_Version = "IVRChaperoneSetup_005";
- public const string IVRCompositor_Version = "IVRCompositor_020";
+ public const string IVRCompositor_Version = "IVRCompositor_021";
public const uint k_unVROverlayMaxKeyLength = 128;
public const uint k_unVROverlayMaxNameLength = 128;
public const uint k_unMaxOverlayCount = 64;
@@ -4669,6 +4722,7 @@ public class OpenVR
public const string k_pch_SteamVR_RetailDemo_Bool = "retailDemo";
public const string k_pch_SteamVR_IpdOffset_Float = "ipdOffset";
public const string k_pch_SteamVR_AllowSupersampleFiltering_Bool = "allowSupersampleFiltering";
+ public const string k_pch_SteamVR_EnableLinuxVulkanAsync_Bool = "enableLinuxVulkanAsync";
public const string k_pch_Lighthouse_Section = "driver_lighthouse";
public const string k_pch_Lighthouse_DisableIMU_Bool = "disableimu";
public const string k_pch_Lighthouse_UseDisambiguation_String = "usedisambiguation";
@@ -4742,6 +4796,7 @@ public class OpenVR
public const string k_pch_Power_TurnOffControllersTimeout_Float = "turnOffControllersTimeout";
public const string k_pch_Power_ReturnToWatchdogTimeout_Float = "returnToWatchdogTimeout";
public const string k_pch_Power_AutoLaunchSteamVROnButtonPress = "autoLaunchSteamVROnButtonPress";
+ public const string k_pch_Power_PauseCompositorOnStandby_Bool = "pauseCompositorOnStandby";
public const string k_pch_Dashboard_Section = "dashboard";
public const string k_pch_Dashboard_EnableDashboard_Bool = "enableDashboard";
public const string k_pch_Dashboard_ArcadeMode_Bool = "arcadeMode";
diff --git a/bin/osx64/OpenVR.framework/Versions/A/Headers/openvr_api.json b/bin/osx64/OpenVR.framework/Versions/A/Headers/openvr_api.json
index bd76ded..8fa11a6 100644
--- a/bin/osx64/OpenVR.framework/Versions/A/Headers/openvr_api.json
+++ b/bin/osx64/OpenVR.framework/Versions/A/Headers/openvr_api.json
@@ -157,6 +157,7 @@
,{"name": "Prop_DriverDirectModeSendsVsyncEvents_Bool","value": "2043"}
,{"name": "Prop_DisplayDebugMode_Bool","value": "2044"}
,{"name": "Prop_GraphicsAdapterLuid_Uint64","value": "2045"}
+ ,{"name": "Prop_DriverProvidedChaperonePath_String","value": "2048"}
,{"name": "Prop_AttachedDeviceId_String","value": "3000"}
,{"name": "Prop_SupportedButtons_Uint64","value": "3001"}
,{"name": "Prop_Axis0Type_Int32","value": "3002"}
@@ -212,6 +213,7 @@
,{"name": "Submit_LensDistortionAlreadyApplied","value": "1"}
,{"name": "Submit_GlRenderBuffer","value": "2"}
,{"name": "Submit_Reserved","value": "4"}
+ ,{"name": "Submit_TextureWithPose","value": "8"}
]}
, {"enumname": "vr::EVRState","values": [
{"name": "VRState_Undefined","value": "-1"}
@@ -238,6 +240,8 @@
,{"name": "VREvent_WatchdogWakeUpRequested","value": "109"}
,{"name": "VREvent_LensDistortionChanged","value": "110"}
,{"name": "VREvent_PropertyChanged","value": "111"}
+ ,{"name": "VREvent_WirelessDisconnect","value": "112"}
+ ,{"name": "VREvent_WirelessReconnect","value": "113"}
,{"name": "VREvent_ButtonPress","value": "200"}
,{"name": "VREvent_ButtonUnpress","value": "201"}
,{"name": "VREvent_ButtonTouch","value": "202"}
@@ -335,6 +339,7 @@
,{"name": "VREvent_PerformanceTest_DisableCapture","value": "1601"}
,{"name": "VREvent_PerformanceTest_FidelityLevel","value": "1602"}
,{"name": "VREvent_MessageOverlay_Closed","value": "1650"}
+ ,{"name": "VREvent_MessageOverlayCloseRequested","value": "1651"}
,{"name": "VREvent_VendorSpecific_Reserved_Start","value": "10000"}
,{"name": "VREvent_VendorSpecific_Reserved_End","value": "19999"}
]}
@@ -480,6 +485,9 @@
,{"name": "VRInitError_Init_VRDashboardStartupFailed","value": "134"}
,{"name": "VRInitError_Init_VRHomeNotFound","value": "135"}
,{"name": "VRInitError_Init_VRHomeStartupFailed","value": "136"}
+ ,{"name": "VRInitError_Init_RebootingBusy","value": "137"}
+ ,{"name": "VRInitError_Init_FirmwareUpdateBusy","value": "138"}
+ ,{"name": "VRInitError_Init_FirmwareRecoveryBusy","value": "139"}
,{"name": "VRInitError_Driver_Failed","value": "200"}
,{"name": "VRInitError_Driver_Unknown","value": "201"}
,{"name": "VRInitError_Driver_HmdUnknown","value": "202"}
@@ -577,6 +585,7 @@
,{"name": "VRApplicationError_OldApplicationQuitting","value": "112"}
,{"name": "VRApplicationError_TransitionAborted","value": "113"}
,{"name": "VRApplicationError_IsTemplate","value": "114"}
+ ,{"name": "VRApplicationError_SteamVRIsExiting","value": "115"}
,{"name": "VRApplicationError_BufferTooSmall","value": "200"}
,{"name": "VRApplicationError_PropertyNotSet","value": "201"}
,{"name": "VRApplicationError_UnknownProperty","value": "202"}
@@ -597,6 +606,7 @@
,{"name": "VRApplicationProperty_IsTemplate_Bool","value": "61"}
,{"name": "VRApplicationProperty_IsInstanced_Bool","value": "62"}
,{"name": "VRApplicationProperty_IsInternal_Bool","value": "63"}
+ ,{"name": "VRApplicationProperty_WantsCompositorPauseInStandby_Bool","value": "64"}
,{"name": "VRApplicationProperty_LastLaunchTime_Uint64","value": "70"}
]}
, {"enumname": "vr::EVRApplicationTransitionState","values": [
@@ -636,6 +646,7 @@
,{"name": "VRCompositorError_SharedTexturesNotSupported","value": "106"}
,{"name": "VRCompositorError_IndexOutOfRange","value": "107"}
,{"name": "VRCompositorError_AlreadySubmitted","value": "108"}
+ ,{"name": "VRCompositorError_InvalidBounds","value": "109"}
]}
, {"enumname": "vr::VROverlayInputMethod","values": [
{"name": "VROverlayInputMethod_None","value": "0"}
@@ -794,7 +805,7 @@
,{
"constname": "k_unScreenshotHandleInvalid","consttype": "const uint32_t", "constval": "0"}
,{
- "constname": "IVRSystem_Version","consttype": "const char *const", "constval": "IVRSystem_016"}
+ "constname": "IVRSystem_Version","consttype": "const char *const", "constval": "IVRSystem_017"}
,{
"constname": "IVRExtendedDisplay_Version","consttype": "const char *const", "constval": "IVRExtendedDisplay_001"}
,{
@@ -812,7 +823,7 @@
,{
"constname": "IVRChaperoneSetup_Version","consttype": "const char *const", "constval": "IVRChaperoneSetup_005"}
,{
- "constname": "IVRCompositor_Version","consttype": "const char *const", "constval": "IVRCompositor_020"}
+ "constname": "IVRCompositor_Version","consttype": "const char *const", "constval": "IVRCompositor_021"}
,{
"constname": "k_unVROverlayMaxKeyLength","consttype": "const uint32_t", "constval": "128"}
,{
@@ -930,6 +941,8 @@
,{
"constname": "k_pch_SteamVR_AllowSupersampleFiltering_Bool","consttype": "const char *const", "constval": "allowSupersampleFiltering"}
,{
+ "constname": "k_pch_SteamVR_EnableLinuxVulkanAsync_Bool","consttype": "const char *const", "constval": "enableLinuxVulkanAsync"}
+,{
"constname": "k_pch_Lighthouse_Section","consttype": "const char *const", "constval": "driver_lighthouse"}
,{
"constname": "k_pch_Lighthouse_DisableIMU_Bool","consttype": "const char *const", "constval": "disableimu"}
@@ -1076,6 +1089,8 @@
,{
"constname": "k_pch_Power_AutoLaunchSteamVROnButtonPress","consttype": "const char *const", "constval": "autoLaunchSteamVROnButtonPress"}
,{
+ "constname": "k_pch_Power_PauseCompositorOnStandby_Bool","consttype": "const char *const", "constval": "pauseCompositorOnStandby"}
+,{
"constname": "k_pch_Dashboard_Section","consttype": "const char *const", "constval": "dashboard"}
,{
"constname": "k_pch_Dashboard_EnableDashboard_Bool","consttype": "const char *const", "constval": "enableDashboard"}
@@ -1139,6 +1154,8 @@
{ "fieldname": "vMin", "fieldtype": "float"},
{ "fieldname": "uMax", "fieldtype": "float"},
{ "fieldname": "vMax", "fieldtype": "float"}]}
+,{"struct": "vr::VRTextureWithPose_t","fields": [
+{ "fieldname": "mDeviceToAbsoluteTracking", "fieldtype": "struct vr::HmdMatrix34_t"}]}
,{"struct": "vr::VRVulkanTextureData_t","fields": [
{ "fieldname": "m_nImage", "fieldtype": "uint64_t"},
{ "fieldname": "m_pDevice", "fieldtype": "struct VkDevice_T *"},
@@ -1458,7 +1475,8 @@
"returntype": "void",
"params": [
{ "paramname": "pnDevice" ,"paramtype": "uint64_t *"},
-{ "paramname": "textureType" ,"paramtype": "vr::ETextureType"}
+{ "paramname": "textureType" ,"paramtype": "vr::ETextureType"},
+{ "paramname": "pInstance" ,"paramtype": "struct VkInstance_T *"}
]
}
,{
@@ -2715,6 +2733,19 @@
]
}
,{
+ "classname": "vr::IVRCompositor",
+ "methodname": "SetExplicitTimingMode",
+ "returntype": "void",
+ "params": [
+{ "paramname": "bExplicitTimingMode" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "vr::IVRCompositor",
+ "methodname": "SubmitExplicitTimingData",
+ "returntype": "vr::EVRCompositorError"
+}
+,{
"classname": "vr::IVROverlay",
"methodname": "FindOverlay",
"returntype": "vr::EVROverlayError",
@@ -3467,6 +3498,11 @@
]
}
,{
+ "classname": "vr::IVROverlay",
+ "methodname": "CloseMessageOverlay",
+ "returntype": "void"
+}
+,{
"classname": "vr::IVRRenderModels",
"methodname": "LoadRenderModel_Async",
"returntype": "vr::EVRRenderModelError",
diff --git a/bin/osx64/OpenVR.framework/Versions/A/Headers/openvr_capi.h b/bin/osx64/OpenVR.framework/Versions/A/Headers/openvr_capi.h
index a6685e5..50f8958 100644
--- a/bin/osx64/OpenVR.framework/Versions/A/Headers/openvr_capi.h
+++ b/bin/osx64/OpenVR.framework/Versions/A/Headers/openvr_capi.h
@@ -56,6 +56,9 @@ typedef char bool;
typedef uint64_t PropertyContainerHandle_t;
typedef uint32_t PropertyTypeTag_t;
+typedef uint64_t VRActionHandle_t;
+typedef uint64_t VRActionSetHandle_t;
+typedef uint64_t VRInputOriginHandle_t;
// OpenVR Constants
@@ -84,7 +87,7 @@ static const unsigned int k_unMaxPropertyStringSize = 32768;
static const unsigned int k_unControllerStateAxisCount = 5;
static const unsigned long k_ulOverlayHandleInvalid = 0;
static const unsigned int k_unScreenshotHandleInvalid = 0;
-static const char * IVRSystem_Version = "IVRSystem_016";
+static const char * IVRSystem_Version = "IVRSystem_017";
static const char * IVRExtendedDisplay_Version = "IVRExtendedDisplay_001";
static const char * IVRTrackedCamera_Version = "IVRTrackedCamera_003";
static const unsigned int k_unMaxApplicationKeyLength = 128;
@@ -93,7 +96,7 @@ static const char * k_pch_MimeType_GameTheater = "vr/game_theater";
static const char * IVRApplications_Version = "IVRApplications_006";
static const char * IVRChaperone_Version = "IVRChaperone_003";
static const char * IVRChaperoneSetup_Version = "IVRChaperoneSetup_005";
-static const char * IVRCompositor_Version = "IVRCompositor_020";
+static const char * IVRCompositor_Version = "IVRCompositor_021";
static const unsigned int k_unVROverlayMaxKeyLength = 128;
static const unsigned int k_unVROverlayMaxNameLength = 128;
static const unsigned int k_unMaxOverlayCount = 64;
@@ -152,6 +155,7 @@ static const char * k_pch_SteamVR_CycleBackgroundImageTimeSec_Int32 = "CycleBack
static const char * k_pch_SteamVR_RetailDemo_Bool = "retailDemo";
static const char * k_pch_SteamVR_IpdOffset_Float = "ipdOffset";
static const char * k_pch_SteamVR_AllowSupersampleFiltering_Bool = "allowSupersampleFiltering";
+static const char * k_pch_SteamVR_EnableLinuxVulkanAsync_Bool = "enableLinuxVulkanAsync";
static const char * k_pch_Lighthouse_Section = "driver_lighthouse";
static const char * k_pch_Lighthouse_DisableIMU_Bool = "disableimu";
static const char * k_pch_Lighthouse_UseDisambiguation_String = "usedisambiguation";
@@ -225,6 +229,7 @@ static const char * k_pch_Power_TurnOffScreensTimeout_Float = "turnOffScreensTim
static const char * k_pch_Power_TurnOffControllersTimeout_Float = "turnOffControllersTimeout";
static const char * k_pch_Power_ReturnToWatchdogTimeout_Float = "returnToWatchdogTimeout";
static const char * k_pch_Power_AutoLaunchSteamVROnButtonPress = "autoLaunchSteamVROnButtonPress";
+static const char * k_pch_Power_PauseCompositorOnStandby_Bool = "pauseCompositorOnStandby";
static const char * k_pch_Dashboard_Section = "dashboard";
static const char * k_pch_Dashboard_EnableDashboard_Bool = "enableDashboard";
static const char * k_pch_Dashboard_ArcadeMode_Bool = "arcadeMode";
@@ -376,6 +381,7 @@ typedef enum ETrackedDeviceProperty
ETrackedDeviceProperty_Prop_DriverDirectModeSendsVsyncEvents_Bool = 2043,
ETrackedDeviceProperty_Prop_DisplayDebugMode_Bool = 2044,
ETrackedDeviceProperty_Prop_GraphicsAdapterLuid_Uint64 = 2045,
+ ETrackedDeviceProperty_Prop_DriverProvidedChaperonePath_String = 2048,
ETrackedDeviceProperty_Prop_AttachedDeviceId_String = 3000,
ETrackedDeviceProperty_Prop_SupportedButtons_Uint64 = 3001,
ETrackedDeviceProperty_Prop_Axis0Type_Int32 = 3002,
@@ -435,6 +441,7 @@ typedef enum EVRSubmitFlags
EVRSubmitFlags_Submit_LensDistortionAlreadyApplied = 1,
EVRSubmitFlags_Submit_GlRenderBuffer = 2,
EVRSubmitFlags_Submit_Reserved = 4,
+ EVRSubmitFlags_Submit_TextureWithPose = 8,
} EVRSubmitFlags;
typedef enum EVRState
@@ -465,6 +472,8 @@ typedef enum EVREventType
EVREventType_VREvent_WatchdogWakeUpRequested = 109,
EVREventType_VREvent_LensDistortionChanged = 110,
EVREventType_VREvent_PropertyChanged = 111,
+ EVREventType_VREvent_WirelessDisconnect = 112,
+ EVREventType_VREvent_WirelessReconnect = 113,
EVREventType_VREvent_ButtonPress = 200,
EVREventType_VREvent_ButtonUnpress = 201,
EVREventType_VREvent_ButtonTouch = 202,
@@ -562,6 +571,7 @@ typedef enum EVREventType
EVREventType_VREvent_PerformanceTest_DisableCapture = 1601,
EVREventType_VREvent_PerformanceTest_FidelityLevel = 1602,
EVREventType_VREvent_MessageOverlay_Closed = 1650,
+ EVREventType_VREvent_MessageOverlayCloseRequested = 1651,
EVREventType_VREvent_VendorSpecific_Reserved_Start = 10000,
EVREventType_VREvent_VendorSpecific_Reserved_End = 19999,
} EVREventType;
@@ -731,6 +741,9 @@ typedef enum EVRInitError
EVRInitError_VRInitError_Init_VRDashboardStartupFailed = 134,
EVRInitError_VRInitError_Init_VRHomeNotFound = 135,
EVRInitError_VRInitError_Init_VRHomeStartupFailed = 136,
+ EVRInitError_VRInitError_Init_RebootingBusy = 137,
+ EVRInitError_VRInitError_Init_FirmwareUpdateBusy = 138,
+ EVRInitError_VRInitError_Init_FirmwareRecoveryBusy = 139,
EVRInitError_VRInitError_Driver_Failed = 200,
EVRInitError_VRInitError_Driver_Unknown = 201,
EVRInitError_VRInitError_Driver_HmdUnknown = 202,
@@ -838,6 +851,7 @@ typedef enum EVRApplicationError
EVRApplicationError_VRApplicationError_OldApplicationQuitting = 112,
EVRApplicationError_VRApplicationError_TransitionAborted = 113,
EVRApplicationError_VRApplicationError_IsTemplate = 114,
+ EVRApplicationError_VRApplicationError_SteamVRIsExiting = 115,
EVRApplicationError_VRApplicationError_BufferTooSmall = 200,
EVRApplicationError_VRApplicationError_PropertyNotSet = 201,
EVRApplicationError_VRApplicationError_UnknownProperty = 202,
@@ -860,6 +874,7 @@ typedef enum EVRApplicationProperty
EVRApplicationProperty_VRApplicationProperty_IsTemplate_Bool = 61,
EVRApplicationProperty_VRApplicationProperty_IsInstanced_Bool = 62,
EVRApplicationProperty_VRApplicationProperty_IsInternal_Bool = 63,
+ EVRApplicationProperty_VRApplicationProperty_WantsCompositorPauseInStandby_Bool = 64,
EVRApplicationProperty_VRApplicationProperty_LastLaunchTime_Uint64 = 70,
} EVRApplicationProperty;
@@ -909,6 +924,7 @@ typedef enum EVRCompositorError
EVRCompositorError_VRCompositorError_SharedTexturesNotSupported = 106,
EVRCompositorError_VRCompositorError_IndexOutOfRange = 107,
EVRCompositorError_VRCompositorError_AlreadySubmitted = 108,
+ EVRCompositorError_VRCompositorError_InvalidBounds = 109,
} EVRCompositorError;
typedef enum VROverlayInputMethod
@@ -1174,6 +1190,11 @@ typedef struct VRTextureBounds_t
float vMax;
} VRTextureBounds_t;
+typedef struct VRTextureWithPose_t
+{
+ struct HmdMatrix34_t mDeviceToAbsoluteTracking;
+} VRTextureWithPose_t;
+
typedef struct VRVulkanTextureData_t
{
uint64_t m_nImage;
@@ -1572,7 +1593,7 @@ struct VR_IVRSystem_FnTable
bool (OPENVR_FNTABLE_CALLTYPE *GetTimeSinceLastVsync)(float * pfSecondsSinceLastVsync, uint64_t * pulFrameCounter);
int32_t (OPENVR_FNTABLE_CALLTYPE *GetD3D9AdapterIndex)();
void (OPENVR_FNTABLE_CALLTYPE *GetDXGIOutputInfo)(int32_t * pnAdapterIndex);
- void (OPENVR_FNTABLE_CALLTYPE *GetOutputDevice)(uint64_t * pnDevice, ETextureType textureType);
+ void (OPENVR_FNTABLE_CALLTYPE *GetOutputDevice)(uint64_t * pnDevice, ETextureType textureType, struct VkInstance_T * pInstance);
bool (OPENVR_FNTABLE_CALLTYPE *IsDisplayOnDesktop)();
bool (OPENVR_FNTABLE_CALLTYPE *SetDisplayVisibility)(bool bIsVisibleOnDesktop);
void (OPENVR_FNTABLE_CALLTYPE *GetDeviceToAbsoluteTrackingPose)(ETrackingUniverseOrigin eOrigin, float fPredictedSecondsToPhotonsFromNow, struct TrackedDevicePose_t * pTrackedDevicePoseArray, uint32_t unTrackedDevicePoseArrayCount);
@@ -1748,6 +1769,8 @@ struct VR_IVRCompositor_FnTable
void (OPENVR_FNTABLE_CALLTYPE *UnlockGLSharedTextureForAccess)(glSharedTextureHandle_t glSharedTextureHandle);
uint32_t (OPENVR_FNTABLE_CALLTYPE *GetVulkanInstanceExtensionsRequired)(char * pchValue, uint32_t unBufferSize);
uint32_t (OPENVR_FNTABLE_CALLTYPE *GetVulkanDeviceExtensionsRequired)(struct VkPhysicalDevice_T * pPhysicalDevice, char * pchValue, uint32_t unBufferSize);
+ void (OPENVR_FNTABLE_CALLTYPE *SetExplicitTimingMode)(bool bExplicitTimingMode);
+ EVRCompositorError (OPENVR_FNTABLE_CALLTYPE *SubmitExplicitTimingData)();
};
struct VR_IVROverlay_FnTable
@@ -1832,6 +1855,7 @@ struct VR_IVROverlay_FnTable
EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetOverlayIntersectionMask)(VROverlayHandle_t ulOverlayHandle, struct VROverlayIntersectionMaskPrimitive_t * pMaskPrimitives, uint32_t unNumMaskPrimitives, uint32_t unPrimitiveSize);
EVROverlayError (OPENVR_FNTABLE_CALLTYPE *GetOverlayFlags)(VROverlayHandle_t ulOverlayHandle, uint32_t * pFlags);
VRMessageOverlayResponse (OPENVR_FNTABLE_CALLTYPE *ShowMessageOverlay)(char * pchText, char * pchCaption, char * pchButton0Text, char * pchButton1Text, char * pchButton2Text, char * pchButton3Text);
+ void (OPENVR_FNTABLE_CALLTYPE *CloseMessageOverlay)();
};
struct VR_IVRRenderModels_FnTable
diff --git a/bin/osx64/OpenVR.framework/Versions/A/Headers/openvr_driver.h b/bin/osx64/OpenVR.framework/Versions/A/Headers/openvr_driver.h
index bfe24c0..7ab997e 100644
--- a/bin/osx64/OpenVR.framework/Versions/A/Headers/openvr_driver.h
+++ b/bin/osx64/OpenVR.framework/Versions/A/Headers/openvr_driver.h
@@ -315,6 +315,7 @@ enum ETrackedDeviceProperty
Prop_DriverDirectModeSendsVsyncEvents_Bool = 2043,
Prop_DisplayDebugMode_Bool = 2044,
Prop_GraphicsAdapterLuid_Uint64 = 2045,
+ Prop_DriverProvidedChaperonePath_String = 2048,
// Properties that are unique to TrackedDeviceClass_Controller
Prop_AttachedDeviceId_String = 3000,
@@ -392,6 +393,11 @@ struct VRTextureBounds_t
float uMax, vMax;
};
+/** Allows specifying pose used to render provided scene texture (if different from value returned by WaitGetPoses). */
+struct VRTextureWithPose_t : public Texture_t
+{
+ HmdMatrix34_t mDeviceToAbsoluteTracking; // Actual pose used to render scene textures.
+};
/** Allows the application to control how scene textures are used by the compositor when calling Submit. */
enum EVRSubmitFlags
@@ -409,6 +415,9 @@ enum EVRSubmitFlags
// Do not use
Submit_Reserved = 0x04,
+
+ // Set to indicate that pTexture is a pointer to a VRTextureWithPose_t.
+ Submit_TextureWithPose = 0x08,
};
/** Data required for passing Vulkan textures to IVRCompositor::Submit.
@@ -464,6 +473,8 @@ enum EVREventType
VREvent_WatchdogWakeUpRequested = 109,
VREvent_LensDistortionChanged = 110,
VREvent_PropertyChanged = 111,
+ VREvent_WirelessDisconnect = 112,
+ VREvent_WirelessReconnect = 113,
VREvent_ButtonPress = 200, // data is controller
VREvent_ButtonUnpress = 201, // data is controller
@@ -583,6 +594,7 @@ enum EVREventType
VREvent_PerformanceTest_FidelityLevel = 1602,
VREvent_MessageOverlay_Closed = 1650,
+ VREvent_MessageOverlayCloseRequested = 1651,
// Vendors are free to expose private events in this reserved region
VREvent_VendorSpecific_Reserved_Start = 10000,
@@ -1016,65 +1028,69 @@ enum EVRInitError
VRInitError_None = 0,
VRInitError_Unknown = 1,
- VRInitError_Init_InstallationNotFound = 100,
- VRInitError_Init_InstallationCorrupt = 101,
- VRInitError_Init_VRClientDLLNotFound = 102,
- VRInitError_Init_FileNotFound = 103,
- VRInitError_Init_FactoryNotFound = 104,
- VRInitError_Init_InterfaceNotFound = 105,
- VRInitError_Init_InvalidInterface = 106,
- VRInitError_Init_UserConfigDirectoryInvalid = 107,
- VRInitError_Init_HmdNotFound = 108,
- VRInitError_Init_NotInitialized = 109,
- VRInitError_Init_PathRegistryNotFound = 110,
- VRInitError_Init_NoConfigPath = 111,
- VRInitError_Init_NoLogPath = 112,
- VRInitError_Init_PathRegistryNotWritable = 113,
- VRInitError_Init_AppInfoInitFailed = 114,
- VRInitError_Init_Retry = 115, // Used internally to cause retries to vrserver
- VRInitError_Init_InitCanceledByUser = 116, // The calling application should silently exit. The user canceled app startup
- VRInitError_Init_AnotherAppLaunching = 117,
- VRInitError_Init_SettingsInitFailed = 118,
- VRInitError_Init_ShuttingDown = 119,
- VRInitError_Init_TooManyObjects = 120,
- VRInitError_Init_NoServerForBackgroundApp = 121,
- VRInitError_Init_NotSupportedWithCompositor = 122,
- VRInitError_Init_NotAvailableToUtilityApps = 123,
- VRInitError_Init_Internal = 124,
- VRInitError_Init_HmdDriverIdIsNone = 125,
- VRInitError_Init_HmdNotFoundPresenceFailed = 126,
- VRInitError_Init_VRMonitorNotFound = 127,
- VRInitError_Init_VRMonitorStartupFailed = 128,
- VRInitError_Init_LowPowerWatchdogNotSupported = 129,
- VRInitError_Init_InvalidApplicationType = 130,
- VRInitError_Init_NotAvailableToWatchdogApps = 131,
- VRInitError_Init_WatchdogDisabledInSettings = 132,
- VRInitError_Init_VRDashboardNotFound = 133,
- VRInitError_Init_VRDashboardStartupFailed = 134,
- VRInitError_Init_VRHomeNotFound = 135,
- VRInitError_Init_VRHomeStartupFailed = 136,
-
- VRInitError_Driver_Failed = 200,
- VRInitError_Driver_Unknown = 201,
- VRInitError_Driver_HmdUnknown = 202,
- VRInitError_Driver_NotLoaded = 203,
- VRInitError_Driver_RuntimeOutOfDate = 204,
- VRInitError_Driver_HmdInUse = 205,
- VRInitError_Driver_NotCalibrated = 206,
- VRInitError_Driver_CalibrationInvalid = 207,
- VRInitError_Driver_HmdDisplayNotFound = 208,
+ VRInitError_Init_InstallationNotFound = 100,
+ VRInitError_Init_InstallationCorrupt = 101,
+ VRInitError_Init_VRClientDLLNotFound = 102,
+ VRInitError_Init_FileNotFound = 103,
+ VRInitError_Init_FactoryNotFound = 104,
+ VRInitError_Init_InterfaceNotFound = 105,
+ VRInitError_Init_InvalidInterface = 106,
+ VRInitError_Init_UserConfigDirectoryInvalid = 107,
+ VRInitError_Init_HmdNotFound = 108,
+ VRInitError_Init_NotInitialized = 109,
+ VRInitError_Init_PathRegistryNotFound = 110,
+ VRInitError_Init_NoConfigPath = 111,
+ VRInitError_Init_NoLogPath = 112,
+ VRInitError_Init_PathRegistryNotWritable = 113,
+ VRInitError_Init_AppInfoInitFailed = 114,
+ VRInitError_Init_Retry = 115, // Used internally to cause retries to vrserver
+ VRInitError_Init_InitCanceledByUser = 116, // The calling application should silently exit. The user canceled app startup
+ VRInitError_Init_AnotherAppLaunching = 117,
+ VRInitError_Init_SettingsInitFailed = 118,
+ VRInitError_Init_ShuttingDown = 119,
+ VRInitError_Init_TooManyObjects = 120,
+ VRInitError_Init_NoServerForBackgroundApp = 121,
+ VRInitError_Init_NotSupportedWithCompositor = 122,
+ VRInitError_Init_NotAvailableToUtilityApps = 123,
+ VRInitError_Init_Internal = 124,
+ VRInitError_Init_HmdDriverIdIsNone = 125,
+ VRInitError_Init_HmdNotFoundPresenceFailed = 126,
+ VRInitError_Init_VRMonitorNotFound = 127,
+ VRInitError_Init_VRMonitorStartupFailed = 128,
+ VRInitError_Init_LowPowerWatchdogNotSupported = 129,
+ VRInitError_Init_InvalidApplicationType = 130,
+ VRInitError_Init_NotAvailableToWatchdogApps = 131,
+ VRInitError_Init_WatchdogDisabledInSettings = 132,
+ VRInitError_Init_VRDashboardNotFound = 133,
+ VRInitError_Init_VRDashboardStartupFailed = 134,
+ VRInitError_Init_VRHomeNotFound = 135,
+ VRInitError_Init_VRHomeStartupFailed = 136,
+ VRInitError_Init_RebootingBusy = 137,
+ VRInitError_Init_FirmwareUpdateBusy = 138,
+ VRInitError_Init_FirmwareRecoveryBusy = 139,
+
+
+ VRInitError_Driver_Failed = 200,
+ VRInitError_Driver_Unknown = 201,
+ VRInitError_Driver_HmdUnknown = 202,
+ VRInitError_Driver_NotLoaded = 203,
+ VRInitError_Driver_RuntimeOutOfDate = 204,
+ VRInitError_Driver_HmdInUse = 205,
+ VRInitError_Driver_NotCalibrated = 206,
+ VRInitError_Driver_CalibrationInvalid = 207,
+ VRInitError_Driver_HmdDisplayNotFound = 208,
VRInitError_Driver_TrackedDeviceInterfaceUnknown = 209,
- // VRInitError_Driver_HmdDisplayNotFoundAfterFix = 210, // not needed: here for historic reasons
- VRInitError_Driver_HmdDriverIdOutOfBounds = 211,
- VRInitError_Driver_HmdDisplayMirrored = 212,
-
- VRInitError_IPC_ServerInitFailed = 300,
- VRInitError_IPC_ConnectFailed = 301,
- VRInitError_IPC_SharedStateInitFailed = 302,
- VRInitError_IPC_CompositorInitFailed = 303,
- VRInitError_IPC_MutexInitFailed = 304,
- VRInitError_IPC_Failed = 305,
- VRInitError_IPC_CompositorConnectFailed = 306,
+ // VRInitError_Driver_HmdDisplayNotFoundAfterFix = 210, // not needed: here for historic reasons
+ VRInitError_Driver_HmdDriverIdOutOfBounds = 211,
+ VRInitError_Driver_HmdDisplayMirrored = 212,
+
+ VRInitError_IPC_ServerInitFailed = 300,
+ VRInitError_IPC_ConnectFailed = 301,
+ VRInitError_IPC_SharedStateInitFailed = 302,
+ VRInitError_IPC_CompositorInitFailed = 303,
+ VRInitError_IPC_MutexInitFailed = 304,
+ VRInitError_IPC_Failed = 305,
+ VRInitError_IPC_CompositorConnectFailed = 306,
VRInitError_IPC_CompositorInvalidConnectResponse = 307,
VRInitError_IPC_ConnectFailedAfterMultipleAttempts = 308,
@@ -1085,7 +1101,7 @@ enum EVRInitError
VRInitError_Compositor_ScreenshotsInitFailed = 404,
VRInitError_Compositor_UnableToCreateDevice = 405,
- VRInitError_VendorSpecific_UnableToConnectToOculusRuntime = 1000,
+ VRInitError_VendorSpecific_UnableToConnectToOculusRuntime = 1000,
VRInitError_VendorSpecific_HmdFound_CantOpenDevice = 1101,
VRInitError_VendorSpecific_HmdFound_UnableToRequestConfigStart = 1102,
@@ -1401,6 +1417,7 @@ namespace vr
static const char * const k_pch_SteamVR_RetailDemo_Bool = "retailDemo";
static const char * const k_pch_SteamVR_IpdOffset_Float = "ipdOffset";
static const char * const k_pch_SteamVR_AllowSupersampleFiltering_Bool = "allowSupersampleFiltering";
+ static const char * const k_pch_SteamVR_EnableLinuxVulkanAsync_Bool = "enableLinuxVulkanAsync";
//-----------------------------------------------------------------------------
// lighthouse keys
@@ -1504,6 +1521,7 @@ namespace vr
static const char * const k_pch_Power_TurnOffControllersTimeout_Float = "turnOffControllersTimeout";
static const char * const k_pch_Power_ReturnToWatchdogTimeout_Float = "returnToWatchdogTimeout";
static const char * const k_pch_Power_AutoLaunchSteamVROnButtonPress = "autoLaunchSteamVROnButtonPress";
+ static const char * const k_pch_Power_PauseCompositorOnStandby_Bool = "pauseCompositorOnStandby";
//-----------------------------------------------------------------------------
// dashboard keys
diff --git a/bin/osx64/OpenVR.framework/Versions/A/OpenVR b/bin/osx64/OpenVR.framework/Versions/A/OpenVR
index 1609501..3fb0184 100755
--- a/bin/osx64/OpenVR.framework/Versions/A/OpenVR
+++ b/bin/osx64/OpenVR.framework/Versions/A/OpenVR
Binary files differ
diff --git a/bin/win32/openvr_api.dll b/bin/win32/openvr_api.dll
index bccb2f6..94a51bf 100644
--- a/bin/win32/openvr_api.dll
+++ b/bin/win32/openvr_api.dll
Binary files differ
diff --git a/bin/win32/openvr_api.pdb b/bin/win32/openvr_api.pdb
index e41b91b..b059445 100644
--- a/bin/win32/openvr_api.pdb
+++ b/bin/win32/openvr_api.pdb
Binary files differ
diff --git a/bin/win64/openvr_api.dll b/bin/win64/openvr_api.dll
index f3270ee..d20a79e 100644
--- a/bin/win64/openvr_api.dll
+++ b/bin/win64/openvr_api.dll
Binary files differ
diff --git a/bin/win64/openvr_api.pdb b/bin/win64/openvr_api.pdb
index 3e4b154..368e572 100644
--- a/bin/win64/openvr_api.pdb
+++ b/bin/win64/openvr_api.pdb
Binary files differ
diff --git a/headers/openvr.h b/headers/openvr.h
index 98410f1..f945dbc 100644
--- a/headers/openvr.h
+++ b/headers/openvr.h
@@ -393,6 +393,11 @@ struct VRTextureBounds_t
float uMax, vMax;
};
+/** Allows specifying pose used to render provided scene texture (if different from value returned by WaitGetPoses). */
+struct VRTextureWithPose_t : public Texture_t
+{
+ HmdMatrix34_t mDeviceToAbsoluteTracking; // Actual pose used to render scene textures.
+};
/** Allows the application to control how scene textures are used by the compositor when calling Submit. */
enum EVRSubmitFlags
@@ -410,6 +415,9 @@ enum EVRSubmitFlags
// Do not use
Submit_Reserved = 0x04,
+
+ // Set to indicate that pTexture is a pointer to a VRTextureWithPose_t.
+ Submit_TextureWithPose = 0x08,
};
/** Data required for passing Vulkan textures to IVRCompositor::Submit.
@@ -586,6 +594,7 @@ enum EVREventType
VREvent_PerformanceTest_FidelityLevel = 1602,
VREvent_MessageOverlay_Closed = 1650,
+ VREvent_MessageOverlayCloseRequested = 1651,
// Vendors are free to expose private events in this reserved region
VREvent_VendorSpecific_Reserved_Start = 10000,
@@ -1019,65 +1028,69 @@ enum EVRInitError
VRInitError_None = 0,
VRInitError_Unknown = 1,
- VRInitError_Init_InstallationNotFound = 100,
- VRInitError_Init_InstallationCorrupt = 101,
- VRInitError_Init_VRClientDLLNotFound = 102,
- VRInitError_Init_FileNotFound = 103,
- VRInitError_Init_FactoryNotFound = 104,
- VRInitError_Init_InterfaceNotFound = 105,
- VRInitError_Init_InvalidInterface = 106,
- VRInitError_Init_UserConfigDirectoryInvalid = 107,
- VRInitError_Init_HmdNotFound = 108,
- VRInitError_Init_NotInitialized = 109,
- VRInitError_Init_PathRegistryNotFound = 110,
- VRInitError_Init_NoConfigPath = 111,
- VRInitError_Init_NoLogPath = 112,
- VRInitError_Init_PathRegistryNotWritable = 113,
- VRInitError_Init_AppInfoInitFailed = 114,
- VRInitError_Init_Retry = 115, // Used internally to cause retries to vrserver
- VRInitError_Init_InitCanceledByUser = 116, // The calling application should silently exit. The user canceled app startup
- VRInitError_Init_AnotherAppLaunching = 117,
- VRInitError_Init_SettingsInitFailed = 118,
- VRInitError_Init_ShuttingDown = 119,
- VRInitError_Init_TooManyObjects = 120,
- VRInitError_Init_NoServerForBackgroundApp = 121,
- VRInitError_Init_NotSupportedWithCompositor = 122,
- VRInitError_Init_NotAvailableToUtilityApps = 123,
- VRInitError_Init_Internal = 124,
- VRInitError_Init_HmdDriverIdIsNone = 125,
- VRInitError_Init_HmdNotFoundPresenceFailed = 126,
- VRInitError_Init_VRMonitorNotFound = 127,
- VRInitError_Init_VRMonitorStartupFailed = 128,
- VRInitError_Init_LowPowerWatchdogNotSupported = 129,
- VRInitError_Init_InvalidApplicationType = 130,
- VRInitError_Init_NotAvailableToWatchdogApps = 131,
- VRInitError_Init_WatchdogDisabledInSettings = 132,
- VRInitError_Init_VRDashboardNotFound = 133,
- VRInitError_Init_VRDashboardStartupFailed = 134,
- VRInitError_Init_VRHomeNotFound = 135,
- VRInitError_Init_VRHomeStartupFailed = 136,
-
- VRInitError_Driver_Failed = 200,
- VRInitError_Driver_Unknown = 201,
- VRInitError_Driver_HmdUnknown = 202,
- VRInitError_Driver_NotLoaded = 203,
- VRInitError_Driver_RuntimeOutOfDate = 204,
- VRInitError_Driver_HmdInUse = 205,
- VRInitError_Driver_NotCalibrated = 206,
- VRInitError_Driver_CalibrationInvalid = 207,
- VRInitError_Driver_HmdDisplayNotFound = 208,
+ VRInitError_Init_InstallationNotFound = 100,
+ VRInitError_Init_InstallationCorrupt = 101,
+ VRInitError_Init_VRClientDLLNotFound = 102,
+ VRInitError_Init_FileNotFound = 103,
+ VRInitError_Init_FactoryNotFound = 104,
+ VRInitError_Init_InterfaceNotFound = 105,
+ VRInitError_Init_InvalidInterface = 106,
+ VRInitError_Init_UserConfigDirectoryInvalid = 107,
+ VRInitError_Init_HmdNotFound = 108,
+ VRInitError_Init_NotInitialized = 109,
+ VRInitError_Init_PathRegistryNotFound = 110,
+ VRInitError_Init_NoConfigPath = 111,
+ VRInitError_Init_NoLogPath = 112,
+ VRInitError_Init_PathRegistryNotWritable = 113,
+ VRInitError_Init_AppInfoInitFailed = 114,
+ VRInitError_Init_Retry = 115, // Used internally to cause retries to vrserver
+ VRInitError_Init_InitCanceledByUser = 116, // The calling application should silently exit. The user canceled app startup
+ VRInitError_Init_AnotherAppLaunching = 117,
+ VRInitError_Init_SettingsInitFailed = 118,
+ VRInitError_Init_ShuttingDown = 119,
+ VRInitError_Init_TooManyObjects = 120,
+ VRInitError_Init_NoServerForBackgroundApp = 121,
+ VRInitError_Init_NotSupportedWithCompositor = 122,
+ VRInitError_Init_NotAvailableToUtilityApps = 123,
+ VRInitError_Init_Internal = 124,
+ VRInitError_Init_HmdDriverIdIsNone = 125,
+ VRInitError_Init_HmdNotFoundPresenceFailed = 126,
+ VRInitError_Init_VRMonitorNotFound = 127,
+ VRInitError_Init_VRMonitorStartupFailed = 128,
+ VRInitError_Init_LowPowerWatchdogNotSupported = 129,
+ VRInitError_Init_InvalidApplicationType = 130,
+ VRInitError_Init_NotAvailableToWatchdogApps = 131,
+ VRInitError_Init_WatchdogDisabledInSettings = 132,
+ VRInitError_Init_VRDashboardNotFound = 133,
+ VRInitError_Init_VRDashboardStartupFailed = 134,
+ VRInitError_Init_VRHomeNotFound = 135,
+ VRInitError_Init_VRHomeStartupFailed = 136,
+ VRInitError_Init_RebootingBusy = 137,
+ VRInitError_Init_FirmwareUpdateBusy = 138,
+ VRInitError_Init_FirmwareRecoveryBusy = 139,
+
+
+ VRInitError_Driver_Failed = 200,
+ VRInitError_Driver_Unknown = 201,
+ VRInitError_Driver_HmdUnknown = 202,
+ VRInitError_Driver_NotLoaded = 203,
+ VRInitError_Driver_RuntimeOutOfDate = 204,
+ VRInitError_Driver_HmdInUse = 205,
+ VRInitError_Driver_NotCalibrated = 206,
+ VRInitError_Driver_CalibrationInvalid = 207,
+ VRInitError_Driver_HmdDisplayNotFound = 208,
VRInitError_Driver_TrackedDeviceInterfaceUnknown = 209,
- // VRInitError_Driver_HmdDisplayNotFoundAfterFix = 210, // not needed: here for historic reasons
- VRInitError_Driver_HmdDriverIdOutOfBounds = 211,
- VRInitError_Driver_HmdDisplayMirrored = 212,
-
- VRInitError_IPC_ServerInitFailed = 300,
- VRInitError_IPC_ConnectFailed = 301,
- VRInitError_IPC_SharedStateInitFailed = 302,
- VRInitError_IPC_CompositorInitFailed = 303,
- VRInitError_IPC_MutexInitFailed = 304,
- VRInitError_IPC_Failed = 305,
- VRInitError_IPC_CompositorConnectFailed = 306,
+ // VRInitError_Driver_HmdDisplayNotFoundAfterFix = 210, // not needed: here for historic reasons
+ VRInitError_Driver_HmdDriverIdOutOfBounds = 211,
+ VRInitError_Driver_HmdDisplayMirrored = 212,
+
+ VRInitError_IPC_ServerInitFailed = 300,
+ VRInitError_IPC_ConnectFailed = 301,
+ VRInitError_IPC_SharedStateInitFailed = 302,
+ VRInitError_IPC_CompositorInitFailed = 303,
+ VRInitError_IPC_MutexInitFailed = 304,
+ VRInitError_IPC_Failed = 305,
+ VRInitError_IPC_CompositorConnectFailed = 306,
VRInitError_IPC_CompositorInvalidConnectResponse = 307,
VRInitError_IPC_ConnectFailedAfterMultipleAttempts = 308,
@@ -1088,7 +1101,7 @@ enum EVRInitError
VRInitError_Compositor_ScreenshotsInitFailed = 404,
VRInitError_Compositor_UnableToCreateDevice = 405,
- VRInitError_VendorSpecific_UnableToConnectToOculusRuntime = 1000,
+ VRInitError_VendorSpecific_UnableToConnectToOculusRuntime = 1000,
VRInitError_VendorSpecific_HmdFound_CantOpenDevice = 1101,
VRInitError_VendorSpecific_HmdFound_UnableToRequestConfigStart = 1102,
@@ -1283,17 +1296,20 @@ public:
* Returns platform- and texture-type specific adapter identification so that applications and the
* compositor are creating textures and swap chains on the same GPU. If an error occurs the device
* will be set to 0.
+ * pInstance is an optional parameter that is required only when textureType is TextureType_Vulkan.
* [D3D10/11/12 Only (D3D9 Not Supported)]
* Returns the adapter LUID that identifies the GPU attached to the HMD. The user should
* enumerate all adapters using IDXGIFactory::EnumAdapters and IDXGIAdapter::GetDesc to find
* the adapter with the matching LUID, or use IDXGIFactory4::EnumAdapterByLuid.
* The discovered IDXGIAdapter should be used to create the device and swap chain.
* [Vulkan Only]
- * Returns the vk::PhysicalDevice that should be used by the application.
+ * Returns the VkPhysicalDevice that should be used by the application.
+ * pInstance must be the instance the application will use to query for the VkPhysicalDevice. The application
+ * must create the VkInstance with extensions returned by IVRCompositor::GetVulkanInstanceExtensionsRequired enabled.
* [macOS Only]
* Returns an id<MTLDevice> that should be used by the application.
*/
- virtual void GetOutputDevice( uint64_t *pnDevice, ETextureType textureType ) = 0;
+ virtual void GetOutputDevice( uint64_t *pnDevice, ETextureType textureType, VkInstance_T *pInstance = nullptr ) = 0;
// ------------------------------------
// Display Mode methods
@@ -1511,7 +1527,7 @@ public:
};
-static const char * const IVRSystem_Version = "IVRSystem_016";
+static const char * const IVRSystem_Version = "IVRSystem_017";
}
@@ -1818,6 +1834,7 @@ namespace vr
static const char * const k_pch_SteamVR_RetailDemo_Bool = "retailDemo";
static const char * const k_pch_SteamVR_IpdOffset_Float = "ipdOffset";
static const char * const k_pch_SteamVR_AllowSupersampleFiltering_Bool = "allowSupersampleFiltering";
+ static const char * const k_pch_SteamVR_EnableLinuxVulkanAsync_Bool = "enableLinuxVulkanAsync";
//-----------------------------------------------------------------------------
// lighthouse keys
@@ -2369,9 +2386,36 @@ public:
* null. The string will be a space separated list of required device extensions to enable in VkCreateDevice */
virtual uint32_t GetVulkanDeviceExtensionsRequired( VkPhysicalDevice_T *pPhysicalDevice, VR_OUT_STRING() char *pchValue, uint32_t unBufferSize ) = 0;
+ /** [ Vulkan/D3D12 Only ]
+ * There are two purposes for SetExplicitTimingMode:
+ * 1. To get a more accurate GPU timestamp for when the frame begins in Vulkan/D3D12 applications.
+ * 2. (Optional) To avoid having WaitGetPoses access the Vulkan queue so that the queue can be accessed from
+ * another thread while WaitGetPoses is executing.
+ *
+ * More accurate GPU timestamp for the start of the frame is achieved by the application calling
+ * SubmitExplicitTimingData immediately before its first submission to the Vulkan/D3D12 queue.
+ * This is more accurate because normally this GPU timestamp is recorded during WaitGetPoses. In D3D11,
+ * WaitGetPoses queues a GPU timestamp write, but it does not actually get submitted to the GPU until the
+ * application flushes. By using SubmitExplicitTimingData, the timestamp is recorded at the same place for
+ * Vulkan/D3D12 as it is for D3D11, resulting in a more accurate GPU time measurement for the frame.
+ *
+ * Avoiding WaitGetPoses accessing the Vulkan queue can be achieved using SetExplicitTimingMode as well. If this is desired,
+ * the application *MUST* call PostPresentHandoff itself prior to WaitGetPoses. If SetExplicitTimingMode is true and the
+ * application calls PostPresentHandoff, then WaitGetPoses is guaranteed not to access the queue. Note that PostPresentHandoff
+ * and SubmitExplicitTimingData will access the queue, so only WaitGetPoses becomes safe for accessing the queue from another
+ * thread. */
+ virtual void SetExplicitTimingMode( bool bExplicitTimingMode ) = 0;
+
+ /** [ Vulkan/D3D12 Only ]
+ * Submit explicit timing data. When SetExplicitTimingMode is true, this must be called immediately before
+ * the application's first vkQueueSubmit (Vulkan) or ID3D12CommandQueue::ExecuteCommandLists (D3D12) of each frame.
+ * This function will insert a GPU timestamp write just before the application starts its rendering. This function
+ * will perform a vkQueueSubmit on Vulkan so must not be done simultaneously with VkQueue operations on another thread.
+ * Returns VRCompositorError_RequestFailed if SetExplicitTimingMode is not enabled. */
+ virtual EVRCompositorError SubmitExplicitTimingData() = 0;
};
-static const char * const IVRCompositor_Version = "IVRCompositor_020";
+static const char * const IVRCompositor_Version = "IVRCompositor_021";
} // namespace vr
@@ -2956,6 +3000,9 @@ namespace vr
/** Show the message overlay. This will block and return you a result. **/
virtual VRMessageOverlayResponse ShowMessageOverlay( const char* pchText, const char* pchCaption, const char* pchButton0Text, const char* pchButton1Text = nullptr, const char* pchButton2Text = nullptr, const char* pchButton3Text = nullptr ) = 0;
+
+ /** If the calling process owns the overlay and it's open, this will close it. **/
+ virtual void CloseMessageOverlay() = 0;
};
static const char * const IVROverlay_Version = "IVROverlay_016";
@@ -3416,8 +3463,10 @@ namespace vr
*
* This path is to the "root" of the VR API install. That's the directory with
* the "drivers" directory and a platform (i.e. "win32") directory in it, not the directory with the DLL itself.
+ *
+ * pStartupInfo is reserved for future use.
*/
- inline IVRSystem *VR_Init( EVRInitError *peError, EVRApplicationType eApplicationType );
+ inline IVRSystem *VR_Init( EVRInitError *peError, EVRApplicationType eApplicationType, const char *pStartupInfo = nullptr );
/** unloads vrclient.dll. Any interface pointers from the interface are
* invalid after this point */
@@ -3687,17 +3736,17 @@ namespace vr
m_pVRScreenshots = nullptr;
m_pVRDriverManager = nullptr;
}
-
- VR_INTERFACE uint32_t VR_CALLTYPE VR_InitInternal( EVRInitError *peError, EVRApplicationType eApplicationType );
+
+ VR_INTERFACE uint32_t VR_CALLTYPE VR_InitInternal2( EVRInitError *peError, EVRApplicationType eApplicationType, const char *pStartupInfo );
VR_INTERFACE void VR_CALLTYPE VR_ShutdownInternal();
/** Finds the active installation of vrclient.dll and initializes it */
- inline IVRSystem *VR_Init( EVRInitError *peError, EVRApplicationType eApplicationType )
+ inline IVRSystem *VR_Init( EVRInitError *peError, EVRApplicationType eApplicationType, const char *pStartupInfo )
{
IVRSystem *pVRSystem = nullptr;
EVRInitError eError;
- VRToken() = VR_InitInternal( &eError, eApplicationType );
+ VRToken() = VR_InitInternal2( &eError, eApplicationType, pStartupInfo );
COpenVRContext &ctx = OpenVRInternal_ModuleContext();
ctx.Clear();
diff --git a/headers/openvr_api.cs b/headers/openvr_api.cs
index e080478..393a917 100644
--- a/headers/openvr_api.cs
+++ b/headers/openvr_api.cs
@@ -56,7 +56,7 @@ public struct IVRSystem
internal _GetDXGIOutputInfo GetDXGIOutputInfo;
[UnmanagedFunctionPointer(CallingConvention.StdCall)]
- internal delegate void _GetOutputDevice(ref ulong pnDevice, ETextureType textureType);
+ internal delegate void _GetOutputDevice(ref ulong pnDevice, ETextureType textureType, IntPtr pInstance);
[MarshalAs(UnmanagedType.FunctionPtr)]
internal _GetOutputDevice GetOutputDevice;
@@ -845,6 +845,16 @@ public struct IVRCompositor
[MarshalAs(UnmanagedType.FunctionPtr)]
internal _GetVulkanDeviceExtensionsRequired GetVulkanDeviceExtensionsRequired;
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate void _SetExplicitTimingMode(bool bExplicitTimingMode);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _SetExplicitTimingMode SetExplicitTimingMode;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate EVRCompositorError _SubmitExplicitTimingData();
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _SubmitExplicitTimingData SubmitExplicitTimingData;
+
}
[StructLayout(LayoutKind.Sequential)]
@@ -1250,6 +1260,11 @@ public struct IVROverlay
[MarshalAs(UnmanagedType.FunctionPtr)]
internal _ShowMessageOverlay ShowMessageOverlay;
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate void _CloseMessageOverlay();
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _CloseMessageOverlay CloseMessageOverlay;
+
}
[StructLayout(LayoutKind.Sequential)]
@@ -1551,10 +1566,10 @@ public class CVRSystem
pnAdapterIndex = 0;
FnTable.GetDXGIOutputInfo(ref pnAdapterIndex);
}
- public void GetOutputDevice(ref ulong pnDevice,ETextureType textureType)
+ public void GetOutputDevice(ref ulong pnDevice,ETextureType textureType,IntPtr pInstance)
{
pnDevice = 0;
- FnTable.GetOutputDevice(ref pnDevice,textureType);
+ FnTable.GetOutputDevice(ref pnDevice,textureType,pInstance);
}
public bool IsDisplayOnDesktop()
{
@@ -2445,6 +2460,15 @@ public class CVRCompositor
uint result = FnTable.GetVulkanDeviceExtensionsRequired(pPhysicalDevice,pchValue,unBufferSize);
return result;
}
+ public void SetExplicitTimingMode(bool bExplicitTimingMode)
+ {
+ FnTable.SetExplicitTimingMode(bExplicitTimingMode);
+ }
+ public EVRCompositorError SubmitExplicitTimingData()
+ {
+ EVRCompositorError result = FnTable.SubmitExplicitTimingData();
+ return result;
+ }
}
@@ -2903,6 +2927,10 @@ public class CVROverlay
VRMessageOverlayResponse result = FnTable.ShowMessageOverlay(pchText,pchCaption,pchButton0Text,pchButton1Text,pchButton2Text,pchButton3Text);
return result;
}
+ public void CloseMessageOverlay()
+ {
+ FnTable.CloseMessageOverlay();
+ }
}
@@ -3412,6 +3440,7 @@ public enum EVRSubmitFlags
Submit_LensDistortionAlreadyApplied = 1,
Submit_GlRenderBuffer = 2,
Submit_Reserved = 4,
+ Submit_TextureWithPose = 8,
}
public enum EVRState
{
@@ -3539,6 +3568,7 @@ public enum EVREventType
VREvent_PerformanceTest_DisableCapture = 1601,
VREvent_PerformanceTest_FidelityLevel = 1602,
VREvent_MessageOverlay_Closed = 1650,
+ VREvent_MessageOverlayCloseRequested = 1651,
VREvent_VendorSpecific_Reserved_Start = 10000,
VREvent_VendorSpecific_Reserved_End = 19999,
}
@@ -3696,6 +3726,9 @@ public enum EVRInitError
Init_VRDashboardStartupFailed = 134,
Init_VRHomeNotFound = 135,
Init_VRHomeStartupFailed = 136,
+ Init_RebootingBusy = 137,
+ Init_FirmwareUpdateBusy = 138,
+ Init_FirmwareRecoveryBusy = 139,
Driver_Failed = 200,
Driver_Unknown = 201,
Driver_HmdUnknown = 202,
@@ -4136,6 +4169,10 @@ public enum EVRScreenshotError
public float uMax;
public float vMax;
}
+[StructLayout(LayoutKind.Sequential)] public struct VRTextureWithPose_t
+{
+ public HmdMatrix34_t mDeviceToAbsoluteTracking;
+}
[StructLayout(LayoutKind.Sequential)] public struct VRVulkanTextureData_t
{
public ulong m_nImage;
@@ -4617,7 +4654,7 @@ public class OpenVR
public const uint k_unControllerStateAxisCount = 5;
public const ulong k_ulOverlayHandleInvalid = 0;
public const uint k_unScreenshotHandleInvalid = 0;
- public const string IVRSystem_Version = "IVRSystem_016";
+ public const string IVRSystem_Version = "IVRSystem_017";
public const string IVRExtendedDisplay_Version = "IVRExtendedDisplay_001";
public const string IVRTrackedCamera_Version = "IVRTrackedCamera_003";
public const uint k_unMaxApplicationKeyLength = 128;
@@ -4626,7 +4663,7 @@ public class OpenVR
public const string IVRApplications_Version = "IVRApplications_006";
public const string IVRChaperone_Version = "IVRChaperone_003";
public const string IVRChaperoneSetup_Version = "IVRChaperoneSetup_005";
- public const string IVRCompositor_Version = "IVRCompositor_020";
+ public const string IVRCompositor_Version = "IVRCompositor_021";
public const uint k_unVROverlayMaxKeyLength = 128;
public const uint k_unVROverlayMaxNameLength = 128;
public const uint k_unMaxOverlayCount = 64;
@@ -4685,6 +4722,7 @@ public class OpenVR
public const string k_pch_SteamVR_RetailDemo_Bool = "retailDemo";
public const string k_pch_SteamVR_IpdOffset_Float = "ipdOffset";
public const string k_pch_SteamVR_AllowSupersampleFiltering_Bool = "allowSupersampleFiltering";
+ public const string k_pch_SteamVR_EnableLinuxVulkanAsync_Bool = "enableLinuxVulkanAsync";
public const string k_pch_Lighthouse_Section = "driver_lighthouse";
public const string k_pch_Lighthouse_DisableIMU_Bool = "disableimu";
public const string k_pch_Lighthouse_UseDisambiguation_String = "usedisambiguation";
diff --git a/headers/openvr_api.json b/headers/openvr_api.json
index f4fab74..8fa11a6 100644
--- a/headers/openvr_api.json
+++ b/headers/openvr_api.json
@@ -213,6 +213,7 @@
,{"name": "Submit_LensDistortionAlreadyApplied","value": "1"}
,{"name": "Submit_GlRenderBuffer","value": "2"}
,{"name": "Submit_Reserved","value": "4"}
+ ,{"name": "Submit_TextureWithPose","value": "8"}
]}
, {"enumname": "vr::EVRState","values": [
{"name": "VRState_Undefined","value": "-1"}
@@ -338,6 +339,7 @@
,{"name": "VREvent_PerformanceTest_DisableCapture","value": "1601"}
,{"name": "VREvent_PerformanceTest_FidelityLevel","value": "1602"}
,{"name": "VREvent_MessageOverlay_Closed","value": "1650"}
+ ,{"name": "VREvent_MessageOverlayCloseRequested","value": "1651"}
,{"name": "VREvent_VendorSpecific_Reserved_Start","value": "10000"}
,{"name": "VREvent_VendorSpecific_Reserved_End","value": "19999"}
]}
@@ -483,6 +485,9 @@
,{"name": "VRInitError_Init_VRDashboardStartupFailed","value": "134"}
,{"name": "VRInitError_Init_VRHomeNotFound","value": "135"}
,{"name": "VRInitError_Init_VRHomeStartupFailed","value": "136"}
+ ,{"name": "VRInitError_Init_RebootingBusy","value": "137"}
+ ,{"name": "VRInitError_Init_FirmwareUpdateBusy","value": "138"}
+ ,{"name": "VRInitError_Init_FirmwareRecoveryBusy","value": "139"}
,{"name": "VRInitError_Driver_Failed","value": "200"}
,{"name": "VRInitError_Driver_Unknown","value": "201"}
,{"name": "VRInitError_Driver_HmdUnknown","value": "202"}
@@ -800,7 +805,7 @@
,{
"constname": "k_unScreenshotHandleInvalid","consttype": "const uint32_t", "constval": "0"}
,{
- "constname": "IVRSystem_Version","consttype": "const char *const", "constval": "IVRSystem_016"}
+ "constname": "IVRSystem_Version","consttype": "const char *const", "constval": "IVRSystem_017"}
,{
"constname": "IVRExtendedDisplay_Version","consttype": "const char *const", "constval": "IVRExtendedDisplay_001"}
,{
@@ -818,7 +823,7 @@
,{
"constname": "IVRChaperoneSetup_Version","consttype": "const char *const", "constval": "IVRChaperoneSetup_005"}
,{
- "constname": "IVRCompositor_Version","consttype": "const char *const", "constval": "IVRCompositor_020"}
+ "constname": "IVRCompositor_Version","consttype": "const char *const", "constval": "IVRCompositor_021"}
,{
"constname": "k_unVROverlayMaxKeyLength","consttype": "const uint32_t", "constval": "128"}
,{
@@ -936,6 +941,8 @@
,{
"constname": "k_pch_SteamVR_AllowSupersampleFiltering_Bool","consttype": "const char *const", "constval": "allowSupersampleFiltering"}
,{
+ "constname": "k_pch_SteamVR_EnableLinuxVulkanAsync_Bool","consttype": "const char *const", "constval": "enableLinuxVulkanAsync"}
+,{
"constname": "k_pch_Lighthouse_Section","consttype": "const char *const", "constval": "driver_lighthouse"}
,{
"constname": "k_pch_Lighthouse_DisableIMU_Bool","consttype": "const char *const", "constval": "disableimu"}
@@ -1147,6 +1154,8 @@
{ "fieldname": "vMin", "fieldtype": "float"},
{ "fieldname": "uMax", "fieldtype": "float"},
{ "fieldname": "vMax", "fieldtype": "float"}]}
+,{"struct": "vr::VRTextureWithPose_t","fields": [
+{ "fieldname": "mDeviceToAbsoluteTracking", "fieldtype": "struct vr::HmdMatrix34_t"}]}
,{"struct": "vr::VRVulkanTextureData_t","fields": [
{ "fieldname": "m_nImage", "fieldtype": "uint64_t"},
{ "fieldname": "m_pDevice", "fieldtype": "struct VkDevice_T *"},
@@ -1466,7 +1475,8 @@
"returntype": "void",
"params": [
{ "paramname": "pnDevice" ,"paramtype": "uint64_t *"},
-{ "paramname": "textureType" ,"paramtype": "vr::ETextureType"}
+{ "paramname": "textureType" ,"paramtype": "vr::ETextureType"},
+{ "paramname": "pInstance" ,"paramtype": "struct VkInstance_T *"}
]
}
,{
@@ -2723,6 +2733,19 @@
]
}
,{
+ "classname": "vr::IVRCompositor",
+ "methodname": "SetExplicitTimingMode",
+ "returntype": "void",
+ "params": [
+{ "paramname": "bExplicitTimingMode" ,"paramtype": "bool"}
+ ]
+}
+,{
+ "classname": "vr::IVRCompositor",
+ "methodname": "SubmitExplicitTimingData",
+ "returntype": "vr::EVRCompositorError"
+}
+,{
"classname": "vr::IVROverlay",
"methodname": "FindOverlay",
"returntype": "vr::EVROverlayError",
@@ -3475,6 +3498,11 @@
]
}
,{
+ "classname": "vr::IVROverlay",
+ "methodname": "CloseMessageOverlay",
+ "returntype": "void"
+}
+,{
"classname": "vr::IVRRenderModels",
"methodname": "LoadRenderModel_Async",
"returntype": "vr::EVRRenderModelError",
diff --git a/headers/openvr_capi.h b/headers/openvr_capi.h
index 24d2778..50f8958 100644
--- a/headers/openvr_capi.h
+++ b/headers/openvr_capi.h
@@ -56,6 +56,9 @@ typedef char bool;
typedef uint64_t PropertyContainerHandle_t;
typedef uint32_t PropertyTypeTag_t;
+typedef uint64_t VRActionHandle_t;
+typedef uint64_t VRActionSetHandle_t;
+typedef uint64_t VRInputOriginHandle_t;
// OpenVR Constants
@@ -84,7 +87,7 @@ static const unsigned int k_unMaxPropertyStringSize = 32768;
static const unsigned int k_unControllerStateAxisCount = 5;
static const unsigned long k_ulOverlayHandleInvalid = 0;
static const unsigned int k_unScreenshotHandleInvalid = 0;
-static const char * IVRSystem_Version = "IVRSystem_016";
+static const char * IVRSystem_Version = "IVRSystem_017";
static const char * IVRExtendedDisplay_Version = "IVRExtendedDisplay_001";
static const char * IVRTrackedCamera_Version = "IVRTrackedCamera_003";
static const unsigned int k_unMaxApplicationKeyLength = 128;
@@ -93,7 +96,7 @@ static const char * k_pch_MimeType_GameTheater = "vr/game_theater";
static const char * IVRApplications_Version = "IVRApplications_006";
static const char * IVRChaperone_Version = "IVRChaperone_003";
static const char * IVRChaperoneSetup_Version = "IVRChaperoneSetup_005";
-static const char * IVRCompositor_Version = "IVRCompositor_020";
+static const char * IVRCompositor_Version = "IVRCompositor_021";
static const unsigned int k_unVROverlayMaxKeyLength = 128;
static const unsigned int k_unVROverlayMaxNameLength = 128;
static const unsigned int k_unMaxOverlayCount = 64;
@@ -152,6 +155,7 @@ static const char * k_pch_SteamVR_CycleBackgroundImageTimeSec_Int32 = "CycleBack
static const char * k_pch_SteamVR_RetailDemo_Bool = "retailDemo";
static const char * k_pch_SteamVR_IpdOffset_Float = "ipdOffset";
static const char * k_pch_SteamVR_AllowSupersampleFiltering_Bool = "allowSupersampleFiltering";
+static const char * k_pch_SteamVR_EnableLinuxVulkanAsync_Bool = "enableLinuxVulkanAsync";
static const char * k_pch_Lighthouse_Section = "driver_lighthouse";
static const char * k_pch_Lighthouse_DisableIMU_Bool = "disableimu";
static const char * k_pch_Lighthouse_UseDisambiguation_String = "usedisambiguation";
@@ -437,6 +441,7 @@ typedef enum EVRSubmitFlags
EVRSubmitFlags_Submit_LensDistortionAlreadyApplied = 1,
EVRSubmitFlags_Submit_GlRenderBuffer = 2,
EVRSubmitFlags_Submit_Reserved = 4,
+ EVRSubmitFlags_Submit_TextureWithPose = 8,
} EVRSubmitFlags;
typedef enum EVRState
@@ -566,6 +571,7 @@ typedef enum EVREventType
EVREventType_VREvent_PerformanceTest_DisableCapture = 1601,
EVREventType_VREvent_PerformanceTest_FidelityLevel = 1602,
EVREventType_VREvent_MessageOverlay_Closed = 1650,
+ EVREventType_VREvent_MessageOverlayCloseRequested = 1651,
EVREventType_VREvent_VendorSpecific_Reserved_Start = 10000,
EVREventType_VREvent_VendorSpecific_Reserved_End = 19999,
} EVREventType;
@@ -735,6 +741,9 @@ typedef enum EVRInitError
EVRInitError_VRInitError_Init_VRDashboardStartupFailed = 134,
EVRInitError_VRInitError_Init_VRHomeNotFound = 135,
EVRInitError_VRInitError_Init_VRHomeStartupFailed = 136,
+ EVRInitError_VRInitError_Init_RebootingBusy = 137,
+ EVRInitError_VRInitError_Init_FirmwareUpdateBusy = 138,
+ EVRInitError_VRInitError_Init_FirmwareRecoveryBusy = 139,
EVRInitError_VRInitError_Driver_Failed = 200,
EVRInitError_VRInitError_Driver_Unknown = 201,
EVRInitError_VRInitError_Driver_HmdUnknown = 202,
@@ -1181,6 +1190,11 @@ typedef struct VRTextureBounds_t
float vMax;
} VRTextureBounds_t;
+typedef struct VRTextureWithPose_t
+{
+ struct HmdMatrix34_t mDeviceToAbsoluteTracking;
+} VRTextureWithPose_t;
+
typedef struct VRVulkanTextureData_t
{
uint64_t m_nImage;
@@ -1579,7 +1593,7 @@ struct VR_IVRSystem_FnTable
bool (OPENVR_FNTABLE_CALLTYPE *GetTimeSinceLastVsync)(float * pfSecondsSinceLastVsync, uint64_t * pulFrameCounter);
int32_t (OPENVR_FNTABLE_CALLTYPE *GetD3D9AdapterIndex)();
void (OPENVR_FNTABLE_CALLTYPE *GetDXGIOutputInfo)(int32_t * pnAdapterIndex);
- void (OPENVR_FNTABLE_CALLTYPE *GetOutputDevice)(uint64_t * pnDevice, ETextureType textureType);
+ void (OPENVR_FNTABLE_CALLTYPE *GetOutputDevice)(uint64_t * pnDevice, ETextureType textureType, struct VkInstance_T * pInstance);
bool (OPENVR_FNTABLE_CALLTYPE *IsDisplayOnDesktop)();
bool (OPENVR_FNTABLE_CALLTYPE *SetDisplayVisibility)(bool bIsVisibleOnDesktop);
void (OPENVR_FNTABLE_CALLTYPE *GetDeviceToAbsoluteTrackingPose)(ETrackingUniverseOrigin eOrigin, float fPredictedSecondsToPhotonsFromNow, struct TrackedDevicePose_t * pTrackedDevicePoseArray, uint32_t unTrackedDevicePoseArrayCount);
@@ -1755,6 +1769,8 @@ struct VR_IVRCompositor_FnTable
void (OPENVR_FNTABLE_CALLTYPE *UnlockGLSharedTextureForAccess)(glSharedTextureHandle_t glSharedTextureHandle);
uint32_t (OPENVR_FNTABLE_CALLTYPE *GetVulkanInstanceExtensionsRequired)(char * pchValue, uint32_t unBufferSize);
uint32_t (OPENVR_FNTABLE_CALLTYPE *GetVulkanDeviceExtensionsRequired)(struct VkPhysicalDevice_T * pPhysicalDevice, char * pchValue, uint32_t unBufferSize);
+ void (OPENVR_FNTABLE_CALLTYPE *SetExplicitTimingMode)(bool bExplicitTimingMode);
+ EVRCompositorError (OPENVR_FNTABLE_CALLTYPE *SubmitExplicitTimingData)();
};
struct VR_IVROverlay_FnTable
@@ -1839,6 +1855,7 @@ struct VR_IVROverlay_FnTable
EVROverlayError (OPENVR_FNTABLE_CALLTYPE *SetOverlayIntersectionMask)(VROverlayHandle_t ulOverlayHandle, struct VROverlayIntersectionMaskPrimitive_t * pMaskPrimitives, uint32_t unNumMaskPrimitives, uint32_t unPrimitiveSize);
EVROverlayError (OPENVR_FNTABLE_CALLTYPE *GetOverlayFlags)(VROverlayHandle_t ulOverlayHandle, uint32_t * pFlags);
VRMessageOverlayResponse (OPENVR_FNTABLE_CALLTYPE *ShowMessageOverlay)(char * pchText, char * pchCaption, char * pchButton0Text, char * pchButton1Text, char * pchButton2Text, char * pchButton3Text);
+ void (OPENVR_FNTABLE_CALLTYPE *CloseMessageOverlay)();
};
struct VR_IVRRenderModels_FnTable
diff --git a/headers/openvr_driver.h b/headers/openvr_driver.h
index 7e1d645..7ab997e 100644
--- a/headers/openvr_driver.h
+++ b/headers/openvr_driver.h
@@ -393,6 +393,11 @@ struct VRTextureBounds_t
float uMax, vMax;
};
+/** Allows specifying pose used to render provided scene texture (if different from value returned by WaitGetPoses). */
+struct VRTextureWithPose_t : public Texture_t
+{
+ HmdMatrix34_t mDeviceToAbsoluteTracking; // Actual pose used to render scene textures.
+};
/** Allows the application to control how scene textures are used by the compositor when calling Submit. */
enum EVRSubmitFlags
@@ -410,6 +415,9 @@ enum EVRSubmitFlags
// Do not use
Submit_Reserved = 0x04,
+
+ // Set to indicate that pTexture is a pointer to a VRTextureWithPose_t.
+ Submit_TextureWithPose = 0x08,
};
/** Data required for passing Vulkan textures to IVRCompositor::Submit.
@@ -586,6 +594,7 @@ enum EVREventType
VREvent_PerformanceTest_FidelityLevel = 1602,
VREvent_MessageOverlay_Closed = 1650,
+ VREvent_MessageOverlayCloseRequested = 1651,
// Vendors are free to expose private events in this reserved region
VREvent_VendorSpecific_Reserved_Start = 10000,
@@ -1019,65 +1028,69 @@ enum EVRInitError
VRInitError_None = 0,
VRInitError_Unknown = 1,
- VRInitError_Init_InstallationNotFound = 100,
- VRInitError_Init_InstallationCorrupt = 101,
- VRInitError_Init_VRClientDLLNotFound = 102,
- VRInitError_Init_FileNotFound = 103,
- VRInitError_Init_FactoryNotFound = 104,
- VRInitError_Init_InterfaceNotFound = 105,
- VRInitError_Init_InvalidInterface = 106,
- VRInitError_Init_UserConfigDirectoryInvalid = 107,
- VRInitError_Init_HmdNotFound = 108,
- VRInitError_Init_NotInitialized = 109,
- VRInitError_Init_PathRegistryNotFound = 110,
- VRInitError_Init_NoConfigPath = 111,
- VRInitError_Init_NoLogPath = 112,
- VRInitError_Init_PathRegistryNotWritable = 113,
- VRInitError_Init_AppInfoInitFailed = 114,
- VRInitError_Init_Retry = 115, // Used internally to cause retries to vrserver
- VRInitError_Init_InitCanceledByUser = 116, // The calling application should silently exit. The user canceled app startup
- VRInitError_Init_AnotherAppLaunching = 117,
- VRInitError_Init_SettingsInitFailed = 118,
- VRInitError_Init_ShuttingDown = 119,
- VRInitError_Init_TooManyObjects = 120,
- VRInitError_Init_NoServerForBackgroundApp = 121,
- VRInitError_Init_NotSupportedWithCompositor = 122,
- VRInitError_Init_NotAvailableToUtilityApps = 123,
- VRInitError_Init_Internal = 124,
- VRInitError_Init_HmdDriverIdIsNone = 125,
- VRInitError_Init_HmdNotFoundPresenceFailed = 126,
- VRInitError_Init_VRMonitorNotFound = 127,
- VRInitError_Init_VRMonitorStartupFailed = 128,
- VRInitError_Init_LowPowerWatchdogNotSupported = 129,
- VRInitError_Init_InvalidApplicationType = 130,
- VRInitError_Init_NotAvailableToWatchdogApps = 131,
- VRInitError_Init_WatchdogDisabledInSettings = 132,
- VRInitError_Init_VRDashboardNotFound = 133,
- VRInitError_Init_VRDashboardStartupFailed = 134,
- VRInitError_Init_VRHomeNotFound = 135,
- VRInitError_Init_VRHomeStartupFailed = 136,
-
- VRInitError_Driver_Failed = 200,
- VRInitError_Driver_Unknown = 201,
- VRInitError_Driver_HmdUnknown = 202,
- VRInitError_Driver_NotLoaded = 203,
- VRInitError_Driver_RuntimeOutOfDate = 204,
- VRInitError_Driver_HmdInUse = 205,
- VRInitError_Driver_NotCalibrated = 206,
- VRInitError_Driver_CalibrationInvalid = 207,
- VRInitError_Driver_HmdDisplayNotFound = 208,
+ VRInitError_Init_InstallationNotFound = 100,
+ VRInitError_Init_InstallationCorrupt = 101,
+ VRInitError_Init_VRClientDLLNotFound = 102,
+ VRInitError_Init_FileNotFound = 103,
+ VRInitError_Init_FactoryNotFound = 104,
+ VRInitError_Init_InterfaceNotFound = 105,
+ VRInitError_Init_InvalidInterface = 106,
+ VRInitError_Init_UserConfigDirectoryInvalid = 107,
+ VRInitError_Init_HmdNotFound = 108,
+ VRInitError_Init_NotInitialized = 109,
+ VRInitError_Init_PathRegistryNotFound = 110,
+ VRInitError_Init_NoConfigPath = 111,
+ VRInitError_Init_NoLogPath = 112,
+ VRInitError_Init_PathRegistryNotWritable = 113,
+ VRInitError_Init_AppInfoInitFailed = 114,
+ VRInitError_Init_Retry = 115, // Used internally to cause retries to vrserver
+ VRInitError_Init_InitCanceledByUser = 116, // The calling application should silently exit. The user canceled app startup
+ VRInitError_Init_AnotherAppLaunching = 117,
+ VRInitError_Init_SettingsInitFailed = 118,
+ VRInitError_Init_ShuttingDown = 119,
+ VRInitError_Init_TooManyObjects = 120,
+ VRInitError_Init_NoServerForBackgroundApp = 121,
+ VRInitError_Init_NotSupportedWithCompositor = 122,
+ VRInitError_Init_NotAvailableToUtilityApps = 123,
+ VRInitError_Init_Internal = 124,
+ VRInitError_Init_HmdDriverIdIsNone = 125,
+ VRInitError_Init_HmdNotFoundPresenceFailed = 126,
+ VRInitError_Init_VRMonitorNotFound = 127,
+ VRInitError_Init_VRMonitorStartupFailed = 128,
+ VRInitError_Init_LowPowerWatchdogNotSupported = 129,
+ VRInitError_Init_InvalidApplicationType = 130,
+ VRInitError_Init_NotAvailableToWatchdogApps = 131,
+ VRInitError_Init_WatchdogDisabledInSettings = 132,
+ VRInitError_Init_VRDashboardNotFound = 133,
+ VRInitError_Init_VRDashboardStartupFailed = 134,
+ VRInitError_Init_VRHomeNotFound = 135,
+ VRInitError_Init_VRHomeStartupFailed = 136,
+ VRInitError_Init_RebootingBusy = 137,
+ VRInitError_Init_FirmwareUpdateBusy = 138,
+ VRInitError_Init_FirmwareRecoveryBusy = 139,
+
+
+ VRInitError_Driver_Failed = 200,
+ VRInitError_Driver_Unknown = 201,
+ VRInitError_Driver_HmdUnknown = 202,
+ VRInitError_Driver_NotLoaded = 203,
+ VRInitError_Driver_RuntimeOutOfDate = 204,
+ VRInitError_Driver_HmdInUse = 205,
+ VRInitError_Driver_NotCalibrated = 206,
+ VRInitError_Driver_CalibrationInvalid = 207,
+ VRInitError_Driver_HmdDisplayNotFound = 208,
VRInitError_Driver_TrackedDeviceInterfaceUnknown = 209,
- // VRInitError_Driver_HmdDisplayNotFoundAfterFix = 210, // not needed: here for historic reasons
- VRInitError_Driver_HmdDriverIdOutOfBounds = 211,
- VRInitError_Driver_HmdDisplayMirrored = 212,
-
- VRInitError_IPC_ServerInitFailed = 300,
- VRInitError_IPC_ConnectFailed = 301,
- VRInitError_IPC_SharedStateInitFailed = 302,
- VRInitError_IPC_CompositorInitFailed = 303,
- VRInitError_IPC_MutexInitFailed = 304,
- VRInitError_IPC_Failed = 305,
- VRInitError_IPC_CompositorConnectFailed = 306,
+ // VRInitError_Driver_HmdDisplayNotFoundAfterFix = 210, // not needed: here for historic reasons
+ VRInitError_Driver_HmdDriverIdOutOfBounds = 211,
+ VRInitError_Driver_HmdDisplayMirrored = 212,
+
+ VRInitError_IPC_ServerInitFailed = 300,
+ VRInitError_IPC_ConnectFailed = 301,
+ VRInitError_IPC_SharedStateInitFailed = 302,
+ VRInitError_IPC_CompositorInitFailed = 303,
+ VRInitError_IPC_MutexInitFailed = 304,
+ VRInitError_IPC_Failed = 305,
+ VRInitError_IPC_CompositorConnectFailed = 306,
VRInitError_IPC_CompositorInvalidConnectResponse = 307,
VRInitError_IPC_ConnectFailedAfterMultipleAttempts = 308,
@@ -1088,7 +1101,7 @@ enum EVRInitError
VRInitError_Compositor_ScreenshotsInitFailed = 404,
VRInitError_Compositor_UnableToCreateDevice = 405,
- VRInitError_VendorSpecific_UnableToConnectToOculusRuntime = 1000,
+ VRInitError_VendorSpecific_UnableToConnectToOculusRuntime = 1000,
VRInitError_VendorSpecific_HmdFound_CantOpenDevice = 1101,
VRInitError_VendorSpecific_HmdFound_UnableToRequestConfigStart = 1102,
@@ -1404,6 +1417,7 @@ namespace vr
static const char * const k_pch_SteamVR_RetailDemo_Bool = "retailDemo";
static const char * const k_pch_SteamVR_IpdOffset_Float = "ipdOffset";
static const char * const k_pch_SteamVR_AllowSupersampleFiltering_Bool = "allowSupersampleFiltering";
+ static const char * const k_pch_SteamVR_EnableLinuxVulkanAsync_Bool = "enableLinuxVulkanAsync";
//-----------------------------------------------------------------------------
// lighthouse keys
diff --git a/lib/linux32/libopenvr_api.so b/lib/linux32/libopenvr_api.so
index 5d8b92e..eb2a5ea 100755
--- a/lib/linux32/libopenvr_api.so
+++ b/lib/linux32/libopenvr_api.so
Binary files differ
diff --git a/lib/linux64/libopenvr_api.so b/lib/linux64/libopenvr_api.so
index 3dd79ce..fc1778f 100755
--- a/lib/linux64/libopenvr_api.so
+++ b/lib/linux64/libopenvr_api.so
Binary files differ
diff --git a/lib/win32/openvr_api.lib b/lib/win32/openvr_api.lib
index bf79ff3..3517936 100644
--- a/lib/win32/openvr_api.lib
+++ b/lib/win32/openvr_api.lib
Binary files differ
diff --git a/lib/win64/openvr_api.lib b/lib/win64/openvr_api.lib
index 0afa05c..18d84ad 100644
--- a/lib/win64/openvr_api.lib
+++ b/lib/win64/openvr_api.lib
Binary files differ
diff --git a/samples/bin/linux64/libopenvr_api.so b/samples/bin/linux64/libopenvr_api.so
index 22be6cb..7130664 100644
--- a/samples/bin/linux64/libopenvr_api.so
+++ b/samples/bin/linux64/libopenvr_api.so
Binary files differ
diff --git a/samples/bin/osx32/libopenvr_api.dylib b/samples/bin/osx32/libopenvr_api.dylib
index fb1d77f..b353422 100644
--- a/samples/bin/osx32/libopenvr_api.dylib
+++ b/samples/bin/osx32/libopenvr_api.dylib
Binary files differ
diff --git a/samples/bin/win32/openvr_api.dll b/samples/bin/win32/openvr_api.dll
index bccb2f6..94a51bf 100644
--- a/samples/bin/win32/openvr_api.dll
+++ b/samples/bin/win32/openvr_api.dll
Binary files differ
diff --git a/samples/bin/win64/openvr_api.dll b/samples/bin/win64/openvr_api.dll
index f3270ee..d20a79e 100644
--- a/samples/bin/win64/openvr_api.dll
+++ b/samples/bin/win64/openvr_api.dll
Binary files differ
diff --git a/samples/hellovr_opengl/hellovr_opengl_main.cpp b/samples/hellovr_opengl/hellovr_opengl_main.cpp
index bd78b4c..9d004a9 100644
--- a/samples/hellovr_opengl/hellovr_opengl_main.cpp
+++ b/samples/hellovr_opengl/hellovr_opengl_main.cpp
@@ -539,8 +539,11 @@ void CMainApplication::Shutdown()
if( m_pContext )
{
- glDebugMessageControl( GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, nullptr, GL_FALSE );
- glDebugMessageCallback(nullptr, nullptr);
+ if( m_bDebugOpenGL )
+ {
+ glDebugMessageControl( GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, nullptr, GL_FALSE );
+ glDebugMessageCallback(nullptr, nullptr);
+ }
glDeleteBuffers(1, &m_glSceneVertBuffer);
if ( m_unSceneProgramID )
diff --git a/samples/hellovr_vulkan/hellovr_vulkan_main.cpp b/samples/hellovr_vulkan/hellovr_vulkan_main.cpp
index 884962b..fcadeb1 100644
--- a/samples/hellovr_vulkan/hellovr_vulkan_main.cpp
+++ b/samples/hellovr_vulkan/hellovr_vulkan_main.cpp
@@ -974,8 +974,26 @@ bool CMainApplication::BInitVulkanDevice()
return false;
}
- // Grab the first physical device
- m_pPhysicalDevice = pPhysicalDevices[ 0 ];
+ // Query OpenVR for the physical device to use
+ uint64_t pHMDPhysicalDevice = 0;
+ m_pHMD->GetOutputDevice( &pHMDPhysicalDevice, vr::TextureType_Vulkan, ( VkInstance_T * ) m_pInstance );
+
+ // Select the HMD physical device
+ m_pPhysicalDevice = VK_NULL_HANDLE;
+ for ( uint32_t nPhysicalDevice = 0; nPhysicalDevice < nDeviceCount; nPhysicalDevice++ )
+ {
+ if ( ( ( VkPhysicalDevice ) pHMDPhysicalDevice ) == pPhysicalDevices[ nPhysicalDevice ] )
+ {
+ m_pPhysicalDevice = ( VkPhysicalDevice ) pHMDPhysicalDevice;
+ break;
+ }
+ }
+ if ( m_pPhysicalDevice == VK_NULL_HANDLE )
+ {
+ // Fallback: Grab the first physical device
+ dprintf( "Failed to find GetOutputDevice VkPhysicalDevice, falling back to choosing first device.\n" );
+ m_pPhysicalDevice = pPhysicalDevices[ 0 ];
+ }
delete [] pPhysicalDevices;
vkGetPhysicalDeviceProperties( m_pPhysicalDevice, &m_physicalDeviceProperties );
diff --git a/src/ivrclientcore.h b/src/ivrclientcore.h
index 8144299..6884e7f 100644
--- a/src/ivrclientcore.h
+++ b/src/ivrclientcore.h
@@ -8,7 +8,7 @@ class IVRClientCore
{
public:
/** Initializes the system */
- virtual EVRInitError Init( vr::EVRApplicationType eApplicationType ) = 0;
+ virtual EVRInitError Init( vr::EVRApplicationType eApplicationType, const char *pStartupInfo ) = 0;
/** cleans up everything in vrclient.dll and prepares the DLL to be unloaded */
virtual void Cleanup() = 0;
@@ -29,7 +29,7 @@ public:
virtual const char *GetIDForVRInitError( vr::EVRInitError eError ) = 0;
};
-static const char * const IVRClientCore_Version = "IVRClientCore_002";
+static const char * const IVRClientCore_Version = "IVRClientCore_003";
}
diff --git a/src/openvr_api_public.cpp b/src/openvr_api_public.cpp
index 3e303dd..c63bf2a 100644
--- a/src/openvr_api_public.cpp
+++ b/src/openvr_api_public.cpp
@@ -7,6 +7,7 @@
#include "envvartools_public.h"
#include "hmderrors_public.h"
#include "vrpathregistry_public.h"
+#include <mutex>
using vr::EVRInitError;
using vr::IVRSystem;
@@ -18,6 +19,7 @@ namespace vr
static void *g_pVRModule = NULL;
static IVRClientCore *g_pHmdSystem = NULL;
+static std::recursive_mutex g_mutexSystem;
typedef void* (*VRClientCoreFactoryFn)(const char *pInterfaceName, int *pReturnCode);
@@ -33,50 +35,50 @@ EVRInitError VR_LoadHmdSystemInternal();
void CleanupInternalInterfaces();
-uint32_t VR_InitInternal( EVRInitError *peError, vr::EVRApplicationType eApplicationType )
+uint32_t VR_InitInternal2( EVRInitError *peError, vr::EVRApplicationType eApplicationType, const char *pStartupInfo )
{
+ std::lock_guard<std::recursive_mutex> lock( g_mutexSystem );
+
EVRInitError err = VR_LoadHmdSystemInternal();
- if (err != vr::VRInitError_None)
+ if ( err == vr::VRInitError_None )
{
- SharedLib_Unload(g_pVRModule);
- g_pHmdSystem = NULL;
- g_pVRModule = NULL;
-
- if (peError)
- *peError = err;
-
- return 0;
+ err = g_pHmdSystem->Init( eApplicationType, pStartupInfo );
}
- err = g_pHmdSystem->Init(eApplicationType);
- if (err != VRInitError_None)
+ if ( peError )
+ *peError = err;
+
+ if ( err != VRInitError_None )
{
- SharedLib_Unload(g_pVRModule);
+ SharedLib_Unload( g_pVRModule );
g_pHmdSystem = NULL;
g_pVRModule = NULL;
- if (peError)
- *peError = err;
-
return 0;
}
- if (peError)
- *peError = VRInitError_None;
-
return ++g_nVRToken;
}
+VR_INTERFACE uint32_t VR_CALLTYPE VR_InitInternal( EVRInitError *peError, EVRApplicationType eApplicationType );
+
+uint32_t VR_InitInternal( EVRInitError *peError, vr::EVRApplicationType eApplicationType )
+{
+ return VR_InitInternal2( peError, eApplicationType, nullptr );
+}
+
void VR_ShutdownInternal()
{
- if (g_pHmdSystem)
+ std::lock_guard<std::recursive_mutex> lock( g_mutexSystem );
+
+ if ( g_pHmdSystem )
{
g_pHmdSystem->Cleanup();
g_pHmdSystem = NULL;
}
- if (g_pVRModule)
+ if ( g_pVRModule )
{
- SharedLib_Unload(g_pVRModule);
+ SharedLib_Unload( g_pVRModule );
g_pVRModule = NULL;
}
@@ -152,6 +154,8 @@ EVRInitError VR_LoadHmdSystemInternal()
void *VR_GetGenericInterface(const char *pchInterfaceVersion, EVRInitError *peError)
{
+ std::lock_guard<std::recursive_mutex> lock( g_mutexSystem );
+
if (!g_pHmdSystem)
{
if (peError)
@@ -164,6 +168,8 @@ void *VR_GetGenericInterface(const char *pchInterfaceVersion, EVRInitError *peEr
bool VR_IsInterfaceVersionValid(const char *pchInterfaceVersion)
{
+ std::lock_guard<std::recursive_mutex> lock( g_mutexSystem );
+
if (!g_pHmdSystem)
{
return false;
@@ -174,6 +180,8 @@ bool VR_IsInterfaceVersionValid(const char *pchInterfaceVersion)
bool VR_IsHmdPresent()
{
+ std::lock_guard<std::recursive_mutex> lock( g_mutexSystem );
+
if( g_pHmdSystem )
{
// if we're already initialized, just call through
@@ -199,6 +207,8 @@ bool VR_IsHmdPresent()
/** Returns true if the OpenVR runtime is installed. */
bool VR_IsRuntimeInstalled()
{
+ std::lock_guard<std::recursive_mutex> lock( g_mutexSystem );
+
if( g_pHmdSystem )
{
// if we're already initialized, OpenVR is obviously installed
@@ -255,6 +265,8 @@ const char *VR_RuntimePath()
/** Returns the symbol version of an HMD error. */
const char *VR_GetVRInitErrorAsSymbol( EVRInitError error )
{
+ std::lock_guard<std::recursive_mutex> lock( g_mutexSystem );
+
if( g_pHmdSystem )
return g_pHmdSystem->GetIDForVRInitError( error );
else
@@ -265,6 +277,8 @@ const char *VR_GetVRInitErrorAsSymbol( EVRInitError error )
/** Returns the english string version of an HMD error. */
const char *VR_GetVRInitErrorAsEnglishDescription( EVRInitError error )
{
+ std::lock_guard<std::recursive_mutex> lock( g_mutexSystem );
+
if ( g_pHmdSystem )
return g_pHmdSystem->GetEnglishStringForHmdError( error );
else
diff --git a/src/vrcommon/hmderrors_public.cpp b/src/vrcommon/hmderrors_public.cpp
index bc1ad2b..c85a548 100644
--- a/src/vrcommon/hmderrors_public.cpp
+++ b/src/vrcommon/hmderrors_public.cpp
@@ -13,76 +13,79 @@ const char *GetEnglishStringForHmdError( vr::EVRInitError eError )
{
switch( eError )
{
- case VRInitError_None: return "No Error (0)";
-
- case VRInitError_Init_InstallationNotFound: return "Installation Not Found (100)";
- case VRInitError_Init_InstallationCorrupt: return "Installation Corrupt (101)";
- case VRInitError_Init_VRClientDLLNotFound: return "vrclient Shared Lib Not Found (102)";
- case VRInitError_Init_FileNotFound: return "File Not Found (103)";
- case VRInitError_Init_FactoryNotFound: return "Factory Function Not Found (104)";
- case VRInitError_Init_InterfaceNotFound: return "Interface Not Found (105)";
- case VRInitError_Init_InvalidInterface: return "Invalid Interface (106)";
- case VRInitError_Init_UserConfigDirectoryInvalid: return "User Config Directory Invalid (107)";
- case VRInitError_Init_HmdNotFound: return "Hmd Not Found (108)";
- case VRInitError_Init_NotInitialized: return "Not Initialized (109)";
- case VRInitError_Init_PathRegistryNotFound: return "Installation path could not be located (110)";
- case VRInitError_Init_NoConfigPath: return "Config path could not be located (111)";
- case VRInitError_Init_NoLogPath: return "Log path could not be located (112)";
- case VRInitError_Init_PathRegistryNotWritable: return "Unable to write path registry (113)";
- case VRInitError_Init_AppInfoInitFailed: return "App info manager init failed (114)";
- case VRInitError_Init_Retry: return "Internal Retry (115)";
- case VRInitError_Init_InitCanceledByUser: return "User Canceled Init (116)";
- case VRInitError_Init_AnotherAppLaunching: return "Another app was already launching (117)";
- case VRInitError_Init_SettingsInitFailed: return "Settings manager init failed (118)";
- case VRInitError_Init_ShuttingDown: return "VR system shutting down (119)";
- case VRInitError_Init_TooManyObjects: return "Too many tracked objects (120)";
- case VRInitError_Init_NoServerForBackgroundApp: return "Not starting vrserver for background app (121)";
- case VRInitError_Init_NotSupportedWithCompositor: return "The requested interface is incompatible with the compositor and the compositor is running (122)";
- case VRInitError_Init_NotAvailableToUtilityApps: return "This interface is not available to utility applications (123)";
- case VRInitError_Init_Internal: return "vrserver internal error (124)";
- case VRInitError_Init_HmdDriverIdIsNone: return "Hmd DriverId is invalid (125)";
+ case VRInitError_None: return "No Error (0)";
+
+ case VRInitError_Init_InstallationNotFound: return "Installation Not Found (100)";
+ case VRInitError_Init_InstallationCorrupt: return "Installation Corrupt (101)";
+ case VRInitError_Init_VRClientDLLNotFound: return "vrclient Shared Lib Not Found (102)";
+ case VRInitError_Init_FileNotFound: return "File Not Found (103)";
+ case VRInitError_Init_FactoryNotFound: return "Factory Function Not Found (104)";
+ case VRInitError_Init_InterfaceNotFound: return "Interface Not Found (105)";
+ case VRInitError_Init_InvalidInterface: return "Invalid Interface (106)";
+ case VRInitError_Init_UserConfigDirectoryInvalid: return "User Config Directory Invalid (107)";
+ case VRInitError_Init_HmdNotFound: return "Hmd Not Found (108)";
+ case VRInitError_Init_NotInitialized: return "Not Initialized (109)";
+ case VRInitError_Init_PathRegistryNotFound: return "Installation path could not be located (110)";
+ case VRInitError_Init_NoConfigPath: return "Config path could not be located (111)";
+ case VRInitError_Init_NoLogPath: return "Log path could not be located (112)";
+ case VRInitError_Init_PathRegistryNotWritable: return "Unable to write path registry (113)";
+ case VRInitError_Init_AppInfoInitFailed: return "App info manager init failed (114)";
+ case VRInitError_Init_Retry: return "Internal Retry (115)";
+ case VRInitError_Init_InitCanceledByUser: return "User Canceled Init (116)";
+ case VRInitError_Init_AnotherAppLaunching: return "Another app was already launching (117)";
+ case VRInitError_Init_SettingsInitFailed: return "Settings manager init failed (118)";
+ case VRInitError_Init_ShuttingDown: return "VR system shutting down (119)";
+ case VRInitError_Init_TooManyObjects: return "Too many tracked objects (120)";
+ case VRInitError_Init_NoServerForBackgroundApp: return "Not starting vrserver for background app (121)";
+ case VRInitError_Init_NotSupportedWithCompositor: return "The requested interface is incompatible with the compositor and the compositor is running (122)";
+ case VRInitError_Init_NotAvailableToUtilityApps: return "This interface is not available to utility applications (123)";
+ case VRInitError_Init_Internal: return "vrserver internal error (124)";
+ case VRInitError_Init_HmdDriverIdIsNone: return "Hmd DriverId is invalid (125)";
case VRInitError_Init_HmdNotFoundPresenceFailed: return "Hmd Not Found Presence Failed (126)";
- case VRInitError_Init_VRMonitorNotFound: return "VR Monitor Not Found (127)";
- case VRInitError_Init_VRMonitorStartupFailed: return "VR Monitor startup failed (128)";
+ case VRInitError_Init_VRMonitorNotFound: return "VR Monitor Not Found (127)";
+ case VRInitError_Init_VRMonitorStartupFailed: return "VR Monitor startup failed (128)";
case VRInitError_Init_LowPowerWatchdogNotSupported: return "Low Power Watchdog Not Supported (129)";
- case VRInitError_Init_InvalidApplicationType: return "Invalid Application Type (130)";
- case VRInitError_Init_NotAvailableToWatchdogApps: return "Not available to watchdog apps (131)";
- case VRInitError_Init_WatchdogDisabledInSettings: return "Watchdog disabled in settings (132)";
- case VRInitError_Init_VRDashboardNotFound: return "VR Dashboard Not Found (133)";
- case VRInitError_Init_VRDashboardStartupFailed: return "VR Dashboard startup failed (134)";
- case VRInitError_Init_VRHomeNotFound: return "VR Home Not Found (135)";
- case VRInitError_Init_VRHomeStartupFailed: return "VR home startup failed (136)";
-
- case VRInitError_Driver_Failed: return "Driver Failed (200)";
- case VRInitError_Driver_Unknown: return "Driver Not Known (201)";
- case VRInitError_Driver_HmdUnknown: return "HMD Not Known (202)";
- case VRInitError_Driver_NotLoaded: return "Driver Not Loaded (203)";
- case VRInitError_Driver_RuntimeOutOfDate: return "Driver runtime is out of date (204)";
- case VRInitError_Driver_HmdInUse: return "HMD already in use by another application (205)";
- case VRInitError_Driver_NotCalibrated: return "Device is not calibrated (206)";
- case VRInitError_Driver_CalibrationInvalid: return "Device Calibration is invalid (207)";
- case VRInitError_Driver_HmdDisplayNotFound: return "HMD detected over USB, but Monitor not found (208)";
- case VRInitError_Driver_TrackedDeviceInterfaceUnknown: return "Driver Tracked Device Interface unknown (209)";
- // case VRInitError_Driver_HmdDisplayNotFoundAfterFix: return "HMD detected over USB, but Monitor not found after attempt to fix (210)"; // taken out upon Ben's request: He thinks that there is no need to separate that error from 208
- case VRInitError_Driver_HmdDriverIdOutOfBounds: return "Hmd DriverId is our of bounds (211)";
- case VRInitError_Driver_HmdDisplayMirrored: return "HMD detected over USB, but Monitor may be mirrored instead of extended (212)";
-
- case VRInitError_IPC_ServerInitFailed: return "VR Server Init Failed (300)";
- case VRInitError_IPC_ConnectFailed: return "Connect to VR Server Failed (301)";
- case VRInitError_IPC_SharedStateInitFailed: return "Shared IPC State Init Failed (302)";
- case VRInitError_IPC_CompositorInitFailed: return "Shared IPC Compositor Init Failed (303)";
- case VRInitError_IPC_MutexInitFailed: return "Shared IPC Mutex Init Failed (304)";
- case VRInitError_IPC_Failed: return "Shared IPC Failed (305)";
+ case VRInitError_Init_InvalidApplicationType: return "Invalid Application Type (130)";
+ case VRInitError_Init_NotAvailableToWatchdogApps: return "Not available to watchdog apps (131)";
+ case VRInitError_Init_WatchdogDisabledInSettings: return "Watchdog disabled in settings (132)";
+ case VRInitError_Init_VRDashboardNotFound: return "VR Dashboard Not Found (133)";
+ case VRInitError_Init_VRDashboardStartupFailed: return "VR Dashboard startup failed (134)";
+ case VRInitError_Init_VRHomeNotFound: return "VR Home Not Found (135)";
+ case VRInitError_Init_VRHomeStartupFailed: return "VR home startup failed (136)";
+ case VRInitError_Init_RebootingBusy: return "Rebooting In Progress (137)";
+ case VRInitError_Init_FirmwareUpdateBusy: return "Firmware Update In Progress (138)";
+ case VRInitError_Init_FirmwareRecoveryBusy: return "Firmware Recovery In Progress (139)";
+
+ case VRInitError_Driver_Failed: return "Driver Failed (200)";
+ case VRInitError_Driver_Unknown: return "Driver Not Known (201)";
+ case VRInitError_Driver_HmdUnknown: return "HMD Not Known (202)";
+ case VRInitError_Driver_NotLoaded: return "Driver Not Loaded (203)";
+ case VRInitError_Driver_RuntimeOutOfDate: return "Driver runtime is out of date (204)";
+ case VRInitError_Driver_HmdInUse: return "HMD already in use by another application (205)";
+ case VRInitError_Driver_NotCalibrated: return "Device is not calibrated (206)";
+ case VRInitError_Driver_CalibrationInvalid: return "Device Calibration is invalid (207)";
+ case VRInitError_Driver_HmdDisplayNotFound: return "HMD detected over USB, but Monitor not found (208)";
+ case VRInitError_Driver_TrackedDeviceInterfaceUnknown: return "Driver Tracked Device Interface unknown (209)";
+ // case VRInitError_Driver_HmdDisplayNotFoundAfterFix: return "HMD detected over USB, but Monitor not found after attempt to fix (210)"; // taken out upon Ben's request: He thinks that there is no need to separate that error from 208
+ case VRInitError_Driver_HmdDriverIdOutOfBounds: return "Hmd DriverId is our of bounds (211)";
+ case VRInitError_Driver_HmdDisplayMirrored: return "HMD detected over USB, but Monitor may be mirrored instead of extended (212)";
+
+ case VRInitError_IPC_ServerInitFailed: return "VR Server Init Failed (300)";
+ case VRInitError_IPC_ConnectFailed: return "Connect to VR Server Failed (301)";
+ case VRInitError_IPC_SharedStateInitFailed: return "Shared IPC State Init Failed (302)";
+ case VRInitError_IPC_CompositorInitFailed: return "Shared IPC Compositor Init Failed (303)";
+ case VRInitError_IPC_MutexInitFailed: return "Shared IPC Mutex Init Failed (304)";
+ case VRInitError_IPC_Failed: return "Shared IPC Failed (305)";
case VRInitError_IPC_CompositorConnectFailed: return "Shared IPC Compositor Connect Failed (306)";
case VRInitError_IPC_CompositorInvalidConnectResponse: return "Shared IPC Compositor Invalid Connect Response (307)";
case VRInitError_IPC_ConnectFailedAfterMultipleAttempts: return "Shared IPC Connect Failed After Multiple Attempts (308)";
- case VRInitError_Compositor_Failed: return "Compositor failed to initialize (400)";
- case VRInitError_Compositor_D3D11HardwareRequired: return "Compositor failed to find DX11 hardware (401)";
- case VRInitError_Compositor_FirmwareRequiresUpdate: return "Compositor requires mandatory firmware update (402)";
- case VRInitError_Compositor_OverlayInitFailed: return "Compositor initialization succeeded, but overlay init failed (403)";
- case VRInitError_Compositor_ScreenshotsInitFailed: return "Compositor initialization succeeded, but screenshot init failed (404)";
- case VRInitError_Compositor_UnableToCreateDevice: return "Compositor unable to create graphics device (405)";
+ case VRInitError_Compositor_Failed: return "Compositor failed to initialize (400)";
+ case VRInitError_Compositor_D3D11HardwareRequired: return "Compositor failed to find DX11 hardware (401)";
+ case VRInitError_Compositor_FirmwareRequiresUpdate: return "Compositor requires mandatory firmware update (402)";
+ case VRInitError_Compositor_OverlayInitFailed: return "Compositor initialization succeeded, but overlay init failed (403)";
+ case VRInitError_Compositor_ScreenshotsInitFailed: return "Compositor initialization succeeded, but screenshot init failed (404)";
+ case VRInitError_Compositor_UnableToCreateDevice: return "Compositor unable to create graphics device (405)";
// Oculus
case VRInitError_VendorSpecific_UnableToConnectToOculusRuntime: return "Unable to connect to Oculus Runtime (1000)";
@@ -157,6 +160,9 @@ const char *GetIDForVRInitError( vr::EVRInitError eError )
RETURN_ENUM_AS_STRING( VRInitError_Init_VRDashboardStartupFailed );
RETURN_ENUM_AS_STRING( VRInitError_Init_VRHomeNotFound );
RETURN_ENUM_AS_STRING( VRInitError_Init_VRHomeStartupFailed );
+ RETURN_ENUM_AS_STRING( VRInitError_Init_RebootingBusy );
+ RETURN_ENUM_AS_STRING( VRInitError_Init_FirmwareUpdateBusy );
+ RETURN_ENUM_AS_STRING( VRInitError_Init_FirmwareRecoveryBusy );
RETURN_ENUM_AS_STRING( VRInitError_Init_HmdDriverIdIsNone );
RETURN_ENUM_AS_STRING( VRInitError_Init_HmdNotFoundPresenceFailed );