Install Steam
login
|
language
简体中文 (Simplified Chinese)
繁體中文 (Traditional Chinese)
日本語 (Japanese)
한국어 (Korean)
ไทย (Thai)
Български (Bulgarian)
Čeština (Czech)
Dansk (Danish)
Deutsch (German)
Español - España (Spanish - Spain)
Español - Latinoamérica (Spanish - Latin America)
Ελληνικά (Greek)
Français (French)
Italiano (Italian)
Bahasa Indonesia (Indonesian)
Magyar (Hungarian)
Nederlands (Dutch)
Norsk (Norwegian)
Polski (Polish)
Português (Portuguese - Portugal)
Português - Brasil (Portuguese - Brazil)
Română (Romanian)
Русский (Russian)
Suomi (Finnish)
Svenska (Swedish)
Türkçe (Turkish)
Tiếng Việt (Vietnamese)
Українська (Ukrainian)
Report a translation problem
I've just tried helloxr which we also build along with steamvr internally, and unable to see anything odd with the demo. Can you provide more info on your setup?
By "Reset View" I mean I press the right controller's Oculus Home button, and when you're in SteamVR opens up a window where there's a button that you can press Reset View on it, that's what jump starts the tracking and makes it run properly.
I'm on Windows 10 Pro for Workstations, 128 GB of RAM, Threadripper 2990wx.
HMD is Oculus Quest 2 connected via Link (wired or not makes no difference) at 120 Hz, using latest SteamVR (tried beta and non-beta), latest OpenXR-SDK-Source checkout from Github as of today. I also connected my Quest 1 and Rift CV1 (wired via HDMI) and it was the same problem.
I built the hello_xr sample with VS 2019 x64, and latest Vulkan SDK (last I checked the issue was there with DX12 as well). I started it in Debug and Release, both with the debugger attached and not, same thing.
Toggling between Oculus' OpenXR runtime and SteamVR's gives me a 100% repro, that's persisted across nearly a year's worth of OpenXR SDK releases, SteamVR updates, Vulkan SDK updates, etc.
I can't for the life of me figure it out. If it's just an issue on my machine, that'll make it hard to diagnose. I do recall that I used to only need to do Reset View once, then subsequent sessions would work correctly. But now it's literally every time, so it's unusable.
The OpenXR session / initialization seems to work but the main loop in hello_xr that polls the HMD poses for each eye's view isn't getting any values for either the headset or controllers, until I manually do ResetView.
Still unable to repro this on two different rigs and Quest2s I have running at 120hz in the Oculus side (we only run 72 on our end) using both Vulkan and DX12 for helloxr. I'm getting validation warnings in Vulkan mode but nothing that seems to affect the prompt start of the demo app.
You mentioned as well you've had the issue since 1 year, that would exclude 120hz mode to be an issue I guess.
Try using vulkan2 with helloxr+steamvr and see if that works better for you. Also, note any xrcall errors. Its kinda sounding like either the session isnt starting properly, openxr calls are being made in an inappropriate session state, or some issue with tracking being established.
Other things to check is if you're compiling the latest helloxr in Khronos' GitHub and your cable is officially supported.
For DX12, you can also try the following test app:
https://github.com/JoeLudwig/diligent_hello_openxr
For Vulkan, I'm not sure if the Unity and UE implementations are stable at the moment so you can compare as they have some solid QA around those implementations, so would be good to check.
I also have a test app for OpenXR that I use for quickly testing some steamvr dev work:
https://github.com/1runeberg/OpenXRProvider
This currently uses only OpenGL, but I have been migrating it to Vulkan on a private repo in my spare time. What I could say at this point is that you can easily run into issues with implementing the vulkan extension specially around the init part, this was the reason for the vulkan2 extension.
If you havent already, enable the validation layers and make sure you're not silently running into any vulkan errors.
Just as a side note regarding vulkan2 - this still does have issues at this stage so other runtimes havent implemented it (I believe oculus hasnt) and likely waiting for a new iteration of this extension.
I tried the diligent sample, it doesn't build (missing vulkan.h even though vulkan isn't implemented), and when I fixed that it just crashes. Next.
OpenXRProvider actually starts and runs with the SteamVR Oculus OpenXR runtime without reset view, right from the start, but it runs at 60 Hz instead of 120 Hz. Using Oculus' runtime it's a solid 120. That worries me but that's a different problem (I think others have reported it). That's at least a clue towards a fix / workaround, even if it only is for niche setups.
Going back to OpenXR SDK's hello_xr, I built it using latest everything but it's still the same as before, and I tried with -g d3d11 / d3d12 / vulkan and vulkan2. Same thing each time. So it's not even a Vulkan-specific issue. There must be something in this sample code that just doesn't work on my machine, maybe my Threadripper CPU or possibly Windows 10 for Workstations, who knows. I seem to remember only upgrading to 10 for Workstations after, but anyway if the OpenXRProvider sample doesn't need the reset view, and it's not a Vulkan-specific issue, then there must be something inherent in the timings or initialization sequence that happens there. I should probably just debug d3d11 which is simpler than vulkan, since the issue is caused by something at a higher level of abstraction than the RHI.
OpenXR SDK source gives me a bunch of validation errors using the latest Vulkan SDK:
"[21:04:09.622][Error ] ERROR: (INSTANCE 0x0) [Validation] Validation Error: [ VUID-VkPhysicalDeviceProperties2-pNext-pNext ] Object 0: VK_NULL_HANDLE, type = VK_OBJECT_TYPE_INSTANCE; | MessageID = 0xdd73dbcf |
vkGetPhysicalDeviceProperties2KHR: Includes a pNext pointer (pProperties->pNext) to a VkStructureType (VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES), but its parent extension VK_KHR_external_fence_capabilities has not been enabled. The Vulkan spec states:
Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkPhysicalDeviceAccelerationStructurePropertiesKHR, VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT, ...."
I'm gonna try running the OpenXR hello_xr sample on a different system to see if it's just my machine.
Actually, can you send me your hello_xr.exe ? My email is belakampis at battleaxevr com
I wonder if it's something wrong with my visual studio setup here. I'm using VS 2019 community.
In the SDK releases it doesn't include compiled binaries of the sample app (jeez why is nothing ever easy). Btw I really appreciate the help here.
I don't think you'll get 120 over steamvr link if that's your ultimate goal esp since it's still experimental. Pls note with OpenXR, your users can always opt to use the native openxr runtime that came with their hardware (in this case Oculus). OpenXR titles published in Steam should run in any OpenXR runtime.
We have upcoming changes to Steam with startup options for OpenXR, but even without these upcoming changes, the default OpenXR runtime (e.g. SteamVR, WMR, Oculus, Monado, etc) would be used by the published app. One recently released title if you'd like to try that uses OpenXR for example that I'm aware of and was tested across different runtimes and published in Steam is:
https://store.steampowered.com/app/1296970/Zombieland_VR_Headshot_Fever/
This title was also extensively tested with SteamVR+Oculus Rift/RiftS/Quest/Quest2.
As for the possibility of a CPU compat issue, one of the rigs I used for testing is a Ryzen 9 3950X and the other Intel i9-9900K. 60Hz seems rather slow though for the Sandbox (OpenXRProvider) demo app on a Quest2, might be cable related? Or potentially a steamvr add-on?
The Vulkan error you're getting means you're not enabling a required extension we need. If you're getting this with vulkan2, then check with vulkaninfo if your hardware and sdk version supports all our required extensions, listed here (as of this writing):
Required instance extensions (all platforms):
VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME (this is what the vulkan error you're getting is complaining of for vkGetPhysicalDeviceProperties2KHR)
VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME
Required instance extensions (windows):
VK_KHR_SURFACE_EXTENSION_NAME
VK_KHR_WIN32_SURFACE_EXTENSION_NAME
Required instance extensions (linux)
VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME
Required device extensions (all platforms):
VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME
VK_KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME
VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME
VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME
Additional required extensions for linux:
VK_KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME
VK_KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME
Finally, here's a pre-built helloxr.exe:
https://www.dropbox.com/sh/55gh3azs6bogakv/AAAorBL3KC63mfPybWdQb5u6a?dl=0
But, after I do the ResetView, SteamVR's OpenXR interface runs just fine at 120 Hz on my Quest 2, both using Link, Air Link, and Virtual Desktop.
Here's the logs, there are some key differences, especially that SteamVR doesn't bind the vibration in this sample, but there's also a bunch of log spam from Vulkan using SteamVR too:
helloxr.exe -g vulkan
SteamVR's OpenXR runtime:
[21:17:26.314][Info ] Instance RuntimeName=SteamVR/OpenXR RuntimeVersion=0.1.0
[21:17:26.314][Info ] Available View Configuration Types: (1)
[21:17:26.314][Info ] Available Environment Blend Mode count : (1)
[21:17:26.314][Info ] Environment Blend Mode (XR_ENVIRONMENT_BLEND_MODE_OPAQUE) : (Selected)
[21:17:26.426][Info ] INFO: (INSTANCE 0x29928d0) [Loader Message] Inserted device layer VK_LAYER_KHRONOS_validation (C:\VulkanSDK\1.2.182.0\Bin\.\VkLayer_khronos_validation.dll)
[21:17:26.426][Info ] INFO: (INSTANCE 0x29928d0) [Loader Message] Inserted device layer VK_LAYER_NV_optimus (C:\WINDOWS\System32\DriverStore\FileRepository\nv_dispi.inf_amd64_b8346c359fcd6093\.\nvoglv64.dll)
[21:17:26.573][Info ] Loaded vertex shader
[21:17:26.573][Info ] Loaded fragment shader
[21:17:28.342][Info ] Available reference spaces: 3
[21:17:28.357][Info ] System Properties: Name=SteamVR/OpenXR : oculus VendorId=10462
[21:17:28.357][Info ] System Graphics Properties: MaxWidth=2528 MaxHeight=2780 MaxLayers=16
[21:17:28.357][Info ] System Tracking Properties: OrientationTracking=True PositionTracking=True
[21:17:28.357][Info ] Creating swapchain for view 0 with dimensions Width=2528 Height=2780 SampleCount=1
[21:17:28.365][Info ] Creating swapchain for view 1 with dimensions Width=2528 Height=2780 SampleCount=1
[21:17:28.368][Info ] XrEventDataSessionStateChanged: state XR_SESSION_STATE_UNKNOWN->XR_SESSION_STATE_IDLE session=132024368 time=46771220419300
[21:17:28.368][Info ] XrEventDataSessionStateChanged: state XR_SESSION_STATE_IDLE->XR_SESSION_STATE_READY session=132024368 time=46771220437500
[21:17:28.567][Warning] PERF: (COMMAND_BUFFER 0x88e1e38) [Validation] Validation Performance Warning: [ UNASSIGNED-CoreValidation-DrawState-InvalidImageLayout ] Object 0: handle = 0x88e1e38, type = VK_OBJECT_TYPE_COMMAND_BUFFER; | MessageID = 0x4dae5635 | vkCmdBlitImage(): For optimal performance VkImage 0xb8b3500000000ac[] layout should be VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL instead of GENERAL.
[21:17:28.576][Warning] PERF: (COMMAND_BUFFER 0x88e1e38) [Validation] Validation Performance Warning: [ UNASSIGNED-CoreValidation-DrawState-InvalidImageLayout ] Object 0: handle = 0x88e1e38, type = VK_OBJECT_TYPE_COMMAND_BUFFER; | MessageID = 0x4dae5635 | vkCmdBlitImage(): For optimal performance VkImage 0xdf8aaa00000000b3[] layout should be VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL instead of GENERAL.
[21:17:28.578][Info ] XrEventDataSessionStateChanged: state XR_SESSION_STATE_READY->XR_SESSION_STATE_SYNCHRONIZED session=132024368 time=46771455920600
[21:17:28.578][Info ] XrEventDataSessionStateChanged: state XR_SESSION_STATE_SYNCHRONIZED->XR_SESSION_STATE_VISIBLE session=132024368 time=46771455941500
[21:17:28.578][Info ] XrEventDataSessionStateChanged: state XR_SESSION_STATE_VISIBLE->XR_SESSION_STATE_FOCUSED session=132024368 time=46771455957400
[21:17:28.589][Warning] PERF: (COMMAND_BUFFER 0x88e1e38) [Validation] Validation Performance Warning: [ UNASSIGNED-CoreValidation-DrawState-InvalidImageLayout ] Object 0: handle = 0x88e1e38, type = VK_OBJECT_TYPE_COMMAND_BUFFER; | MessageID = 0x4dae5635 | vkCmdBlitImage(): For optimal performance VkImage 0xb8b3500000000ac[] layout should be VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL instead of GENERAL.
[21:17:28.590][Warning] PERF: (COMMAND_BUFFER 0x88e1278) [Validation] Validation Performance Warning: [ UNASSIGNED-CoreValidation-DrawState-InvalidImageLayout ] Object 0: handle = 0x88e1278, type = VK_OBJECT_TYPE_COMMAND_BUFFER; | MessageID = 0x4dae5635 | vkCmdBlitImage(): For optimal performance VkImage 0xdf8aaa00000000b3[] layout should be VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL instead of GENERAL.
[21:17:28.590][Info ] Grab action is bound to Left Hand Oculus Touch Grip
[21:17:28.590][Info ] Quit action is bound to nothing
[21:17:28.590][Info ] Pose action is bound to Left Hand Oculus Touch /pose/openxr_grip
[21:17:28.590][Info ] Vibrate action is bound to nothing
[21:17:28.590][Info ] Grab action is bound to Left Hand Oculus Touch Grip
[21:17:28.590][Info ] Quit action is bound to nothing
[21:17:28.590][Info ] Pose action is bound to Left Hand Oculus Touch /pose/openxr_grip
[21:17:28.590][Info ] Vibrate action is bound to nothing
[21:17:28.591][Info ] Grab action is bound to Left Hand Oculus Touch Grip
[21:17:28.591][Info ] Quit action is bound to nothing
[21:17:28.591][Info ] Pose action is bound to Left Hand Oculus Touch /pose/openxr_grip
[21:17:28.591][Info ] Vibrate action is bound to nothing
[21:17:28.591][Info ] Grab action is bound to Left Hand Oculus Touch Grip
[21:17:28.591][Info ] Quit action is bound to nothing
[21:17:28.591][Info ] Pose action is bound to Left Hand Oculus Touch /pose/openxr_grip
[21:17:28.591][Info ] Vibrate action is bound to nothing
[21:17:28.601][Warning] PERF: (COMMAND_BUFFER 0x88e1278) [Validation] Validation Performance Warning: [ UNASSIGNED-CoreValidation-DrawState-InvalidImageLayout ] Object 0: handle = 0x88e1278, type = VK_OBJECT_TYPE_COMMAND_BUFFER; | MessageID = 0x4dae5635 | vkCmdBlitImage(): For optimal performance VkImage 0xb8b3500000000ac[] layout should be VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL instead of GENERAL.
[21:17:28.602][Warning] PERF: (COMMAND_BUFFER 0x88e1e38) [Validation] Validation Performance Warning: [ UNASSIGNED-CoreValidation-DrawState-InvalidImageLayout ] Object 0: handle = 0x88e1e38, type = VK_OBJECT_TYPE_COMMAND_BUFFER; | MessageID = 0x4dae5635 | vkCmdBlitImage(): For optimal performance VkImage 0xdf8aaa00000000b3[] layout should be VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL instead of GENERAL.
[21:17:28.602][Info ] Grab action is bound to Left Hand Oculus Touch Grip
[21:17:28.602][Info ] Quit action is bound to nothing
[21:17:28.602][Info ] Pose action is bound to Left Hand Oculus Touch /pose/openxr_grip
[21:17:28.602][Info ] Vibrate action is bound to nothing
[21:17:28.602][Info ] Grab action is bound to Left Hand Oculus Touch Grip
[21:17:28.602][Info ] Quit action is bound to nothing
[21:17:28.602][Info ] Pose action is bound to Left Hand Oculus Touch /pose/openxr_grip
[21:17:28.603][Info ] Vibrate action is bound to nothing
Oculus' runtime:
[21:19:38.258][Info ] Instance RuntimeName=Oculus RuntimeVersion=1.65.0
[21:19:38.262][Info ] Available View Configuration Types: (1)
[21:19:38.262][Info ] Available Environment Blend Mode count : (1)
[21:19:38.262][Info ] Environment Blend Mode (XR_ENVIRONMENT_BLEND_MODE_OPAQUE) : (Selected)
[21:19:38.338][Info ] INFO: (INSTANCE 0x2c444e0) [Loader Message] Inserted device layer VK_LAYER_KHRONOS_validation (C:\VulkanSDK\1.2.182.0\Bin\.\VkLayer_khronos_validation.dll)
[21:19:38.338][Info ] INFO: (INSTANCE 0x2c444e0) [Loader Message] Inserted device layer VK_LAYER_NV_optimus (C:\WINDOWS\System32\DriverStore\FileRepository\nv_dispi.inf_amd64_b8346c359fcd6093\.\nvoglv64.dll)
[21:19:38.495][Info ] Loaded vertex shader
[21:19:38.495][Info ] Loaded fragment shader
[21:19:38.631][Info ] Available reference spaces: 3
[21:19:38.631][Info ] System Properties: Name=Oculus Quest VendorId=-11714
[21:19:38.631][Info ] System Graphics Properties: MaxWidth=4096 MaxHeight=4096 MaxLayers=16
[21:19:38.631][Info ] System Tracking Properties: OrientationTracking=True PositionTracking=True
[21:19:38.632][Info ] Creating swapchain for view 0 with dimensions Width=2064 Height=2272 SampleCount=1
[21:19:38.637][Info ] Creating swapchain for view 1 with dimensions Width=2064 Height=2272 SampleCount=1
[21:19:38.643][Info ] XrEventDataSessionStateChanged: state XR_SESSION_STATE_UNKNOWN->XR_SESSION_STATE_IDLE session=72143888520839169 time=46901508768500
[21:19:38.643][Info ] XrEventDataSessionStateChanged: state XR_SESSION_STATE_IDLE->XR_SESSION_STATE_READY session=72143888520839169 time=46901508779400
[21:19:38.659][Info ] XrEventDataSessionStateChanged: state XR_SESSION_STATE_READY->XR_SESSION_STATE_SYNCHRONIZED session=72143888520839169 time=46901536847899
[21:19:39.602][Info ] XrEventDataSessionStateChanged: state XR_SESSION_STATE_SYNCHRONIZED->XR_SESSION_STATE_VISIBLE session=72143888520839169 time=46902479811900
[21:19:39.602][Info ] XrEventDataSessionStateChanged: state XR_SESSION_STATE_VISIBLE->XR_SESSION_STATE_FOCUSED session=72143888520839169 time=46902479815700
[21:19:39.621][Info ] Grab action is bound to Left Hand Oculus Touch Squeeze
[21:19:39.621][Info ] Quit action is bound to Left Hand Oculus Touch Menu Button
[21:19:39.621][Info ] Pose action is bound to Left Hand Oculus Touch Grip Pose
[21:19:39.622][Info ] Vibrate action is bound to Left Hand Oculus Touch Vibration
I don't think the vulkan validation errors related to the layouts matters, since I get the problem using d3d11 as well. It's much more likely the log spam related to OpenXR session state. Are you not getting this same session log spam on your system with Quest using SteamVR on helloxr.exe? Maybe something's wrong with my machine but we sold the dGPU in my other system so I have no other machine to test this on right now. I do remember reproing this issue on that machine way back when though (it had an Intel quad-core CPU).
I get the same log spam about the vkCmdBlitImage on the console there, and it has nothing to do with Oculus runtime (Oculus Home isn't installed on these instances, they are just blade servers for remote rendering).
XR_SESSION_STATE_UNKNOWN
XR_SESSION_STATE_IDLE
XR_SESSION_STATE_READY
XR_SESSION_STATE_SYNCHRONIZED
XR_SESSION_STATE_VISIBLE
XR_SESSION_STATE_FOCUSED
So the main differences between the two runtimes, at least wrt logs is
"Vibrate action is bound to nothing" and the vkCmdBlitImage validation warnings
When I tested it with a debugger the eye view poses just weren't getting any data updates from SteamVR's OpenXR runtime until after I call ResetView. That's where I ran into a brick wall, I don't have access to the source code so it's a black box to me. I know it's hard to debug without being able to reproduce it. I'll keep trying and also look at what may be different with the other sample there that doesn't have the issue. I'll also test Unreal's OpenXR plugin with both runtimes and see if it happens there.
I'm not seeing a session state spam? do you mean the vulkan warnings? yeah, this is something you can ignore for now and shouldnt affect the demo app.
arent you trying to solve an issue that seems local to your setup? i'd ask colleagues or friends first to try before trying to place a workaround for something that seems local to your end. and perhaps focus on figuring hte issue. unfortunately this is not something i can help with.
but it is sounding like the app isnt getting input priority for some reason. so i would look at your steamvr setup and disable any add-ons if you have any or try reinstalling steamvr with prestine config.