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:
authorJoe Ludwig <joe@valvesoftware.com>2019-08-02 23:56:44 +0300
committerJoe Ludwig <joe@valvesoftware.com>2019-08-02 23:56:44 +0300
commitd9cffe2ff87bf0bac69b56bcf6fb60652a9d4009 (patch)
tree3f336dfa1daaae03a50ec3c0ca5eb968cdd62672
parentcdaf2b330c8df58986391b253cd8f04328139823 (diff)
OpenVR SDK 1.6.10v1.6.10
IVRSystem: * Added GetAppContainerFilePaths – Call this function to get a semicolon-delimited list of file paths that any app container that intends to act as a SteamVR application will need access to. * Added GetRuntimeVersion – This returns the version of the SteamVR runtime as a string. IVROverlay: * VROverlayFlags_ProtectedContent – This flag prevents the overlay in question from being readable by any OpenVR SDK, and prevents it from showing up in the overlay viewer. CVRPropertyHelpers: * Added getters and setters for 2, 3, and 4 element vectors Driver Interface: * Added IVRServerDriverHost::GetFrameTimings, which allows drivers to retrieve frame timing data * Added tracked device class to IVRWatchdogHost::WatchdogWakeUp – This allows more precise logging of how the user caused SteamVR to wake up from hardware activity. [git-p4: depot-paths = "//vr/steamvr/sdk_release/": change = 5271985]
-rwxr-xr-xbin/linux32/libopenvr_api.sobin304695 -> 304950 bytes
-rwxr-xr-xbin/linux32/libopenvr_api.so.dbgbin2128520 -> 2143067 bytes
-rwxr-xr-xbin/linux64/libopenvr_api.sobin303256 -> 307641 bytes
-rwxr-xr-xbin/linux64/libopenvr_api.so.dbgbin2665453 -> 2690382 bytes
-rwxr-xr-xbin/osx32/libopenvr_api.dylibbin155684 -> 155684 bytes
-rw-r--r--bin/osx32/libopenvr_api.dylib.dSYM/Contents/Resources/DWARF/libopenvr_api.dylibbin1185501 -> 1187823 bytes
-rw-r--r--bin/win32/openvr_api.dllbin491296 -> 490784 bytes
-rw-r--r--bin/win32/openvr_api.pdbbin9900032 -> 9900032 bytes
-rw-r--r--bin/win64/openvr_api.dllbin597792 -> 598816 bytes
-rw-r--r--bin/win64/openvr_api.pdbbin9736192 -> 9744384 bytes
-rw-r--r--headers/openvr.h183
-rw-r--r--headers/openvr_api.cs76
-rw-r--r--headers/openvr_api.json66
-rw-r--r--headers/openvr_capi.h64
-rw-r--r--headers/openvr_driver.h140
-rwxr-xr-xlib/linux32/libopenvr_api.sobin2128520 -> 2143067 bytes
-rwxr-xr-xlib/linux64/libopenvr_api.sobin2665453 -> 2690382 bytes
-rw-r--r--samples/bin/linux32/libopenvr_api.sobin0 -> 304950 bytes
-rw-r--r--samples/bin/linux64/libopenvr_api.sobin303256 -> 307641 bytes
-rw-r--r--samples/bin/osx32/libopenvr_api.dylibbin155684 -> 155684 bytes
-rw-r--r--samples/bin/win32/openvr_api.dllbin491296 -> 490784 bytes
-rw-r--r--samples/bin/win64/openvr_api.dllbin597792 -> 598816 bytes
-rw-r--r--src/vrcommon/envvartools_public.cpp42
-rw-r--r--src/vrcommon/envvartools_public.h1
-rw-r--r--src/vrcommon/hmderrors_public.cpp7
-rw-r--r--src/vrcommon/pathtools_public.cpp17
-rw-r--r--src/vrcommon/strtools_public.cpp11
-rw-r--r--src/vrcommon/strtools_public.h6
-rw-r--r--src/vrcommon/vrpathregistry_public.cpp4
29 files changed, 469 insertions, 148 deletions
diff --git a/bin/linux32/libopenvr_api.so b/bin/linux32/libopenvr_api.so
index 258c8f5..c95dc19 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 31d2871..96f0d97 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 8d894cf..2575362 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 10fd1dc..2502ff0 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 aa0ac95..059ac11 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 4d261f6..8c9a1d6 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/win32/openvr_api.dll b/bin/win32/openvr_api.dll
index 9d8ce6e..4b06e42 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 9070b31..81e9f1f 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 86f697b..114a983 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 b7ec1bc..8996cc5 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 9f4ac63..c9e1f5d 100644
--- a/headers/openvr.h
+++ b/headers/openvr.h
@@ -15,8 +15,8 @@
namespace vr
{
static const uint32_t k_nSteamVRVersionMajor = 1;
- static const uint32_t k_nSteamVRVersionMinor = 5;
- static const uint32_t k_nSteamVRVersionBuild = 17;
+ static const uint32_t k_nSteamVRVersionMinor = 6;
+ static const uint32_t k_nSteamVRVersionBuild = 10;
} // namespace vr
// vrtypes.h
@@ -436,6 +436,8 @@ enum ETrackedDeviceProperty
Prop_DisplayAvailableFrameRates_Float_Array = 2080, // populated by compositor from actual EDID list when available from GPU driver
Prop_DisplaySupportsMultipleFramerates_Bool = 2081, // if this is true but Prop_DisplayAvailableFrameRates_Float_Array is empty, explain to user
+ Prop_DisplayColorMultLeft_Vector3 = 2082,
+ Prop_DisplayColorMultRight_Vector3 = 2083,
Prop_DashboardLayoutPathName_String = 2090,
@@ -1528,6 +1530,7 @@ enum EVRInitError
VRInitError_Init_TrackerManagerInitFailed = 142,
VRInitError_Init_AlreadyRunning = 143,
VRInitError_Init_FailedForVrMonitor = 144,
+ VRInitError_Init_PropertyManagerInitFailed = 145,
VRInitError_Driver_Failed = 200,
VRInitError_Driver_Unknown = 201,
@@ -1553,6 +1556,8 @@ enum EVRInitError
VRInitError_IPC_CompositorConnectFailed = 306,
VRInitError_IPC_CompositorInvalidConnectResponse = 307,
VRInitError_IPC_ConnectFailedAfterMultipleAttempts = 308,
+ VRInitError_IPC_ConnectFailedAfterTargetExited = 309,
+ VRInitError_IPC_NamespaceUnavailable = 310,
VRInitError_Compositor_Failed = 400,
VRInitError_Compositor_D3D11HardwareRequired = 401,
@@ -1752,6 +1757,75 @@ typedef uint32_t ScreenshotHandle_t;
static const uint32_t k_unScreenshotHandleInvalid = 0;
+/** Compositor frame timing reprojection flags. */
+const uint32_t VRCompositor_ReprojectionReason_Cpu = 0x01;
+const uint32_t VRCompositor_ReprojectionReason_Gpu = 0x02;
+const uint32_t VRCompositor_ReprojectionAsync = 0x04; // This flag indicates the async reprojection mode is active,
+ // but does not indicate if reprojection actually happened or not.
+ // Use the ReprojectionReason flags above to check if reprojection
+ // was actually applied (i.e. scene texture was reused).
+ // NumFramePresents > 1 also indicates the scene texture was reused,
+ // and also the number of times that it was presented in total.
+
+const uint32_t VRCompositor_ReprojectionMotion = 0x08; // This flag indicates whether or not motion smoothing was triggered for this frame
+
+const uint32_t VRCompositor_PredictionMask = 0x30; // The runtime may predict more than one frame (up to four) ahead if
+ // it detects the application is taking too long to render. These two
+ // bits will contain the count of additional frames (normally zero).
+ // Use the VR_COMPOSITOR_ADDITIONAL_PREDICTED_FRAMES macro to read from
+ // the latest frame timing entry.
+
+const uint32_t VRCompositor_ThrottleMask = 0xC0; // Number of frames the compositor is throttling the application.
+ // Use the VR_COMPOSITOR_NUMBER_OF_THROTTLED_FRAMES macro to read from
+ // the latest frame timing entry.
+
+#define VR_COMPOSITOR_ADDITIONAL_PREDICTED_FRAMES( timing ) ( ( ( timing ).m_nReprojectionFlags & vr::VRCompositor_PredictionMask ) >> 4 )
+#define VR_COMPOSITOR_NUMBER_OF_THROTTLED_FRAMES( timing ) ( ( ( timing ).m_nReprojectionFlags & vr::VRCompositor_ThrottleMask ) >> 6 )
+
+/** Provides a single frame's timing information to the app */
+struct Compositor_FrameTiming
+{
+ uint32_t m_nSize; // Set to sizeof( Compositor_FrameTiming )
+ uint32_t m_nFrameIndex;
+ uint32_t m_nNumFramePresents; // number of times this frame was presented
+ uint32_t m_nNumMisPresented; // number of times this frame was presented on a vsync other than it was originally predicted to
+ uint32_t m_nNumDroppedFrames; // number of additional times previous frame was scanned out
+ uint32_t m_nReprojectionFlags;
+
+ /** Absolute time reference for comparing frames. This aligns with the vsync that running start is relative to. */
+ double m_flSystemTimeInSeconds;
+
+ /** These times may include work from other processes due to OS scheduling.
+ * The fewer packets of work these are broken up into, the less likely this will happen.
+ * GPU work can be broken up by calling Flush. This can sometimes be useful to get the GPU started
+ * processing that work earlier in the frame. */
+ float m_flPreSubmitGpuMs; // time spent rendering the scene (gpu work submitted between WaitGetPoses and second Submit)
+ float m_flPostSubmitGpuMs; // additional time spent rendering by application (e.g. companion window)
+ float m_flTotalRenderGpuMs; // time between work submitted immediately after present (ideally vsync) until the end of compositor submitted work
+ float m_flCompositorRenderGpuMs; // time spend performing distortion correction, rendering chaperone, overlays, etc.
+ float m_flCompositorRenderCpuMs; // time spent on cpu submitting the above work for this frame
+ float m_flCompositorIdleCpuMs; // time spent waiting for running start (application could have used this much more time)
+
+ /** Miscellaneous measured intervals. */
+ float m_flClientFrameIntervalMs; // time between calls to WaitGetPoses
+ float m_flPresentCallCpuMs; // time blocked on call to present (usually 0.0, but can go long)
+ float m_flWaitForPresentCpuMs; // time spent spin-waiting for frame index to change (not near-zero indicates wait object failure)
+ float m_flSubmitFrameMs; // time spent in IVRCompositor::Submit (not near-zero indicates driver issue)
+
+ /** The following are all relative to this frame's SystemTimeInSeconds */
+ float m_flWaitGetPosesCalledMs;
+ float m_flNewPosesReadyMs;
+ float m_flNewFrameReadyMs; // second call to IVRCompositor::Submit
+ float m_flCompositorUpdateStartMs;
+ float m_flCompositorUpdateEndMs;
+ float m_flCompositorRenderStartMs;
+
+ vr::TrackedDevicePose_t m_HmdPose; // pose used by app to render this frame
+
+ uint32_t m_nNumVSyncsReadyForUse;
+ uint32_t m_nNumVSyncsToFirstView;
+};
+
/** Frame timing data provided by direct mode drivers. */
struct DriverDirectMode_FrameTiming
{
@@ -2142,6 +2216,26 @@ public:
* prompt the user to save and then exit afterward, otherwise the user will be left in a confusing state. */
virtual void AcknowledgeQuit_UserPrompt() = 0;
+ // -------------------------------------
+ // App container sandbox methods
+ // -------------------------------------
+
+ /** Retrieves a null-terminated, semicolon-delimited list of UTF8 file paths that an application
+ * must have read access to when running inside of an app container. Returns the number of bytes
+ * needed to hold the list. */
+ virtual uint32_t GetAppContainerFilePaths( VR_OUT_STRING() char *pchBuffer, uint32_t unBufferSize ) = 0;
+
+ // -------------------------------------
+ // System methods
+ // -------------------------------------
+
+ /** Returns the current version of the SteamVR runtime. The returned string will remain valid until VR_Shutdown is called.
+ *
+ * NOTE: Is it not appropriate to use this version to test for the presence of any SteamVR feature. Only use this version
+ * number for logging or showing to a user, and not to try to detect anything at runtime. When appropriate, feature-specific
+ * presence information is provided by other APIs. */
+ virtual const char *GetRuntimeVersion() = 0;
+
};
static const char * const IVRSystem_Version = "IVRSystem_020";
@@ -2514,7 +2608,7 @@ namespace vr
static const char * const k_pch_SteamVR_ActivateMultipleDrivers_Bool = "activateMultipleDrivers";
static const char * const k_pch_SteamVR_UsingSpeakers_Bool = "usingSpeakers";
static const char * const k_pch_SteamVR_SpeakersForwardYawOffsetDegrees_Float = "speakersForwardYawOffsetDegrees";
- static const char * const k_pch_SteamVR_BaseStationPowerManagement_Bool = "basestationPowerManagement";
+ static const char * const k_pch_SteamVR_BaseStationPowerManagement_Int32 = "basestationPowerManagement";
static const char * const k_pch_SteamVR_NeverKillProcesses_Bool = "neverKillProcesses";
static const char * const k_pch_SteamVR_SupersampleScale_Float = "supersampleScale";
static const char * const k_pch_SteamVR_MaxRecommendedResolution_Int32 = "maxRecommendedResolution";
@@ -2542,13 +2636,15 @@ namespace vr
static const char * const k_pch_SteamVR_DebugInput = "debugInput";
static const char * const k_pch_SteamVR_DebugInputBinding = "debugInputBinding";
static const char * const k_pch_SteamVR_DoNotFadeToGrid = "doNotFadeToGrid";
- static const char * const k_pch_SteamVR_InputBindingUIBlock = "inputBindingUI";
static const char * const k_pch_SteamVR_RenderCameraMode = "renderCameraMode";
static const char * const k_pch_SteamVR_EnableSharedResourceJournaling = "enableSharedResourceJournaling";
static const char * const k_pch_SteamVR_EnableSafeMode = "enableSafeMode";
static const char * const k_pch_SteamVR_PreferredRefreshRate = "preferredRefreshRate";
static const char * const k_pch_SteamVR_LastVersionNotice = "lastVersionNotice";
static const char * const k_pch_SteamVR_LastVersionNoticeDate = "lastVersionNoticeDate";
+ static const char * const k_pch_SteamVR_HmdDisplayColorGainR_Float = "hmdDisplayColorGainR";
+ static const char * const k_pch_SteamVR_HmdDisplayColorGainG_Float = "hmdDisplayColorGainG";
+ static const char * const k_pch_SteamVR_HmdDisplayColorGainB_Float = "hmdDisplayColorGainB";
//-----------------------------------------------------------------------------
// direct mode keys
@@ -2729,6 +2825,14 @@ namespace vr
// Dismissed warnings
static const char * const k_pch_DismissedWarnings_Section = "DismissedWarnings";
+ //-----------------------------------------------------------------------------
+ // Input Settings
+ static const char * const k_pch_Input_Section = "input";
+ static const char* const k_pch_Input_LeftThumbstickRotation_Float = "leftThumbstickRotation";
+ static const char* const k_pch_Input_RightThumbstickRotation_Float = "rightThumbstickRotation";
+ static const char* const k_pch_Input_ThumbstickDeadzone_Float = "thumbstickDeadzone";
+
+
} // namespace vr
// ivrchaperone.h
@@ -2931,74 +3035,6 @@ enum EVRCompositorTimingMode
VRCompositorTimingMode_Explicit_ApplicationPerformsPostPresentHandoff = 2,
};
-const uint32_t VRCompositor_ReprojectionReason_Cpu = 0x01;
-const uint32_t VRCompositor_ReprojectionReason_Gpu = 0x02;
-const uint32_t VRCompositor_ReprojectionAsync = 0x04; // This flag indicates the async reprojection mode is active,
- // but does not indicate if reprojection actually happened or not.
- // Use the ReprojectionReason flags above to check if reprojection
- // was actually applied (i.e. scene texture was reused).
- // NumFramePresents > 1 also indicates the scene texture was reused,
- // and also the number of times that it was presented in total.
-
-const uint32_t VRCompositor_ReprojectionMotion = 0x08; // This flag indicates whether or not motion smoothing was triggered for this frame
-
-const uint32_t VRCompositor_PredictionMask = 0x30; // The runtime may predict more than one frame (up to four) ahead if
- // it detects the application is taking too long to render. These two
- // bits will contain the count of additional frames (normally zero).
- // Use the VR_COMPOSITOR_ADDITIONAL_PREDICTED_FRAMES macro to read from
- // the latest frame timing entry.
-
-const uint32_t VRCompositor_ThrottleMask = 0xC0; // Number of frames the compositor is throttling the application.
- // Use the VR_COMPOSITOR_NUMBER_OF_THROTTLED_FRAMES macro to read from
- // the latest frame timing entry.
-
-#define VR_COMPOSITOR_ADDITIONAL_PREDICTED_FRAMES( timing ) ( ( ( timing ).m_nReprojectionFlags & vr::VRCompositor_PredictionMask ) >> 4 )
-#define VR_COMPOSITOR_NUMBER_OF_THROTTLED_FRAMES( timing ) ( ( ( timing ).m_nReprojectionFlags & vr::VRCompositor_ThrottleMask ) >> 6 )
-
-/** Provides a single frame's timing information to the app */
-struct Compositor_FrameTiming
-{
- uint32_t m_nSize; // Set to sizeof( Compositor_FrameTiming )
- uint32_t m_nFrameIndex;
- uint32_t m_nNumFramePresents; // number of times this frame was presented
- uint32_t m_nNumMisPresented; // number of times this frame was presented on a vsync other than it was originally predicted to
- uint32_t m_nNumDroppedFrames; // number of additional times previous frame was scanned out
- uint32_t m_nReprojectionFlags;
-
- /** Absolute time reference for comparing frames. This aligns with the vsync that running start is relative to. */
- double m_flSystemTimeInSeconds;
-
- /** These times may include work from other processes due to OS scheduling.
- * The fewer packets of work these are broken up into, the less likely this will happen.
- * GPU work can be broken up by calling Flush. This can sometimes be useful to get the GPU started
- * processing that work earlier in the frame. */
- float m_flPreSubmitGpuMs; // time spent rendering the scene (gpu work submitted between WaitGetPoses and second Submit)
- float m_flPostSubmitGpuMs; // additional time spent rendering by application (e.g. companion window)
- float m_flTotalRenderGpuMs; // time between work submitted immediately after present (ideally vsync) until the end of compositor submitted work
- float m_flCompositorRenderGpuMs; // time spend performing distortion correction, rendering chaperone, overlays, etc.
- float m_flCompositorRenderCpuMs; // time spent on cpu submitting the above work for this frame
- float m_flCompositorIdleCpuMs; // time spent waiting for running start (application could have used this much more time)
-
- /** Miscellaneous measured intervals. */
- float m_flClientFrameIntervalMs; // time between calls to WaitGetPoses
- float m_flPresentCallCpuMs; // time blocked on call to present (usually 0.0, but can go long)
- float m_flWaitForPresentCpuMs; // time spent spin-waiting for frame index to change (not near-zero indicates wait object failure)
- float m_flSubmitFrameMs; // time spent in IVRCompositor::Submit (not near-zero indicates driver issue)
-
- /** The following are all relative to this frame's SystemTimeInSeconds */
- float m_flWaitGetPosesCalledMs;
- float m_flNewPosesReadyMs;
- float m_flNewFrameReadyMs; // second call to IVRCompositor::Submit
- float m_flCompositorUpdateStartMs;
- float m_flCompositorUpdateEndMs;
- float m_flCompositorRenderStartMs;
-
- vr::TrackedDevicePose_t m_HmdPose; // pose used by app to render this frame
-
- uint32_t m_nNumVSyncsReadyForUse;
- uint32_t m_nNumVSyncsToFirstView;
-};
-
/** Cumulative stats for current application. These are not cleared until a new app connects,
* but they do stop accumulating once the associated app disconnects. */
struct Compositor_CumulativeStats
@@ -3419,6 +3455,9 @@ namespace vr
// If this is set the overlay will receive smooth VREvent_ScrollSmooth that emulate trackpad scrolling.
// Requires mouse input mode.
VROverlayFlags_SendVRSmoothScrollEvents = 17,
+
+ // If this is set, the overlay texture will be protected content, preventing unauthorized reads.
+ VROverlayFlags_ProtectedContent = 18,
};
enum VRMessageOverlayResponse
diff --git a/headers/openvr_api.cs b/headers/openvr_api.cs
index cce689c..f96ad80 100644
--- a/headers/openvr_api.cs
+++ b/headers/openvr_api.cs
@@ -245,6 +245,16 @@ public struct IVRSystem
[MarshalAs(UnmanagedType.FunctionPtr)]
internal _AcknowledgeQuit_UserPrompt AcknowledgeQuit_UserPrompt;
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate uint _GetAppContainerFilePaths(System.Text.StringBuilder pchBuffer, uint unBufferSize);
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _GetAppContainerFilePaths GetAppContainerFilePaths;
+
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ internal delegate IntPtr _GetRuntimeVersion();
+ [MarshalAs(UnmanagedType.FunctionPtr)]
+ internal _GetRuntimeVersion GetRuntimeVersion;
+
}
[StructLayout(LayoutKind.Sequential)]
@@ -2093,6 +2103,16 @@ public class CVRSystem
{
FnTable.AcknowledgeQuit_UserPrompt();
}
+ public uint GetAppContainerFilePaths(System.Text.StringBuilder pchBuffer,uint unBufferSize)
+ {
+ uint result = FnTable.GetAppContainerFilePaths(pchBuffer,unBufferSize);
+ return result;
+ }
+ public string GetRuntimeVersion()
+ {
+ IntPtr result = FnTable.GetRuntimeVersion();
+ return Marshal.PtrToStringAnsi(result);
+ }
}
@@ -3998,6 +4018,8 @@ public enum ETrackedDeviceProperty
Prop_DriverProvidedChaperoneVisibility_Bool = 2076,
Prop_DisplayAvailableFrameRates_Float_Array = 2080,
Prop_DisplaySupportsMultipleFramerates_Bool = 2081,
+ Prop_DisplayColorMultLeft_Vector3 = 2082,
+ Prop_DisplayColorMultRight_Vector3 = 2083,
Prop_DashboardLayoutPathName_String = 2090,
Prop_DriverRequestedMuraCorrectionMode_Int32 = 2200,
Prop_DriverRequestedMuraFeather_InnerLeft_Int32 = 2201,
@@ -4507,6 +4529,7 @@ public enum EVRInitError
Init_TrackerManagerInitFailed = 142,
Init_AlreadyRunning = 143,
Init_FailedForVrMonitor = 144,
+ Init_PropertyManagerInitFailed = 145,
Driver_Failed = 200,
Driver_Unknown = 201,
Driver_HmdUnknown = 202,
@@ -4529,6 +4552,8 @@ public enum EVRInitError
IPC_CompositorConnectFailed = 306,
IPC_CompositorInvalidConnectResponse = 307,
IPC_ConnectFailedAfterMultipleAttempts = 308,
+ IPC_ConnectFailedAfterTargetExited = 309,
+ IPC_NamespaceUnavailable = 310,
Compositor_Failed = 400,
Compositor_D3D11HardwareRequired = 401,
Compositor_FirmwareRequiresUpdate = 402,
@@ -4837,6 +4862,7 @@ public enum VROverlayFlags
VisibleInDashboard = 15,
MakeOverlaysInteractiveIfVisible = 16,
SendVRSmoothScrollEvents = 17,
+ ProtectedContent = 18,
}
public enum VRMessageOverlayResponse
{
@@ -5513,26 +5539,6 @@ public enum EVRDebugError
public TrackedDevicePose_t standingTrackedDevicePose;
public ulong ulFrameExposureTime;
}
-[StructLayout(LayoutKind.Sequential)] public struct DriverDirectMode_FrameTiming
-{
- public uint m_nSize;
- public uint m_nNumFramePresents;
- public uint m_nNumMisPresented;
- public uint m_nNumDroppedFrames;
- public uint m_nReprojectionFlags;
-}
-[StructLayout(LayoutKind.Sequential)] public struct ImuSample_t
-{
- public double fSampleTime;
- public HmdVector3d_t vAccel;
- public HmdVector3d_t vGyro;
- public uint unOffScaleFlags;
-}
-[StructLayout(LayoutKind.Sequential)] public struct AppOverrideKeys_t
-{
- public IntPtr pchKey; // const char *
- public IntPtr pchValue; // const char *
-}
[StructLayout(LayoutKind.Sequential)] public struct Compositor_FrameTiming
{
public uint m_nSize;
@@ -5562,6 +5568,26 @@ public enum EVRDebugError
public uint m_nNumVSyncsReadyForUse;
public uint m_nNumVSyncsToFirstView;
}
+[StructLayout(LayoutKind.Sequential)] public struct DriverDirectMode_FrameTiming
+{
+ public uint m_nSize;
+ public uint m_nNumFramePresents;
+ public uint m_nNumMisPresented;
+ public uint m_nNumDroppedFrames;
+ public uint m_nReprojectionFlags;
+}
+[StructLayout(LayoutKind.Sequential)] public struct ImuSample_t
+{
+ public double fSampleTime;
+ public HmdVector3d_t vAccel;
+ public HmdVector3d_t vGyro;
+ public uint unOffScaleFlags;
+}
+[StructLayout(LayoutKind.Sequential)] public struct AppOverrideKeys_t
+{
+ public IntPtr pchKey; // const char *
+ public IntPtr pchValue; // const char *
+}
[StructLayout(LayoutKind.Sequential)] public struct Compositor_CumulativeStats
{
public uint m_nPid;
@@ -6613,7 +6639,7 @@ public class OpenVR
public const string k_pch_SteamVR_ActivateMultipleDrivers_Bool = "activateMultipleDrivers";
public const string k_pch_SteamVR_UsingSpeakers_Bool = "usingSpeakers";
public const string k_pch_SteamVR_SpeakersForwardYawOffsetDegrees_Float = "speakersForwardYawOffsetDegrees";
- public const string k_pch_SteamVR_BaseStationPowerManagement_Bool = "basestationPowerManagement";
+ public const string k_pch_SteamVR_BaseStationPowerManagement_Int32 = "basestationPowerManagement";
public const string k_pch_SteamVR_NeverKillProcesses_Bool = "neverKillProcesses";
public const string k_pch_SteamVR_SupersampleScale_Float = "supersampleScale";
public const string k_pch_SteamVR_MaxRecommendedResolution_Int32 = "maxRecommendedResolution";
@@ -6641,13 +6667,15 @@ public class OpenVR
public const string k_pch_SteamVR_DebugInput = "debugInput";
public const string k_pch_SteamVR_DebugInputBinding = "debugInputBinding";
public const string k_pch_SteamVR_DoNotFadeToGrid = "doNotFadeToGrid";
- public const string k_pch_SteamVR_InputBindingUIBlock = "inputBindingUI";
public const string k_pch_SteamVR_RenderCameraMode = "renderCameraMode";
public const string k_pch_SteamVR_EnableSharedResourceJournaling = "enableSharedResourceJournaling";
public const string k_pch_SteamVR_EnableSafeMode = "enableSafeMode";
public const string k_pch_SteamVR_PreferredRefreshRate = "preferredRefreshRate";
public const string k_pch_SteamVR_LastVersionNotice = "lastVersionNotice";
public const string k_pch_SteamVR_LastVersionNoticeDate = "lastVersionNoticeDate";
+ public const string k_pch_SteamVR_HmdDisplayColorGainR_Float = "hmdDisplayColorGainR";
+ public const string k_pch_SteamVR_HmdDisplayColorGainG_Float = "hmdDisplayColorGainG";
+ public const string k_pch_SteamVR_HmdDisplayColorGainB_Float = "hmdDisplayColorGainB";
public const string k_pch_DirectMode_Section = "direct_mode";
public const string k_pch_DirectMode_Enable_Bool = "enable";
public const string k_pch_DirectMode_Count_Int32 = "count";
@@ -6760,6 +6788,10 @@ public class OpenVR
public const string k_pch_LastKnown_HMDManufacturer_String = "HMDManufacturer";
public const string k_pch_LastKnown_HMDModel_String = "HMDModel";
public const string k_pch_DismissedWarnings_Section = "DismissedWarnings";
+ public const string k_pch_Input_Section = "input";
+ public const string k_pch_Input_LeftThumbstickRotation_Float = "leftThumbstickRotation";
+ public const string k_pch_Input_RightThumbstickRotation_Float = "rightThumbstickRotation";
+ public const string k_pch_Input_ThumbstickDeadzone_Float = "thumbstickDeadzone";
public const string IVRScreenshots_Version = "IVRScreenshots_001";
public const string IVRResources_Version = "IVRResources_001";
public const string IVRDriverManager_Version = "IVRDriverManager_001";
diff --git a/headers/openvr_api.json b/headers/openvr_api.json
index 55f2fa3..89510f0 100644
--- a/headers/openvr_api.json
+++ b/headers/openvr_api.json
@@ -222,6 +222,8 @@
,{"name": "Prop_DriverProvidedChaperoneVisibility_Bool","value": "2076"}
,{"name": "Prop_DisplayAvailableFrameRates_Float_Array","value": "2080"}
,{"name": "Prop_DisplaySupportsMultipleFramerates_Bool","value": "2081"}
+ ,{"name": "Prop_DisplayColorMultLeft_Vector3","value": "2082"}
+ ,{"name": "Prop_DisplayColorMultRight_Vector3","value": "2083"}
,{"name": "Prop_DashboardLayoutPathName_String","value": "2090"}
,{"name": "Prop_DriverRequestedMuraCorrectionMode_Int32","value": "2200"}
,{"name": "Prop_DriverRequestedMuraFeather_InnerLeft_Int32","value": "2201"}
@@ -707,6 +709,7 @@
,{"name": "VRInitError_Init_TrackerManagerInitFailed","value": "142"}
,{"name": "VRInitError_Init_AlreadyRunning","value": "143"}
,{"name": "VRInitError_Init_FailedForVrMonitor","value": "144"}
+ ,{"name": "VRInitError_Init_PropertyManagerInitFailed","value": "145"}
,{"name": "VRInitError_Driver_Failed","value": "200"}
,{"name": "VRInitError_Driver_Unknown","value": "201"}
,{"name": "VRInitError_Driver_HmdUnknown","value": "202"}
@@ -729,6 +732,8 @@
,{"name": "VRInitError_IPC_CompositorConnectFailed","value": "306"}
,{"name": "VRInitError_IPC_CompositorInvalidConnectResponse","value": "307"}
,{"name": "VRInitError_IPC_ConnectFailedAfterMultipleAttempts","value": "308"}
+ ,{"name": "VRInitError_IPC_ConnectFailedAfterTargetExited","value": "309"}
+ ,{"name": "VRInitError_IPC_NamespaceUnavailable","value": "310"}
,{"name": "VRInitError_Compositor_Failed","value": "400"}
,{"name": "VRInitError_Compositor_D3D11HardwareRequired","value": "401"}
,{"name": "VRInitError_Compositor_FirmwareRequiresUpdate","value": "402"}
@@ -1017,6 +1022,7 @@
,{"name": "VROverlayFlags_VisibleInDashboard","value": "15"}
,{"name": "VROverlayFlags_MakeOverlaysInteractiveIfVisible","value": "16"}
,{"name": "VROverlayFlags_SendVRSmoothScrollEvents","value": "17"}
+ ,{"name": "VROverlayFlags_ProtectedContent","value": "18"}
]}
, {"enumname": "vr::VRMessageOverlayResponse","values": [
{"name": "VRMessageOverlayResponse_ButtonPress_0","value": "0"}
@@ -1328,7 +1334,7 @@
,{
"constname": "k_pch_SteamVR_SpeakersForwardYawOffsetDegrees_Float","consttype": "const char *const", "constval": "speakersForwardYawOffsetDegrees"}
,{
- "constname": "k_pch_SteamVR_BaseStationPowerManagement_Bool","consttype": "const char *const", "constval": "basestationPowerManagement"}
+ "constname": "k_pch_SteamVR_BaseStationPowerManagement_Int32","consttype": "const char *const", "constval": "basestationPowerManagement"}
,{
"constname": "k_pch_SteamVR_NeverKillProcesses_Bool","consttype": "const char *const", "constval": "neverKillProcesses"}
,{
@@ -1384,8 +1390,6 @@
,{
"constname": "k_pch_SteamVR_DoNotFadeToGrid","consttype": "const char *const", "constval": "doNotFadeToGrid"}
,{
- "constname": "k_pch_SteamVR_InputBindingUIBlock","consttype": "const char *const", "constval": "inputBindingUI"}
-,{
"constname": "k_pch_SteamVR_RenderCameraMode","consttype": "const char *const", "constval": "renderCameraMode"}
,{
"constname": "k_pch_SteamVR_EnableSharedResourceJournaling","consttype": "const char *const", "constval": "enableSharedResourceJournaling"}
@@ -1398,6 +1402,12 @@
,{
"constname": "k_pch_SteamVR_LastVersionNoticeDate","consttype": "const char *const", "constval": "lastVersionNoticeDate"}
,{
+ "constname": "k_pch_SteamVR_HmdDisplayColorGainR_Float","consttype": "const char *const", "constval": "hmdDisplayColorGainR"}
+,{
+ "constname": "k_pch_SteamVR_HmdDisplayColorGainG_Float","consttype": "const char *const", "constval": "hmdDisplayColorGainG"}
+,{
+ "constname": "k_pch_SteamVR_HmdDisplayColorGainB_Float","consttype": "const char *const", "constval": "hmdDisplayColorGainB"}
+,{
"constname": "k_pch_DirectMode_Section","consttype": "const char *const", "constval": "direct_mode"}
,{
"constname": "k_pch_DirectMode_Enable_Bool","consttype": "const char *const", "constval": "enable"}
@@ -1622,6 +1632,14 @@
,{
"constname": "k_pch_DismissedWarnings_Section","consttype": "const char *const", "constval": "DismissedWarnings"}
,{
+ "constname": "k_pch_Input_Section","consttype": "const char *const", "constval": "input"}
+,{
+ "constname": "k_pch_Input_LeftThumbstickRotation_Float","consttype": "const char *const", "constval": "leftThumbstickRotation"}
+,{
+ "constname": "k_pch_Input_RightThumbstickRotation_Float","consttype": "const char *const", "constval": "rightThumbstickRotation"}
+,{
+ "constname": "k_pch_Input_ThumbstickDeadzone_Float","consttype": "const char *const", "constval": "thumbstickDeadzone"}
+,{
"constname": "IVRScreenshots_Version","consttype": "const char *const", "constval": "IVRScreenshots_001"}
,{
"constname": "IVRResources_Version","consttype": "const char *const", "constval": "IVRResources_001"}
@@ -1905,20 +1923,6 @@
{ "fieldname": "nFrameSequence", "fieldtype": "uint32_t"},
{ "fieldname": "standingTrackedDevicePose", "fieldtype": "struct vr::TrackedDevicePose_t"},
{ "fieldname": "ulFrameExposureTime", "fieldtype": "uint64_t"}]}
-,{"struct": "vr::DriverDirectMode_FrameTiming","fields": [
-{ "fieldname": "m_nSize", "fieldtype": "uint32_t"},
-{ "fieldname": "m_nNumFramePresents", "fieldtype": "uint32_t"},
-{ "fieldname": "m_nNumMisPresented", "fieldtype": "uint32_t"},
-{ "fieldname": "m_nNumDroppedFrames", "fieldtype": "uint32_t"},
-{ "fieldname": "m_nReprojectionFlags", "fieldtype": "uint32_t"}]}
-,{"struct": "vr::ImuSample_t","fields": [
-{ "fieldname": "fSampleTime", "fieldtype": "double"},
-{ "fieldname": "vAccel", "fieldtype": "struct vr::HmdVector3d_t"},
-{ "fieldname": "vGyro", "fieldtype": "struct vr::HmdVector3d_t"},
-{ "fieldname": "unOffScaleFlags", "fieldtype": "uint32_t"}]}
-,{"struct": "vr::AppOverrideKeys_t","fields": [
-{ "fieldname": "pchKey", "fieldtype": "const char *"},
-{ "fieldname": "pchValue", "fieldtype": "const char *"}]}
,{"struct": "vr::Compositor_FrameTiming","fields": [
{ "fieldname": "m_nSize", "fieldtype": "uint32_t"},
{ "fieldname": "m_nFrameIndex", "fieldtype": "uint32_t"},
@@ -1946,6 +1950,20 @@
{ "fieldname": "m_HmdPose", "fieldtype": "vr::TrackedDevicePose_t"},
{ "fieldname": "m_nNumVSyncsReadyForUse", "fieldtype": "uint32_t"},
{ "fieldname": "m_nNumVSyncsToFirstView", "fieldtype": "uint32_t"}]}
+,{"struct": "vr::DriverDirectMode_FrameTiming","fields": [
+{ "fieldname": "m_nSize", "fieldtype": "uint32_t"},
+{ "fieldname": "m_nNumFramePresents", "fieldtype": "uint32_t"},
+{ "fieldname": "m_nNumMisPresented", "fieldtype": "uint32_t"},
+{ "fieldname": "m_nNumDroppedFrames", "fieldtype": "uint32_t"},
+{ "fieldname": "m_nReprojectionFlags", "fieldtype": "uint32_t"}]}
+,{"struct": "vr::ImuSample_t","fields": [
+{ "fieldname": "fSampleTime", "fieldtype": "double"},
+{ "fieldname": "vAccel", "fieldtype": "struct vr::HmdVector3d_t"},
+{ "fieldname": "vGyro", "fieldtype": "struct vr::HmdVector3d_t"},
+{ "fieldname": "unOffScaleFlags", "fieldtype": "uint32_t"}]}
+,{"struct": "vr::AppOverrideKeys_t","fields": [
+{ "fieldname": "pchKey", "fieldtype": "const char *"},
+{ "fieldname": "pchValue", "fieldtype": "const char *"}]}
,{"struct": "vr::Compositor_CumulativeStats","fields": [
{ "fieldname": "m_nPid", "fieldtype": "uint32_t"},
{ "fieldname": "m_nNumFramePresents", "fieldtype": "uint32_t"},
@@ -2465,6 +2483,20 @@
"returntype": "void"
}
,{
+ "classname": "vr::IVRSystem",
+ "methodname": "GetAppContainerFilePaths",
+ "returntype": "uint32_t",
+ "params": [
+{ "paramname": "pchBuffer" ,"out_string": " " ,"paramtype": "char *"},
+{ "paramname": "unBufferSize" ,"paramtype": "uint32_t"}
+ ]
+}
+,{
+ "classname": "vr::IVRSystem",
+ "methodname": "GetRuntimeVersion",
+ "returntype": "const char *"
+}
+,{
"classname": "vr::IVRExtendedDisplay",
"methodname": "GetWindowBounds",
"returntype": "void",
diff --git a/headers/openvr_capi.h b/headers/openvr_capi.h
index 9654148..5295a4e 100644
--- a/headers/openvr_capi.h
+++ b/headers/openvr_capi.h
@@ -149,7 +149,7 @@ static const char * k_pch_SteamVR_ShowStage_Bool = "showStage";
static const char * k_pch_SteamVR_ActivateMultipleDrivers_Bool = "activateMultipleDrivers";
static const char * k_pch_SteamVR_UsingSpeakers_Bool = "usingSpeakers";
static const char * k_pch_SteamVR_SpeakersForwardYawOffsetDegrees_Float = "speakersForwardYawOffsetDegrees";
-static const char * k_pch_SteamVR_BaseStationPowerManagement_Bool = "basestationPowerManagement";
+static const char * k_pch_SteamVR_BaseStationPowerManagement_Int32 = "basestationPowerManagement";
static const char * k_pch_SteamVR_NeverKillProcesses_Bool = "neverKillProcesses";
static const char * k_pch_SteamVR_SupersampleScale_Float = "supersampleScale";
static const char * k_pch_SteamVR_MaxRecommendedResolution_Int32 = "maxRecommendedResolution";
@@ -177,13 +177,15 @@ static const char * k_pch_SteamVR_ForceWindows32bitVRMonitor = "forceWindows32Bi
static const char * k_pch_SteamVR_DebugInput = "debugInput";
static const char * k_pch_SteamVR_DebugInputBinding = "debugInputBinding";
static const char * k_pch_SteamVR_DoNotFadeToGrid = "doNotFadeToGrid";
-static const char * k_pch_SteamVR_InputBindingUIBlock = "inputBindingUI";
static const char * k_pch_SteamVR_RenderCameraMode = "renderCameraMode";
static const char * k_pch_SteamVR_EnableSharedResourceJournaling = "enableSharedResourceJournaling";
static const char * k_pch_SteamVR_EnableSafeMode = "enableSafeMode";
static const char * k_pch_SteamVR_PreferredRefreshRate = "preferredRefreshRate";
static const char * k_pch_SteamVR_LastVersionNotice = "lastVersionNotice";
static const char * k_pch_SteamVR_LastVersionNoticeDate = "lastVersionNoticeDate";
+static const char * k_pch_SteamVR_HmdDisplayColorGainR_Float = "hmdDisplayColorGainR";
+static const char * k_pch_SteamVR_HmdDisplayColorGainG_Float = "hmdDisplayColorGainG";
+static const char * k_pch_SteamVR_HmdDisplayColorGainB_Float = "hmdDisplayColorGainB";
static const char * k_pch_DirectMode_Section = "direct_mode";
static const char * k_pch_DirectMode_Enable_Bool = "enable";
static const char * k_pch_DirectMode_Count_Int32 = "count";
@@ -296,6 +298,10 @@ static const char * k_pch_LastKnown_Section = "LastKnown";
static const char * k_pch_LastKnown_HMDManufacturer_String = "HMDManufacturer";
static const char * k_pch_LastKnown_HMDModel_String = "HMDModel";
static const char * k_pch_DismissedWarnings_Section = "DismissedWarnings";
+static const char * k_pch_Input_Section = "input";
+static const char * k_pch_Input_LeftThumbstickRotation_Float = "leftThumbstickRotation";
+static const char * k_pch_Input_RightThumbstickRotation_Float = "rightThumbstickRotation";
+static const char * k_pch_Input_ThumbstickDeadzone_Float = "thumbstickDeadzone";
static const char * IVRScreenshots_Version = "IVRScreenshots_001";
static const char * IVRResources_Version = "IVRResources_001";
static const char * IVRDriverManager_Version = "IVRDriverManager_001";
@@ -510,6 +516,8 @@ typedef enum ETrackedDeviceProperty
ETrackedDeviceProperty_Prop_DriverProvidedChaperoneVisibility_Bool = 2076,
ETrackedDeviceProperty_Prop_DisplayAvailableFrameRates_Float_Array = 2080,
ETrackedDeviceProperty_Prop_DisplaySupportsMultipleFramerates_Bool = 2081,
+ ETrackedDeviceProperty_Prop_DisplayColorMultLeft_Vector3 = 2082,
+ ETrackedDeviceProperty_Prop_DisplayColorMultRight_Vector3 = 2083,
ETrackedDeviceProperty_Prop_DashboardLayoutPathName_String = 2090,
ETrackedDeviceProperty_Prop_DriverRequestedMuraCorrectionMode_Int32 = 2200,
ETrackedDeviceProperty_Prop_DriverRequestedMuraFeather_InnerLeft_Int32 = 2201,
@@ -1043,6 +1051,7 @@ typedef enum EVRInitError
EVRInitError_VRInitError_Init_TrackerManagerInitFailed = 142,
EVRInitError_VRInitError_Init_AlreadyRunning = 143,
EVRInitError_VRInitError_Init_FailedForVrMonitor = 144,
+ EVRInitError_VRInitError_Init_PropertyManagerInitFailed = 145,
EVRInitError_VRInitError_Driver_Failed = 200,
EVRInitError_VRInitError_Driver_Unknown = 201,
EVRInitError_VRInitError_Driver_HmdUnknown = 202,
@@ -1065,6 +1074,8 @@ typedef enum EVRInitError
EVRInitError_VRInitError_IPC_CompositorConnectFailed = 306,
EVRInitError_VRInitError_IPC_CompositorInvalidConnectResponse = 307,
EVRInitError_VRInitError_IPC_ConnectFailedAfterMultipleAttempts = 308,
+ EVRInitError_VRInitError_IPC_ConnectFailedAfterTargetExited = 309,
+ EVRInitError_VRInitError_IPC_NamespaceUnavailable = 310,
EVRInitError_VRInitError_Compositor_Failed = 400,
EVRInitError_VRInitError_Compositor_D3D11HardwareRequired = 401,
EVRInitError_VRInitError_Compositor_FirmwareRequiresUpdate = 402,
@@ -1393,6 +1404,7 @@ typedef enum VROverlayFlags
VROverlayFlags_VisibleInDashboard = 15,
VROverlayFlags_MakeOverlaysInteractiveIfVisible = 16,
VROverlayFlags_SendVRSmoothScrollEvents = 17,
+ VROverlayFlags_ProtectedContent = 18,
} VROverlayFlags;
typedef enum VRMessageOverlayResponse
@@ -2016,29 +2028,6 @@ typedef struct CameraVideoStreamFrameHeader_t
uint64_t ulFrameExposureTime;
} CameraVideoStreamFrameHeader_t;
-typedef struct DriverDirectMode_FrameTiming
-{
- uint32_t m_nSize;
- uint32_t m_nNumFramePresents;
- uint32_t m_nNumMisPresented;
- uint32_t m_nNumDroppedFrames;
- uint32_t m_nReprojectionFlags;
-} DriverDirectMode_FrameTiming;
-
-typedef struct ImuSample_t
-{
- double fSampleTime;
- struct HmdVector3d_t vAccel;
- struct HmdVector3d_t vGyro;
- uint32_t unOffScaleFlags;
-} ImuSample_t;
-
-typedef struct AppOverrideKeys_t
-{
- char * pchKey; // const char *
- char * pchValue; // const char *
-} AppOverrideKeys_t;
-
typedef struct Compositor_FrameTiming
{
uint32_t m_nSize;
@@ -2069,6 +2058,29 @@ typedef struct Compositor_FrameTiming
uint32_t m_nNumVSyncsToFirstView;
} Compositor_FrameTiming;
+typedef struct DriverDirectMode_FrameTiming
+{
+ uint32_t m_nSize;
+ uint32_t m_nNumFramePresents;
+ uint32_t m_nNumMisPresented;
+ uint32_t m_nNumDroppedFrames;
+ uint32_t m_nReprojectionFlags;
+} DriverDirectMode_FrameTiming;
+
+typedef struct ImuSample_t
+{
+ double fSampleTime;
+ struct HmdVector3d_t vAccel;
+ struct HmdVector3d_t vGyro;
+ uint32_t unOffScaleFlags;
+} ImuSample_t;
+
+typedef struct AppOverrideKeys_t
+{
+ char * pchKey; // const char *
+ char * pchValue; // const char *
+} AppOverrideKeys_t;
+
typedef struct Compositor_CumulativeStats
{
uint32_t m_nPid;
@@ -2385,6 +2397,8 @@ struct VR_IVRSystem_FnTable
EVRFirmwareError (OPENVR_FNTABLE_CALLTYPE *PerformFirmwareUpdate)(TrackedDeviceIndex_t unDeviceIndex);
void (OPENVR_FNTABLE_CALLTYPE *AcknowledgeQuit_Exiting)();
void (OPENVR_FNTABLE_CALLTYPE *AcknowledgeQuit_UserPrompt)();
+ uint32_t (OPENVR_FNTABLE_CALLTYPE *GetAppContainerFilePaths)(char * pchBuffer, uint32_t unBufferSize);
+ char * (OPENVR_FNTABLE_CALLTYPE *GetRuntimeVersion)();
};
struct VR_IVRExtendedDisplay_FnTable
diff --git a/headers/openvr_driver.h b/headers/openvr_driver.h
index 26a76fd..54d26d8 100644
--- a/headers/openvr_driver.h
+++ b/headers/openvr_driver.h
@@ -15,8 +15,8 @@
namespace vr
{
static const uint32_t k_nSteamVRVersionMajor = 1;
- static const uint32_t k_nSteamVRVersionMinor = 5;
- static const uint32_t k_nSteamVRVersionBuild = 17;
+ static const uint32_t k_nSteamVRVersionMinor = 6;
+ static const uint32_t k_nSteamVRVersionBuild = 10;
} // namespace vr
// vrtypes.h
@@ -436,6 +436,8 @@ enum ETrackedDeviceProperty
Prop_DisplayAvailableFrameRates_Float_Array = 2080, // populated by compositor from actual EDID list when available from GPU driver
Prop_DisplaySupportsMultipleFramerates_Bool = 2081, // if this is true but Prop_DisplayAvailableFrameRates_Float_Array is empty, explain to user
+ Prop_DisplayColorMultLeft_Vector3 = 2082,
+ Prop_DisplayColorMultRight_Vector3 = 2083,
Prop_DashboardLayoutPathName_String = 2090,
@@ -1528,6 +1530,7 @@ enum EVRInitError
VRInitError_Init_TrackerManagerInitFailed = 142,
VRInitError_Init_AlreadyRunning = 143,
VRInitError_Init_FailedForVrMonitor = 144,
+ VRInitError_Init_PropertyManagerInitFailed = 145,
VRInitError_Driver_Failed = 200,
VRInitError_Driver_Unknown = 201,
@@ -1553,6 +1556,8 @@ enum EVRInitError
VRInitError_IPC_CompositorConnectFailed = 306,
VRInitError_IPC_CompositorInvalidConnectResponse = 307,
VRInitError_IPC_ConnectFailedAfterMultipleAttempts = 308,
+ VRInitError_IPC_ConnectFailedAfterTargetExited = 309,
+ VRInitError_IPC_NamespaceUnavailable = 310,
VRInitError_Compositor_Failed = 400,
VRInitError_Compositor_D3D11HardwareRequired = 401,
@@ -1752,6 +1757,75 @@ typedef uint32_t ScreenshotHandle_t;
static const uint32_t k_unScreenshotHandleInvalid = 0;
+/** Compositor frame timing reprojection flags. */
+const uint32_t VRCompositor_ReprojectionReason_Cpu = 0x01;
+const uint32_t VRCompositor_ReprojectionReason_Gpu = 0x02;
+const uint32_t VRCompositor_ReprojectionAsync = 0x04; // This flag indicates the async reprojection mode is active,
+ // but does not indicate if reprojection actually happened or not.
+ // Use the ReprojectionReason flags above to check if reprojection
+ // was actually applied (i.e. scene texture was reused).
+ // NumFramePresents > 1 also indicates the scene texture was reused,
+ // and also the number of times that it was presented in total.
+
+const uint32_t VRCompositor_ReprojectionMotion = 0x08; // This flag indicates whether or not motion smoothing was triggered for this frame
+
+const uint32_t VRCompositor_PredictionMask = 0x30; // The runtime may predict more than one frame (up to four) ahead if
+ // it detects the application is taking too long to render. These two
+ // bits will contain the count of additional frames (normally zero).
+ // Use the VR_COMPOSITOR_ADDITIONAL_PREDICTED_FRAMES macro to read from
+ // the latest frame timing entry.
+
+const uint32_t VRCompositor_ThrottleMask = 0xC0; // Number of frames the compositor is throttling the application.
+ // Use the VR_COMPOSITOR_NUMBER_OF_THROTTLED_FRAMES macro to read from
+ // the latest frame timing entry.
+
+#define VR_COMPOSITOR_ADDITIONAL_PREDICTED_FRAMES( timing ) ( ( ( timing ).m_nReprojectionFlags & vr::VRCompositor_PredictionMask ) >> 4 )
+#define VR_COMPOSITOR_NUMBER_OF_THROTTLED_FRAMES( timing ) ( ( ( timing ).m_nReprojectionFlags & vr::VRCompositor_ThrottleMask ) >> 6 )
+
+/** Provides a single frame's timing information to the app */
+struct Compositor_FrameTiming
+{
+ uint32_t m_nSize; // Set to sizeof( Compositor_FrameTiming )
+ uint32_t m_nFrameIndex;
+ uint32_t m_nNumFramePresents; // number of times this frame was presented
+ uint32_t m_nNumMisPresented; // number of times this frame was presented on a vsync other than it was originally predicted to
+ uint32_t m_nNumDroppedFrames; // number of additional times previous frame was scanned out
+ uint32_t m_nReprojectionFlags;
+
+ /** Absolute time reference for comparing frames. This aligns with the vsync that running start is relative to. */
+ double m_flSystemTimeInSeconds;
+
+ /** These times may include work from other processes due to OS scheduling.
+ * The fewer packets of work these are broken up into, the less likely this will happen.
+ * GPU work can be broken up by calling Flush. This can sometimes be useful to get the GPU started
+ * processing that work earlier in the frame. */
+ float m_flPreSubmitGpuMs; // time spent rendering the scene (gpu work submitted between WaitGetPoses and second Submit)
+ float m_flPostSubmitGpuMs; // additional time spent rendering by application (e.g. companion window)
+ float m_flTotalRenderGpuMs; // time between work submitted immediately after present (ideally vsync) until the end of compositor submitted work
+ float m_flCompositorRenderGpuMs; // time spend performing distortion correction, rendering chaperone, overlays, etc.
+ float m_flCompositorRenderCpuMs; // time spent on cpu submitting the above work for this frame
+ float m_flCompositorIdleCpuMs; // time spent waiting for running start (application could have used this much more time)
+
+ /** Miscellaneous measured intervals. */
+ float m_flClientFrameIntervalMs; // time between calls to WaitGetPoses
+ float m_flPresentCallCpuMs; // time blocked on call to present (usually 0.0, but can go long)
+ float m_flWaitForPresentCpuMs; // time spent spin-waiting for frame index to change (not near-zero indicates wait object failure)
+ float m_flSubmitFrameMs; // time spent in IVRCompositor::Submit (not near-zero indicates driver issue)
+
+ /** The following are all relative to this frame's SystemTimeInSeconds */
+ float m_flWaitGetPosesCalledMs;
+ float m_flNewPosesReadyMs;
+ float m_flNewFrameReadyMs; // second call to IVRCompositor::Submit
+ float m_flCompositorUpdateStartMs;
+ float m_flCompositorUpdateEndMs;
+ float m_flCompositorRenderStartMs;
+
+ vr::TrackedDevicePose_t m_HmdPose; // pose used by app to render this frame
+
+ uint32_t m_nNumVSyncsReadyForUse;
+ uint32_t m_nNumVSyncsToFirstView;
+};
+
/** Frame timing data provided by direct mode drivers. */
struct DriverDirectMode_FrameTiming
{
@@ -2106,7 +2180,7 @@ namespace vr
static const char * const k_pch_SteamVR_ActivateMultipleDrivers_Bool = "activateMultipleDrivers";
static const char * const k_pch_SteamVR_UsingSpeakers_Bool = "usingSpeakers";
static const char * const k_pch_SteamVR_SpeakersForwardYawOffsetDegrees_Float = "speakersForwardYawOffsetDegrees";
- static const char * const k_pch_SteamVR_BaseStationPowerManagement_Bool = "basestationPowerManagement";
+ static const char * const k_pch_SteamVR_BaseStationPowerManagement_Int32 = "basestationPowerManagement";
static const char * const k_pch_SteamVR_NeverKillProcesses_Bool = "neverKillProcesses";
static const char * const k_pch_SteamVR_SupersampleScale_Float = "supersampleScale";
static const char * const k_pch_SteamVR_MaxRecommendedResolution_Int32 = "maxRecommendedResolution";
@@ -2134,13 +2208,15 @@ namespace vr
static const char * const k_pch_SteamVR_DebugInput = "debugInput";
static const char * const k_pch_SteamVR_DebugInputBinding = "debugInputBinding";
static const char * const k_pch_SteamVR_DoNotFadeToGrid = "doNotFadeToGrid";
- static const char * const k_pch_SteamVR_InputBindingUIBlock = "inputBindingUI";
static const char * const k_pch_SteamVR_RenderCameraMode = "renderCameraMode";
static const char * const k_pch_SteamVR_EnableSharedResourceJournaling = "enableSharedResourceJournaling";
static const char * const k_pch_SteamVR_EnableSafeMode = "enableSafeMode";
static const char * const k_pch_SteamVR_PreferredRefreshRate = "preferredRefreshRate";
static const char * const k_pch_SteamVR_LastVersionNotice = "lastVersionNotice";
static const char * const k_pch_SteamVR_LastVersionNoticeDate = "lastVersionNoticeDate";
+ static const char * const k_pch_SteamVR_HmdDisplayColorGainR_Float = "hmdDisplayColorGainR";
+ static const char * const k_pch_SteamVR_HmdDisplayColorGainG_Float = "hmdDisplayColorGainG";
+ static const char * const k_pch_SteamVR_HmdDisplayColorGainB_Float = "hmdDisplayColorGainB";
//-----------------------------------------------------------------------------
// direct mode keys
@@ -2321,6 +2397,14 @@ namespace vr
// Dismissed warnings
static const char * const k_pch_DismissedWarnings_Section = "DismissedWarnings";
+ //-----------------------------------------------------------------------------
+ // Input Settings
+ static const char * const k_pch_Input_Section = "input";
+ static const char* const k_pch_Input_LeftThumbstickRotation_Float = "leftThumbstickRotation";
+ static const char* const k_pch_Input_RightThumbstickRotation_Float = "rightThumbstickRotation";
+ static const char* const k_pch_Input_ThumbstickDeadzone_Float = "thumbstickDeadzone";
+
+
} // namespace vr
// iservertrackeddevicedriver.h
@@ -2775,6 +2859,9 @@ public:
float GetFloatProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError = 0L );
int32_t GetInt32Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError = 0L );
uint64_t GetUint64Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError = 0L );
+ HmdVector2_t GetVec2Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError = 0L );
+ HmdVector3_t GetVec3Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError = 0L );
+ HmdVector4_t GetVec4Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError = 0L );
/** Returns a single typed property. If the device index is not valid or the property is not a string type this function will
* return 0. Otherwise it returns the length of the number of bytes necessary to hold this string including the trailing
@@ -2800,6 +2887,9 @@ public:
ETrackedPropertyError SetFloatProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, float fNewValue );
ETrackedPropertyError SetInt32Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, int32_t nNewValue );
ETrackedPropertyError SetUint64Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, uint64_t ulNewValue );
+ ETrackedPropertyError SetVec2Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, const HmdVector2_t & vNewValue );
+ ETrackedPropertyError SetVec3Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, const HmdVector3_t & vNewValue );
+ ETrackedPropertyError SetVec4Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, const HmdVector4_t & vNewValue );
/** Sets a string property. The new value will be returned on any subsequent call to get this property in any process. */
ETrackedPropertyError SetStringProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, const char *pchNewValue );
@@ -2977,7 +3067,6 @@ inline bool CVRPropertyHelpers::GetBoolProperty( PropertyContainerHandle_t ulCon
return GetPropertyHelper<bool>( ulContainerHandle, prop, pError, false, k_unBoolPropertyTag );
}
-
inline float CVRPropertyHelpers::GetFloatProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError )
{
return GetPropertyHelper<float>( ulContainerHandle, prop, pError, 0.f, k_unFloatPropertyTag );
@@ -2993,6 +3082,24 @@ inline uint64_t CVRPropertyHelpers::GetUint64Property( PropertyContainerHandle_t
return GetPropertyHelper<uint64_t>( ulContainerHandle, prop, pError, 0, k_unUint64PropertyTag );
}
+inline HmdVector2_t CVRPropertyHelpers::GetVec2Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError )
+{
+ HmdVector2_t defaultval = { 0 };
+ return GetPropertyHelper<HmdVector2_t>( ulContainerHandle, prop, pError, defaultval, k_unHmdVector2PropertyTag );
+}
+
+inline HmdVector3_t CVRPropertyHelpers::GetVec3Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError )
+{
+ HmdVector3_t defaultval = { 0 };
+ return GetPropertyHelper<HmdVector3_t>( ulContainerHandle, prop, pError, defaultval, k_unHmdVector3PropertyTag );
+}
+
+inline HmdVector4_t CVRPropertyHelpers::GetVec4Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError )
+{
+ HmdVector4_t defaultval = { 0 };
+ return GetPropertyHelper<HmdVector4_t>( ulContainerHandle, prop, pError, defaultval, k_unHmdVector4PropertyTag );
+}
+
inline ETrackedPropertyError CVRPropertyHelpers::SetBoolProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, bool bNewValue )
{
return SetProperty( ulContainerHandle, prop, &bNewValue, sizeof( bNewValue ), k_unBoolPropertyTag );
@@ -3013,6 +3120,21 @@ inline ETrackedPropertyError CVRPropertyHelpers::SetUint64Property( PropertyCont
return SetProperty( ulContainerHandle, prop, &ulNewValue, sizeof( ulNewValue ), k_unUint64PropertyTag );
}
+inline ETrackedPropertyError CVRPropertyHelpers::SetVec2Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, const HmdVector2_t & vNewValue )
+{
+ return SetProperty( ulContainerHandle, prop, ( void * ) &vNewValue, sizeof( HmdVector2_t ), k_unHmdVector2PropertyTag );
+}
+
+inline ETrackedPropertyError CVRPropertyHelpers::SetVec3Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, const HmdVector3_t & vNewValue )
+{
+ return SetProperty( ulContainerHandle, prop, ( void * ) &vNewValue, sizeof( HmdVector3_t ), k_unHmdVector3PropertyTag );
+}
+
+inline ETrackedPropertyError CVRPropertyHelpers::SetVec4Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, const HmdVector4_t & vNewValue )
+{
+ return SetProperty( ulContainerHandle, prop, ( void * ) &vNewValue, sizeof( HmdVector4_t ), k_unHmdVector4PropertyTag );
+}
+
/** Sets the error return value for a property. This value will be returned on all subsequent requests to get the property */
inline ETrackedPropertyError CVRPropertyHelpers::SetPropertyError( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError eError )
{
@@ -3213,6 +3335,10 @@ public:
/** Requests that SteamVR be restarted. The provided reason will be displayed to the user and should be in the current locale. */
virtual void RequestRestart( const char *pchLocalizedReason, const char *pchExecutableToStart, const char *pchArguments, const char *pchWorkingDirectory ) = 0;
+
+ /** Interface for copying a range of timing data. Frames are returned in ascending order (oldest to newest) with the last being the most recent frame.
+ * Only the first entry's m_nSize needs to be set, as the rest will be inferred from that. Returns total number of entries filled out. */
+ virtual uint32_t GetFrameTimings( Compositor_FrameTiming *pTiming, uint32_t nFrames ) = 0;
};
static const char *IVRServerDriverHost_Version = "IVRServerDriverHost_005";
@@ -3300,10 +3426,10 @@ class IVRWatchdogHost
public:
/** Client drivers in watchdog mode should call this when they have received a signal from hardware that should
* cause SteamVR to start */
- virtual void WatchdogWakeUp() = 0;
+ virtual void WatchdogWakeUp( vr::ETrackedDeviceClass eDeviceClass ) = 0;
};
-static const char *IVRWatchdogHost_Version = "IVRWatchdogHost_001";
+static const char *IVRWatchdogHost_Version = "IVRWatchdogHost_002";
};
diff --git a/lib/linux32/libopenvr_api.so b/lib/linux32/libopenvr_api.so
index d728f4c..e4b3dcd 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 2352031..e8d57d3 100755
--- a/lib/linux64/libopenvr_api.so
+++ b/lib/linux64/libopenvr_api.so
Binary files differ
diff --git a/samples/bin/linux32/libopenvr_api.so b/samples/bin/linux32/libopenvr_api.so
new file mode 100644
index 0000000..c95dc19
--- /dev/null
+++ b/samples/bin/linux32/libopenvr_api.so
Binary files differ
diff --git a/samples/bin/linux64/libopenvr_api.so b/samples/bin/linux64/libopenvr_api.so
index 8d894cf..2575362 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 aa0ac95..059ac11 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 9d8ce6e..4b06e42 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 86f697b..114a983 100644
--- a/samples/bin/win64/openvr_api.dll
+++ b/samples/bin/win64/openvr_api.dll
Binary files differ
diff --git a/src/vrcommon/envvartools_public.cpp b/src/vrcommon/envvartools_public.cpp
index f958495..4fb4817 100644
--- a/src/vrcommon/envvartools_public.cpp
+++ b/src/vrcommon/envvartools_public.cpp
@@ -1,6 +1,9 @@
//========= Copyright Valve Corporation ============//
#include "envvartools_public.h"
+#include "strtools_public.h"
#include <stdlib.h>
+#include <string>
+#include <cctype>
#if defined(_WIN32)
#include <windows.h>
@@ -30,6 +33,45 @@ std::string GetEnvironmentVariable( const char *pchVarName )
#endif
}
+bool GetEnvironmentVariableAsBool( const char *pchVarName, bool bDefault )
+{
+ std::string sValue = GetEnvironmentVariable( pchVarName );
+
+ if ( sValue.empty() )
+ {
+ return bDefault;
+ }
+
+ sValue = StringToLower( sValue );
+ std::string sYesValues[] = { "y", "yes", "true" };
+ std::string sNoValues[] = { "n", "no", "false" };
+
+ for ( std::string &sMatch : sYesValues )
+ {
+ if ( sMatch == sValue )
+ {
+ return true;
+ }
+ }
+
+ for ( std::string &sMatch : sNoValues )
+ {
+ if ( sMatch == sValue )
+ {
+ return false;
+ }
+ }
+
+ if ( std::isdigit( sValue.at(0) ) )
+ {
+ return atoi( sValue.c_str() ) != 0;
+ }
+
+ fprintf( stderr,
+ "GetEnvironmentVariableAsBool(%s): Unable to parse value '%s', using default %d\n",
+ pchVarName, sValue.c_str(), bDefault );
+ return bDefault;
+}
bool SetEnvironmentVariable( const char *pchVarName, const char *pchVarValue )
{
diff --git a/src/vrcommon/envvartools_public.h b/src/vrcommon/envvartools_public.h
index 7de981a..7cd4c20 100644
--- a/src/vrcommon/envvartools_public.h
+++ b/src/vrcommon/envvartools_public.h
@@ -4,4 +4,5 @@
#include <string>
std::string GetEnvironmentVariable( const char *pchVarName );
+bool GetEnvironmentVariableAsBool( const char *pchVarName, bool bDefault );
bool SetEnvironmentVariable( const char *pchVarName, const char *pchVarValue );
diff --git a/src/vrcommon/hmderrors_public.cpp b/src/vrcommon/hmderrors_public.cpp
index dcc9857..6e314f1 100644
--- a/src/vrcommon/hmderrors_public.cpp
+++ b/src/vrcommon/hmderrors_public.cpp
@@ -81,6 +81,8 @@ const char *GetEnglishStringForHmdError( vr::EVRInitError eError )
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_IPC_ConnectFailedAfterTargetExited: return "Shared IPC Connect Failed After Target Exited (309)";
+ case VRInitError_IPC_NamespaceUnavailable: return "Shared IPC Namespace Unavailable (310)";
case VRInitError_Compositor_Failed: return "Compositor failed to initialize (400)";
case VRInitError_Compositor_D3D11HardwareRequired: return "Compositor failed to find DX11 hardware (401)";
@@ -169,6 +171,7 @@ const char *GetIDForVRInitError( vr::EVRInitError eError )
RETURN_ENUM_AS_STRING( VRInitError_Init_TrackerManagerInitFailed );
RETURN_ENUM_AS_STRING( VRInitError_Init_AlreadyRunning );
RETURN_ENUM_AS_STRING( VRInitError_Init_FailedForVrMonitor);
+ RETURN_ENUM_AS_STRING( VRInitError_Init_PropertyManagerInitFailed );
RETURN_ENUM_AS_STRING( VRInitError_Driver_Failed );
RETURN_ENUM_AS_STRING( VRInitError_Driver_Unknown );
@@ -193,7 +196,9 @@ const char *GetIDForVRInitError( vr::EVRInitError eError )
RETURN_ENUM_AS_STRING( VRInitError_IPC_Failed);
RETURN_ENUM_AS_STRING( VRInitError_IPC_CompositorConnectFailed);
RETURN_ENUM_AS_STRING( VRInitError_IPC_CompositorInvalidConnectResponse);
- RETURN_ENUM_AS_STRING( VRInitError_IPC_ConnectFailedAfterMultipleAttempts);
+ RETURN_ENUM_AS_STRING( VRInitError_IPC_ConnectFailedAfterMultipleAttempts );
+ RETURN_ENUM_AS_STRING( VRInitError_IPC_ConnectFailedAfterTargetExited );
+ RETURN_ENUM_AS_STRING( VRInitError_IPC_NamespaceUnavailable );
RETURN_ENUM_AS_STRING( VRInitError_Compositor_Failed );
RETURN_ENUM_AS_STRING( VRInitError_Compositor_D3D11HardwareRequired );
diff --git a/src/vrcommon/pathtools_public.cpp b/src/vrcommon/pathtools_public.cpp
index 0f8573e..26bc1be 100644
--- a/src/vrcommon/pathtools_public.cpp
+++ b/src/vrcommon/pathtools_public.cpp
@@ -16,7 +16,9 @@
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
+#include <alloca.h>
#endif
+
#if defined OSX
#include <Foundation/Foundation.h>
#include <AppKit/AppKit.h>
@@ -814,7 +816,12 @@ std::string Path_FilePathToUrl( const std::string & sRelativePath, const std::st
if ( sAbsolute.empty() )
return sAbsolute;
sAbsolute = Path_FixSlashes( sAbsolute, '/' );
- return std::string( FILE_URL_PREFIX ) + sAbsolute;
+
+ size_t unBufferSize = sAbsolute.length() * 3;
+ char *pchBuffer = (char *)alloca( unBufferSize );
+ V_URLEncodeNoPlusForSpace( pchBuffer, (int)unBufferSize, sAbsolute.c_str(), (int)sAbsolute.length() );
+
+ return std::string( FILE_URL_PREFIX ) + pchBuffer;
}
}
@@ -825,9 +832,11 @@ std::string Path_UrlToFilePath( const std::string & sFileUrl )
{
if ( !strnicmp( sFileUrl.c_str(), FILE_URL_PREFIX, strlen( FILE_URL_PREFIX ) ) )
{
- std::string sRet = sFileUrl.c_str() + strlen( FILE_URL_PREFIX );
- sRet = Path_FixSlashes( sRet );
- return sRet;
+ char *pchBuffer = (char *)alloca( sFileUrl.length() );
+ V_URLDecodeNoPlusForSpace( pchBuffer, (int)sFileUrl.length(),
+ sFileUrl.c_str() + strlen( FILE_URL_PREFIX ), (int)( sFileUrl.length() - strlen( FILE_URL_PREFIX ) ) );
+
+ return Path_FixSlashes( pchBuffer );
}
else
{
diff --git a/src/vrcommon/strtools_public.cpp b/src/vrcommon/strtools_public.cpp
index 46b9c5a..61cf324 100644
--- a/src/vrcommon/strtools_public.cpp
+++ b/src/vrcommon/strtools_public.cpp
@@ -401,6 +401,12 @@ void V_URLEncode( char *pchDest, int nDestLen, const char *pchSource, int nSourc
}
+void V_URLEncodeNoPlusForSpace( char *pchDest, int nDestLen, const char *pchSource, int nSourceLen )
+{
+ return V_URLEncodeInternal( pchDest, nDestLen, pchSource, nSourceLen, false );
+}
+
+
//-----------------------------------------------------------------------------
// Purpose: Decodes a string (or binary data) from URL encoding format, see rfc1738 section 2.2.
// This version of the call isn't a strict RFC implementation, but uses + for space as is
@@ -414,6 +420,11 @@ size_t V_URLDecode( char *pchDecodeDest, int nDecodeDestLen, const char *pchEnco
return V_URLDecodeInternal( pchDecodeDest, nDecodeDestLen, pchEncodedSource, nEncodedSourceLen, true );
}
+size_t V_URLDecodeNoPlusForSpace( char *pchDecodeDest, int nDecodeDestLen, const char *pchEncodedSource, int nEncodedSourceLen )
+{
+ return V_URLDecodeInternal( pchDecodeDest, nDecodeDestLen, pchEncodedSource, nEncodedSourceLen, false );
+}
+
//-----------------------------------------------------------------------------
void V_StripExtension( std::string &in )
{
diff --git a/src/vrcommon/strtools_public.h b/src/vrcommon/strtools_public.h
index b817d9f..10c9d99 100644
--- a/src/vrcommon/strtools_public.h
+++ b/src/vrcommon/strtools_public.h
@@ -112,6 +112,9 @@ uint64_t StringToUint64( const std::string & sValue );
//-----------------------------------------------------------------------------
void V_URLEncode( char *pchDest, int nDestLen, const char *pchSource, int nSourceLen );
+/** Same as V_URLEncode, but without plus for space. */
+void V_URLEncodeNoPlusForSpace( char *pchDest, int nDestLen, const char *pchSource, int nSourceLen );
+
//-----------------------------------------------------------------------------
// Purpose: Decodes a string (or binary data) from URL encoding format, see rfc1738 section 2.2.
// This version of the call isn't a strict RFC implementation, but uses + for space as is
@@ -122,6 +125,9 @@ void V_URLEncode( char *pchDest, int nDestLen, const char *pchSource, int nSourc
//-----------------------------------------------------------------------------
size_t V_URLDecode( char *pchDecodeDest, int nDecodeDestLen, const char *pchEncodedSource, int nEncodedSourceLen );
+/** Same as V_URLDecode, but without plus for space. */
+size_t V_URLDecodeNoPlusForSpace( char *pchDecodeDest, int nDecodeDestLen, const char *pchEncodedSource, int nEncodedSourceLen );
+
//-----------------------------------------------------------------------------
// Purpose: strip extension from a path
//-----------------------------------------------------------------------------
diff --git a/src/vrcommon/vrpathregistry_public.cpp b/src/vrcommon/vrpathregistry_public.cpp
index 42de3e1..bd9b8d4 100644
--- a/src/vrcommon/vrpathregistry_public.cpp
+++ b/src/vrcommon/vrpathregistry_public.cpp
@@ -132,6 +132,10 @@ std::string CVRPathRegistry_Public::GetOpenVRConfigPath()
//-----------------------------------------------------------------------------
std::string CVRPathRegistry_Public::GetVRPathRegistryFilename()
{
+ std::string sOverridePath = GetEnvironmentVariable( "VR_PATHREG_OVERRIDE" );
+ if ( !sOverridePath.empty() )
+ return sOverridePath;
+
std::string sPath = GetOpenVRConfigPath();
if ( sPath.empty() )
return "";