Commit graph

689 commits

Author SHA1 Message Date
Christoph Haag 7ce07aeedf st/oxr: Support all known interaction profiles in selection
Remove the default case to generate a compiler warning when new profiles
are missing.
2021-04-02 15:48:10 +00:00
Christoph Haag 85ff0dc73c xrt: Add msft_hand_interaction path to cache and check func 2021-04-02 15:48:10 +00:00
Jakob Bornecrantz cebc8ebed5 st/oxr: No longer need to work around depth Swapchain on Unreal 2021-04-02 16:00:42 +01:00
Moses Turner 6a833b1131 st/oxr+xrt: add is_active to struct xrt_hand_joint_set to give drivers an easy way to deactivate hands 2021-04-01 02:02:26 +02:00
Christoph Haag 4061bf7707 d/multi: Add "attached" tracking override type
Example usage: Leap Motion attached to a Northstar headset.
2021-04-01 02:02:26 +02:00
Jakob Bornecrantz 967c27060e st/prober: Change log env variable and set default level to info 2021-03-30 21:27:29 +01:00
Mateo de Mayo 12d52193da d/qwerty: Connect the debug UI to the Qwerty driver
It was necessary to add a list of xdevs to oxr_sdl2_hack_start and to
populate such list from its callees.
That includes sdl2_program.gui_program->xdevs which was not being filled
for the monado-service target.
2021-03-29 15:41:25 -03:00
Ryan Pavlik 08b0fd257f st/oxr: Fix doxygen warning 2021-03-26 17:10:53 -05:00
Ryan Pavlik 6fc4cc0cc9 st/prober: Fix doxygen warnings 2021-03-26 17:10:53 -05:00
Ryan Pavlik a830f46db0 st/prober: Fix warnings 2021-03-26 17:06:17 -05:00
Ryan Pavlik 8ebd97330d st/steamvr: Fix warnings 2021-03-26 17:06:17 -05:00
Christoph Haag e8999b06c8 st/p: Change tracking override target/tracker not found error->warning 2021-03-24 18:45:00 +00:00
Christoph Haag 030230eba9 st/p: change PSVR/PSMV not set up error->info 2021-03-24 18:45:00 +00:00
Jakob Bornecrantz 63f5c86257 xrt: Make xrt_swapchain be reference counted 2021-03-24 17:50:08 +00:00
Jakob Bornecrantz e066f6a828 st/gui: Fix warning 2021-03-24 14:09:13 +00:00
Jakob Bornecrantz 6c3ab4151a st/oxr: Handle XRT_ERROR_EGL_CONFIG_MISSING 2021-03-12 00:06:36 +00:00
Jakob Bornecrantz 8be59f73ec xrt: Return xrt_result_t from xrt_gfx_provider_create_gl_egl 2021-03-12 00:06:36 +00:00
Christoph Haag 1e24602ca0 st/prober: fix off by one in reallocating list of disabled drivers 2021-03-09 13:22:41 +01:00
Jakob Bornecrantz f754fb583f st/oxr: Trace markers 2021-03-08 11:20:52 +00:00
Mateo de Mayo 75e908552f doc: Fix missing entities from modules documentation 2021-03-06 20:34:35 -03:00
Christoph Haag 44e375dd8a aux/util: Save tracking override config 2021-03-02 19:43:19 +01:00
Christoph Haag c077788436 aux/util: Store calibration config non-destructively
On save
* delete only nodes pertaining to calibration
* add new calibration nodes
* write config file
2021-03-02 19:43:19 +01:00
Christoph Haag de169bf575 gui: Add gui for tracking overrides 2021-03-02 19:43:19 +01:00
Christoph Haag 5e4c62c8aa aux/util: Move json config parsing to aux/util 2021-03-02 19:43:19 +01:00
Christoph Haag aa9298f70d aux/util: Move read_content to u_file 2021-03-02 19:43:19 +01:00
Christoph Haag ff16eab9df xrt: implement multi device wrappers for tracking overrides
Example config ~/.config/monado/config_v0.json

{
	"active": "tracking",
	"tracking":	{
		"version":	0,
		"tracking_overrides": [
			{
				"target_device_serial": "LHR-E8CC625B",
				"tracker_device_serial": "LHR-1D80A098",
				"offset": {
					"orientation": {
						"x": 0,
						"y": 0,
						"z": 0,
						"w": 1
					},
					"position": {
						"x": 0,
						"y": 0,
						"z": 0
					}
				}
			}
		]
	}
}

v2: Add multi device wrapper
2021-03-02 19:43:19 +01:00
Christoph Haag 13db11901c d/rs: Add prober and create xrt_device for rs 2021-03-02 19:43:19 +01:00
Christoph Haag 9332bb04c8 st/prober: Disable vive driver when we have survive
Unless survive is disabled via config, then don't disable vive.
2021-03-02 17:50:19 +00:00
Christoph Haag ebd4b8eae4 st/prober: Add ability to skip drivers
Only for drivers loaded with probers and autoprobers for now.

Example config:

{
	"disabled": [
		"survive"
	]
}
2021-03-02 17:50:19 +00:00
Christoph Haag 58e68e0a4a st/prober: Allow querying entries and autoprobers 2021-03-02 17:50:19 +00:00
Christoph Haag ea404a265b st/prober: Print name of misbehaving autoprober 2021-03-02 17:50:19 +00:00
Mateo de Mayo 116d77f52e st/prober: Allow autoprobe function to create more than one device. 2021-02-28 15:27:52 +00:00
Jakob Bornecrantz 4cf20b0dd3 imgui: Add implot demo 2021-02-22 23:20:05 +00:00
Jakob Bornecrantz 5b61a9b905 st/oxr: Fix crash 2021-02-16 22:53:49 +00:00
Jakob Bornecrantz 2849c7c5ae st/oxr: Quirk UnrealEngine 2021-02-16 17:55:23 +00:00
Jakob Bornecrantz 4ef6211286 st/oxr: Detect UnrealEngine 2021-02-16 17:55:23 +00:00
Jakob Bornecrantz 0ee32dfa21 st/oxr: Log application info 2021-02-16 17:55:23 +00:00
Jakob Bornecrantz cfed1c3607 st/oxr: It's not a error to pass in XrSystemHandTrackingPropertiesEXT
...when the hand tracking extension is not enabled.
2021-02-16 07:04:40 +00:00
Christoph Haag def0bef533 build/meson: Explicitly depend on generated binding header
fixes header not being generated on alpine
2021-02-15 22:04:38 +01:00
Jakob Bornecrantz a6fe8e8b1e st/prober: Clarify xrt_prober_get_string_descriptor 2021-02-15 16:13:06 +00:00
Jakob Bornecrantz 165df31d77 st/prober: Use U_LOG_RAW for dump function 2021-02-15 15:13:51 +00:00
Christoph Haag c6695b7a27 prober: return XRT_PROBER_STRING_SERIAL_NUMBER for bluetooth devices
Using the bluetooth id gotten from uevent.
2021-02-15 14:54:54 +01:00
Christoph Haag a4bde60e08 st/steamvr: Use serial number for controller id 2021-02-12 00:38:52 +01:00
Jakob Bornecrantz 35da4a51ea d/vf: Refactor code to add videotestsrc capability and break out gstreamer detection 2021-02-02 13:53:48 +00:00
Jakob Bornecrantz 8c6075e3b6 monado: Update version 2021-01-28 16:02:50 +00:00
Jakob Bornecrantz bd257500b8 d/v4l2: Expose more information 2021-01-27 16:09:07 +00:00
Christoph Haag b3592f112c st/oxr: Check swapchain format support in st 2021-01-27 01:19:31 +01:00
Christoph Haag b64b6f75fe comp: Return proper errors for OpenGL xrCreateSwapchain 2021-01-26 15:26:47 +00:00
Christoph Haag cb352839e3 st/oxr: cache VkInstance in xrGetVulkanGraphicsDeviceKHR
The problem:
* xrCreateVulkanDeviceKHR is passed a VkPhysicalDevice, but not a VkInstance.
* xrGetVulkanGraphicsDevice2KHR is passed a VkInstance and returns a VkPhysicalDevice
  that is a child of that instance.
* xrCreateVulkanDeviceKHR must verify that the xrGetVulkanGraphicsDevice2KHR
  has been called and that the passed VkPhysicalDevice matches the one returned
  by xrGetVulkanGraphicsDevice2KHR.

We have to consider:
* xrCreateVulkanDeviceKHR has to work on the "correct" VkInstance, which the passed
  VkPhysicalDevice is a child of.

The reqirement

> If the vulkanPhysicalDevice parameter does not match the output of
> xrGetVulkanGraphicsDeviceKHR, then the runtime must return XR_ERROR_HANDLE_INVALID.

is not 100% clear whether calling xrCreateVulkanInstance multiple times is allowed
and how a second call to xrGetVulkanGraphicsDevice2KHR with a dfferent VkInstance
should be handled.

For this implementation xrCreateVulkanDeviceKHR will only consider the most recent call
to xrGetVulkanGraphicsDevice2KHR and the VkInstance that was used for this call.
This enforces at least that VkPhysicalDevice is a child of the cached VkInstance when
xrCreateVulkanDeviceKHR is called, because using a different VkPhysicalDevice would be
an error.
2021-01-26 03:45:43 +01:00
Jakob Bornecrantz cb51b32ff1 st/oxr: Tidy code
The CHECK_LAYER_TYPE tests would falsely pass on the
IPC layer as it always implements all of the functions.
2021-01-22 14:16:12 +00:00
Christoph Haag f326ec8fc3 st/oxr: Check XrHandJointLocationsEXT::jointLocations for NULL 2021-01-22 03:34:40 +01:00
Jakob Bornecrantz 3e028a7952 st/oxr: Correctly validate quats to be within 1% of unit length 2021-01-21 00:33:32 +00:00
Christoph Haag 46ec938f8a build: Move bindings build to bindings/subdir
The generated files should be in auxiliary/bindings/*.{c,h}. For this to work
meson.build has to be in the bindings/ subdir:
https://github.com/mesonbuild/meson/issues/2320

Move CMakeLists.txt there too for some consistency.
Also fixes the previous include hack.
2021-01-20 18:23:09 +01:00
Christoph Haag 07218c9878 aux: generate b_generated_bindings.{c,h} instead of xrt_generated_bindings.{c,h}
Follow up to 543804e53cafa83c52b61f70894696bc4d95fa7c
2021-01-20 18:23:09 +01:00
Christoph Haag 06e7e7e832 steamvr: Implement support for and default to generated input profile 2021-01-20 18:23:09 +01:00
Christoph Haag edd6a4cf70 xrt: Move oxr_binding_data.h to json profile generator
Move json profile generator to auxiliary/bindings and make generated_bindings static library.

aux/bindings: Add hardware type

aux/bindings: Add various steamvr specific things to bindings
Paths like "/input/menu/click" are used in SteamVR input profiles.
2021-01-20 18:23:09 +01:00
Christoph Haag 1b597bdd65 st/oxr: Rename sub_path variables to subaction_path
Subaction paths are the /user/X/Y part of the full path describing the input source/device.
"Subaction paths are a mechanism that enables applications to use the same action name and handle on multiple devices. Applications can query action state using subaction paths that differentiate data coming from each device."

Subpaths, are the input or output specific part of the full path, e.g.
"Each input source path must match the following pattern: …/input/<identifier>[_<location>][/<component>]"
2021-01-20 18:23:09 +01:00
Christoph Haag 5764365427 steamvr: Use simple vibration as fallback 2021-01-20 18:23:09 +01:00
Christoph Haag 609b834670 steamvr: Add comment about pose time offset 2021-01-20 18:23:09 +01:00
Jakob Bornecrantz afea93f297 xrt: Remove prepare function from xrt_compositor 2021-01-20 15:04:09 +00:00
Jakob Bornecrantz 2b8c835b68 xrt: Introduce xrt_system_compositor 2021-01-20 15:04:09 +00:00
Jakob Bornecrantz a0598c07ae st/gui: Tidy code and clang-format 2021-01-19 18:15:02 +00:00
Jakob Bornecrantz b48036a3ff st/oxr: Tidy code and clang-format 2021-01-19 18:15:02 +00:00
Jakob Bornecrantz 2b996f30c4 xrt: Reflow after column change 2021-01-15 13:50:32 +00:00
Jakob Bornecrantz 271e2b0275 st/oxr: Remove dynamic prediction code 2021-01-11 23:50:01 +00:00
Jakob Bornecrantz 079f3769d4 st/oxr: Convert the given at_time when asking for relations from devices 2021-01-11 23:50:01 +00:00
Christoph Haag 729f726135 steamvr: Request hmd pose at current time instead of 1 2021-01-11 23:50:01 +00:00
Christoph Haag 4d652fef5a st/oxr: Implement XR_KHR_vulkan_enable2 2021-01-06 13:40:59 +00:00
Christoph Haag f8a4f35572 oxr: Add XR_KHR_vulkan_enable2 to ext generator script 2021-01-06 13:40:59 +00:00
Christoph Haag e2c1bc1d16 xrt: Rename hand_origin to hand_pose
hand_origin is confusing because it implies it is the origin of the coordinate system the hand is in.
It actually is the hand pose in the "global" coordinate system.
2021-01-06 13:29:36 +00:00
Christoph Haag 3848d2be3f st/oxr: Add env vars for global tracking origin offset
This commit is a band aid until a more proper room setup is implemented.
It allows moving the tracking offset for the device roles head, left and right by a fixed value.

A y tracking offset OXR_TRACKING_ORIGIN_OFFSET_Y=1.0 would tell monado that the current tracking
origin is 1 meter above the desired tracking origin, e.g. when the headset was calibrated to a
(0,0,0) position while sitting on table 1 meter above the floor.

This environment variable affects STAGE space, but not LOCAL space.
2021-01-06 13:03:47 +00:00
Jae Lee a71de192e0 illixr: Add initial integration. 2020-12-29 23:44:57 +00:00
Jakob Bornecrantz 1302b07d68 xrt: Add sync_handle argument to layer_commit 2020-12-28 15:22:06 +00:00
Lubosz Sarnecki 12a3a24315 st/gui+steamvr_drv: Port to u_logging. 2020-12-28 13:04:11 +00:00
Lubosz Sarnecki 521daac012 st/oxr: Port to u_logging.
Remove foo print.
Use correct ENV variable XRT_COMPOSITOR_LOG for Vulkan log.
2020-12-28 13:04:11 +00:00
Lubosz Sarnecki a8b01a89f3 st/prober: Port to u_logging. 2020-12-28 13:04:11 +00:00
Christoph Haag 31c4c14042 steamvr: Make serial unique by appending xrt_hand
Monado gives both Playstation Move controllers the same xrt device name.

fixes #109
2020-12-25 22:56:54 +01:00
Lubosz Sarnecki 9351673e55 st/steamvr_drv: Silence unfixable OpenVR cpp warnings. 2020-12-16 15:10:10 +01:00
Lubosz Sarnecki dc45a201db c+ipc+st: Complete equirect1 boilerplate. 2020-12-14 18:59:28 +00:00
Lubosz Sarnecki c8bdfae83e src: Consistently append 1 to equirect1 code.
Rename XRT_FEATURE_OPENXR_LAYER_EQUIRECT_LEGACY to XRT_FEATURE_OPENXR_LAYER_EQUIRECT1.
Use correct define in verify_equirect1_layer function.
Rename equirect to equirect1.
meson: enable equirect1 by default.
2020-12-14 18:59:28 +00:00
Lubosz Sarnecki f334b8b6c7 src: Consistently append 2 to equirect2 code.
Rename XRT_FEATURE_OPENXR_LAYER_EQUIRECT to XRT_FEATURE_OPENXR_LAYER_EQUIRECT2.
Rename equirect to equirect2.
Rename shader files.
2020-12-14 18:59:28 +00:00
Christoph Haag b2337469a4 st/prober: Make video file input work with no camera connected 2020-12-14 18:55:15 +00:00
Christoph Haag f0d21c1dcc d/vf: Add video file playback driver 2020-12-07 12:30:26 +00:00
Christoph Haag e480352cee t/hand: Add hand tracking module 2020-12-07 12:30:26 +00:00
Christoph Haag f7a8e8810b xrt: Split hand tracking input name into left/right
oxr_hand_tracker now stores which xdev and input name it tracks.
2020-12-07 11:43:51 +00:00
Christoph Haag f6839ee4bf st/oxr: Add view space case to hand tracking data 2020-11-23 20:42:54 +00:00
Christoph Haag 006971ae7a u/hand_tracking: Calculate joint velocities
And return them in the state tracker
2020-11-23 20:42:54 +00:00
Christoph Haag 191fe7a59f st/oxr: Add verification of XrHandJointVelocitiesEXT 2020-11-23 20:42:54 +00:00
Christoph Haag f5ef3985ba xrt: Add support for locating hand joints in action spaces 2020-11-23 20:42:54 +00:00
Ryan Pavlik 4307ee8a08 st/oxr: Fix exporting of negotiate function. 2020-11-23 14:27:21 -06:00
Ryan Pavlik de36a64f27 st/gui: Don't export symbols from cimgui 2020-11-23 14:27:21 -06:00
Jakob Bornecrantz d1aa04e402 st/gui: Add remote hand tracking controls 2020-11-18 17:37:39 +00:00
Christoph Haag 2efba6451e steamvr: support rotated displays and direct mode
Monado now calculates OpenHMD viewport dimensions and offsets correctly, we can pass those through.

The rotation of the rendered texture is performed with the distortion function.

v2: Use rotation matrix multiplication for distortion rotation
2020-11-12 16:04:00 +01:00
Christoph Haag 2082eddb65 steamvr: Fix running without controllers 2020-11-10 15:43:07 +01:00
Ryan Pavlik 9da004abb4 st/steamvr: Fix build on Windows. 2020-11-10 03:09:07 +00:00
Ryan Pavlik ec1375342f st/oxr: Fix outdated reference in docs. 2020-11-10 03:09:07 +00:00
Christoph Haag cb62514fd0 steamvr: Implement basic SteamVR driver
v3:
  targets: Add Monado-SteamVR driver target
  st/ovrd: Add OpenVR driver header
  build: Factor out sdl hack into lib_sdl2_hack and update steamvr build
  build: Revert lib_sdl2_refactor
  steamvr: Emulate Index Controller by default
  steamvr: Use oxr_handle_destroy instead of exposing oxr_instance_destroy
  steamvr: don't use oxr internals
  steamvr: communicate 3dof tracking to steamvr
  steamvr: use util functions for device assignment and tracking origin setup
  steamvr: Install plugin to <prefix>/share/steamvr-monado
  steamvr: Use thread for updating poses every 1ms

Makes a big difference for the Index @144Hz on the vive driver.
Still somewhat choppy on survive driver - prediction should solve it.

Main-author: Christoph Haag <christoph.haag@collabora.com>
Co-author: Jakob Bornecrantz <jakob@collabora.com>
2020-11-09 19:21:27 +00:00
Christoph Haag 9d894ab5ff xrt: Move tracking origin setup code to u_device 2020-11-09 00:32:33 +01:00
Christoph Haag c60b7412e5 xrt: Move device assignment code to u_device 2020-11-09 00:32:33 +01:00
Christoph Haag 5478bad3d0 st/oxr: Add OXR_FRAME_TIMING_SPEW var to print basic frame timing information 2020-11-06 00:51:24 +01:00