Commit graph

468 commits

Author SHA1 Message Date
Ryan Pavlik 4c5b38c836 st/oxr: Clean up GL/GLES image enumeration a bit for easier maintenance 2020-07-17 13:53:39 -05:00
Ryan Pavlik 852c9b589d st/oxr: Handle Android better. 2020-07-17 13:53:39 -05:00
Ryan Pavlik 4220638afd xrt: use _USE_MATH_DEFINES to make sure M_PI gets defined. 2020-07-17 13:53:39 -05:00
Christoph Haag eb355f3643 st/oxr: Handle quad layer with reference space as base space again
fixes d64ef3df
2020-07-17 13:10:20 +02:00
Christoph Haag d64ef3df74 st/oxr: Basic support for ActionSpace as base space in QuadLayer 2020-07-16 20:02:05 +00:00
Ryan Pavlik 1aa2cdb89a build: Move determination of Vulkan usage to build system.
Vulkan is still required for most actual uses of Monado, but this
makes the coupling weaker.
2020-07-16 10:17:30 +00:00
Ryan Pavlik 54f56716fd xrt: Rename references to compositor/swapchain/image_fd to ..._native.
Reflecting that the native buffer isn't an FD on all platforms.
2020-07-15 09:11:58 -05:00
Jakob Bornecrantz c37dd46b0c st/prober: Rework HMD logic a bit and put HMD always in first position 2020-07-14 12:55:18 +01:00
Christoph Haag b073e3dfb9 xrt: Add support for assigned device roles
Abandons the assumption that in oxr_system.xdevs[], index 0 is HMD,
1 is left controller, 2 is right controller.

Now to represent the dynamically assigned roles, oxr_system.role contains
the index for a device in oxr_system.xdevs[] for head, left and right.

This role assignment happens on the client side and currently can not be updated
from the server side.

Also adds an enum that device drivers set indicating allowed assignments
(many controllers are physically designed to be held in a specific hand).

This also adds support for configurations with only a HMD and a right controller.
2020-07-13 18:03:01 +02:00
Christoph Haag 5788fb90a2 drivers: Add rotation/position tracking bool to xdev
xrGetSystemProperties() will return these values to application in XrSystemTrackingProperties
using the xdev assigned to head.
2020-07-13 18:03:01 +02:00
Jakob Bornecrantz deedd10a50 xrt: Tidy xrt_instance_create argument order and add doc-comment 2020-07-08 14:41:12 +00:00
Jakob Bornecrantz c5b930903e st/oxr: Fix conformance failure and tidy up action set attached logic
This caused a action set to act as if it has been attached, one might say that
this commit fixes a overly attached action set.

Extreme programmed with Ryan Pavlik, which I also ~~stole~~ borrowed the header
comments from verbatim.
2020-07-06 20:11:35 +01:00
Jakob Bornecrantz 59b7bdeee0 st/oxr: Properly name MNDX_ball_on_a_stick_controller 2020-07-06 11:58:42 +01:00
Jakob Bornecrantz fd8e19718c st/oxr: Reorder extension in prefix order 2020-07-06 11:42:16 +01:00
Jakob Bornecrantz 8a1c74338c st/oxr: Make script be up to date to what's generated 2020-07-06 11:42:16 +01:00
Jakob Bornecrantz 8ee7086ea6 xrt: Introduce xrt_swapchain_create_info 2020-07-04 11:04:07 +00:00
Jakob Bornecrantz ad266672f4 st/gui: Add a special UI for setting log level vars 2020-07-03 19:26:45 +01:00
Jakob Bornecrantz 9848f8b4b8 u/var: Add log level tracker 2020-07-03 19:01:55 +01:00
Christoph Haag 184dd277bf bindings: Fix Index squeeze/force binding declaration 2020-07-01 18:36:41 +02:00
Christoph Haag c6d25a9773 st/oxr: Convert action timestamp with time_state_monotonic_to_ts_ns
Action timestamps were missing this conversion to XrTime with time_state_monotonic_to_ts_ns()
which caused them to be out of sync with the predicted frame times and device "pose at" timestamps.
2020-06-26 01:41:08 +02:00
Christoph Haag b7ea0ce2b3 st/oxr: Support next-chained XrSpaceVelocity in XrSpaceLocation 2020-06-26 01:41:08 +02:00
Pete Black bd5aa24463 xrt: Add multi client and overlay client support 2020-06-25 15:48:34 +01:00
Jakob Bornecrantz 3275f00464 st/oxr: Use a semaphore to ensure wait frame is released after begin frame has been called 2020-06-23 21:31:03 +01:00
Jakob Bornecrantz b75f4f844b xrt: Add frame_id to compositor frame calls 2020-06-23 21:31:00 +01:00
Ryan Pavlik 726e446421 st/oxr: Make sure to clear action state metadata in case input is not active.
Also addresses some review comments on earlier changes.
2020-06-17 17:27:59 -05:00
Jakob Bornecrantz 5443e3a069 st/oxr: Work around stict-aliasing warning (NFC) 2020-06-17 12:20:30 +01:00
Christoph Haag 7a1dbbe8a1 st/oxr: Ensure quaternion is normalized in xrLocateViews()
In rare cases the state tracker's pose transformations resulted in a quaternion
that accumulated float precision errors such that the norm of the quaternion was
not within float precision of 1.0 anymore.

Introduce a function math_quat_ensure_normalized() that can be used after multiple
operations have been performed on a quaternion.
2020-06-17 13:03:34 +02:00
Jakob Bornecrantz 17f40ecc26 st/oxr: Use the transformed boolean value 2020-06-17 11:48:43 +01:00
Ryan Pavlik 1a5d31b82b st/oxr: New input transform implementation, fixes conformance failures.
Includes unit tests for oxr_input_transform, add to CI

This is a revised implementation using "variants" instead of
"inheritance" in a linked-list.
2020-06-17 10:03:32 +00:00
Ryan Pavlik adbafad079 st/oxr: Rename the remaining oxr_source things to oxr_action 2020-06-16 16:42:38 -05:00
Jakob Bornecrantz abf8d5b8bd st/oxr: More correctly handle spaces for layers 2020-06-15 23:59:04 +00:00
Ryan Pavlik 1738329138 st/oxr: Give oxr_action and oxr_action_set ref-counted backing data 2020-06-15 18:11:33 -05:00
Ryan Pavlik 640fa1bbe5 st/oxr: Rename the action set and action keys to distinct names. 2020-06-15 17:09:20 -05:00
Ryan Pavlik 2f8d1a54a5 st/oxr: Reparent action set/action attachment.
They are no longer a linked list and a handle, but simple dynamic arrays.
2020-06-15 17:09:15 -05:00
Ryan Pavlik 894aa8d61f st/oxr: Rename some types, functions, and variables for clarity 2020-06-15 17:08:05 -05:00
Ryan Pavlik 6fe801e766 st/oxr: Re-use a structure 2020-06-15 17:04:00 -05:00
Ryan Pavlik 6be05e2107 st/oxr: Factor out source cache teardown function 2020-06-15 17:04:00 -05:00
Ryan Pavlik 4a4bed8df4 st/oxr: Handle treadmill user path 2020-06-15 17:04:00 -05:00
Ryan Pavlik 2a2157af66 st/oxr: Clean up comments 2020-06-15 10:46:29 -05:00
Jakob Bornecrantz cbb91904e9 st/oxr: Remove old validation that's now done in api function 2020-06-14 23:01:13 +01:00
Jakob Bornecrantz 2dcf4a819b st/oxr: Improve xrSuggestInteractionProfileBindings validation of input 2020-06-14 23:01:13 +01:00
Jakob Bornecrantz e4a4a5e7b2 st/oxr: Use correct enum type when converting from eye visibility NFC 2020-06-13 13:58:14 +01:00
Jakob Bornecrantz 45c977d199 xrt: Introduce xrt_sub_image and xrt_layer_projection_view_data 2020-06-09 20:32:53 +01:00
Jakob Bornecrantz 259bd52dbd st/oxr: Convert layer bits from OpenXR to XRT 2020-06-09 19:04:48 +00:00
Jakob Bornecrantz 55e026245a xrt: Use new xrt_layer_data in layer functions 2020-06-09 19:04:48 +00:00
Ryan Pavlik 435f6c5c89 build: Allow enabling inter-procedural optimization in CMake builds, if supported. 2020-06-09 12:03:08 -05:00
Christoph Haag bc995e3aab ipc: Return XR_ERROR_INSTANCE_LOST instead of SIGABRT on the client side 2020-06-05 16:06:32 +02:00
Christoph Haag cc9b415a8f xrt: Add xrt_result_t return type to many functions
Many functions returned void and were assumed to always succeed, and some functions
returned only a bool to indicate vague success/failure.

Now that these functions get piped over IPC all of them have to be able to indicate
an IPC failure like for example an unreachable service.

With the xrt_result_t return type they now have the opportunity to report various
types of failures.
2020-06-05 16:06:32 +02:00
Jakob Bornecrantz dab96ef356 st/oxr: Validate view configuration type 2020-06-04 21:56:08 +00:00
Ryan Pavlik c39df58763 st/oxr: Additional doxygen improvements. 2020-06-03 17:26:35 -05:00
Ryan Pavlik bc6cc85e7d xrt: Improve doxygen documentation. 2020-06-03 16:28:18 -05:00
Jakob Bornecrantz 9f8761bd50 st/oxr: Tiny improvement to validation message 2020-06-03 09:30:18 +01:00
Jakob Bornecrantz 3fde4a0651 st/oxr: Update copyright in files touched by this MR 2020-06-03 09:30:18 +01:00
Jakob Bornecrantz a5d64e6565 st/oxr: Some minor spelling changes 2020-06-03 09:30:18 +01:00
Jakob Bornecrantz a36753443a st/oxr: Make all oxr_error calls uniform and improve output 2020-06-03 09:30:18 +01:00
Jakob Bornecrantz f4fadc6f55 st/oxr: Validate xrSuggestInteractionProfileBindings better 2020-06-03 09:30:18 +01:00
Jakob Bornecrantz 6ff4b23a76 st/oxr: Add a lightweight function to test for XrPath validness 2020-06-03 09:30:18 +01:00
Jakob Bornecrantz 2b60f70d30 st/oxr: Validate attachmentness of action sets and actions better 2020-06-03 09:30:18 +01:00
Jakob Bornecrantz 6fc410dadd st/oxr: Do dup checking on actions and action sets 2020-06-03 09:30:18 +01:00
Jakob Bornecrantz e5c9636f10 st/oxr: Correct the error messages on sub action paths errors 2020-06-03 09:30:18 +01:00
Jakob Bornecrantz 6d61b9dec2 st/oxr: Correct localized name validation 2020-06-03 09:30:18 +01:00
Jakob Bornecrantz a69cae7516 st/oxr: Improve subImage bounds checking 2020-06-03 09:30:18 +01:00
Jakob Bornecrantz 981bae8d0a st/oxr: Return correct error on bad sub action path 2020-06-02 13:02:04 +01:00
Jakob Bornecrantz 00818881de st/oxr: Use correct path for gamepad 2020-06-02 13:02:04 +01:00
Jakob Bornecrantz 57af7a7ce4 st/oxr: Correctly wait with emitting sync event 2020-06-02 13:02:04 +01:00
Jakob Bornecrantz f0e160f45c st/oxr: Improve the xrGetReferenceSpaceBoundsRect stub-ness 2020-06-02 13:02:04 +01:00
Jakob Bornecrantz d693bc2ef9 st/oxr: Enforce static swapchain acquire semantics 2020-06-02 13:02:04 +01:00
Jakob Bornecrantz cdfd03a762 st/oxr: Overhaul the acquire, wait, release handling 2020-06-02 13:02:04 +01:00
Jakob Bornecrantz b3523a7259 st/oxr: Protoct event queue with a mutex 2020-06-02 13:02:04 +01:00
Jakob Bornecrantz 76e4092e30 st/oxr: Purge event queue of destroyed sessions 2020-06-02 13:02:04 +01:00
Jakob Bornecrantz 185036489c st/oxr: Ensure get gfx requirements has been called 2020-06-02 13:02:04 +01:00
Jakob Bornecrantz 12d78144f6 st/oxr: Verify XrViewConfigurationType in xrEnumerateEnvironmentBlendModes 2020-06-02 13:02:04 +01:00
Jakob Bornecrantz fb867b02c3 xrt: Remove array_size field on xrt_swapchain 2020-06-02 13:02:04 +01:00
Christoph Haag f68252bfbe st/oxr: Check quadlayer swapchain for NULL 2020-06-01 18:38:54 +02:00
Christoph Haag 6045742561 st/oxr: Translate relation_flags in oxr_space_locate() 2020-05-29 01:46:42 +02:00
Christoph Haag 7fe0f3610b st/oxr: Fill entire xrt_space_relation in oxr_xdev_get_pose_at, not just pose
In particular the relation_flags indicate whether the pose is valid or a fallback pose.
2020-05-29 01:25:57 +02:00
Christoph Haag f10b341f57 st/oxr: Don't assert on invalid pose
ensure_valid_position_and_orientation() inserts fallback poses when
driver reported poses are invalid.
2020-05-29 01:09:54 +02:00
Christoph Haag c9b692903c st/oxr: Don't indiscriminately set orientation & position to valid in oxr_space_action_relation() 2020-05-29 01:02:31 +02:00
Christoph Haag 3bdc57c4b3 st/oxr: Don't indiscriminately set orientation & position to valid in ensure_valid_position_and_orientation() 2020-05-29 00:57:35 +02:00
Jakob Bornecrantz 03f802de77 st/oxr: Correctly validate time in xrLocateSpace 2020-05-28 22:56:59 +01:00
Jakob Bornecrantz dd04379209 st/oxr: Now that layers are supported up the max layers to what the spec requires 2020-05-28 22:56:59 +01:00
Jakob Bornecrantz 7cd9dfabc8 st/oxr: Translate swapchain usage flags 2020-05-28 15:50:47 +01:00
Jakob Bornecrantz 23b882df08 st/oxr: Write out pose values on failure, better say which layer failed and also check projection layer poses 2020-05-28 15:50:47 +01:00
Ryan Pavlik 293ec1e6dd st/p: Use helper functions for xrt_device 2020-05-27 18:40:56 -05:00
Ryan Pavlik 011a68704c st/gui: Use helper functions for xrt_device 2020-05-27 18:40:56 -05:00
Ryan Pavlik 1438541147 st/gui: Port to using xrt_instance, instead of xrt_prober directly. 2020-05-27 18:40:56 -05:00
Ryan Pavlik c42675437b st/gui: Remove no-longer-needed timekeeping. 2020-05-27 18:40:56 -05:00
Jakob Bornecrantz efd35da334 st/oxr: Correctly translate XrSwapchainCreateFlags 2020-05-27 21:21:00 +01:00
Jakob Bornecrantz 0aeb2ccfb2 st/oxr: Turn XrPaths into atoms 2020-05-27 21:21:00 +01:00
Jakob Bornecrantz 7cf5edbf87 st/oxr: Now that IPC correctly wait frames check predicted display for zero 2020-05-27 18:12:26 +01:00
Jakob Bornecrantz 51545411f9 st/oxr: Validate time better xrConvertTimeToTimespecTimeKHR 2020-05-27 18:12:26 +01:00
Jakob Bornecrantz ef41cf2088 u/time: Use a very large hammer to "fix" time_state 2020-05-27 17:50:06 +01:00
Jakob Bornecrantz 4039dc7096 st/oxr: Validate some internal state and improve error message 2020-05-26 19:34:49 +01:00
Christoph Haag 41e3a6fd17 st/oxr: error on displayTime <= 0 in xrEndFrame 2020-05-26 19:34:49 +01:00
Jakob Bornecrantz 589a4ad3e9 st/oxr: Better printing of envBlendMode errors 2020-05-26 19:34:49 +01:00
Christoph Haag 4ea17ce7be st/oxr: Always error on unsupported blend mode
The spec requires always returning an error if the blend mode is unsupported:

XR_ERROR_ENVIRONMENT_BLEND_MODE_UNSUPPORTED must be returned if
XrFrameEndInfo::environmentBlendMode is not supported.
2020-05-26 19:34:49 +01:00
Ryan Pavlik 3624c17754 st/oxr: Fix some warnings by initializing variables. 2020-05-26 11:25:03 -05:00
Ryan Pavlik 0f7832f2c8 st/p: Fix warnings when building without OpenCV 2020-05-26 11:21:09 -05:00
Jakob Bornecrantz 98d11709fb st/oxr: Remove head offset when submitting layers 2020-05-26 11:33:58 +01:00
Lubosz Sarnecki eab3cac623 st/oxr: Verify valid swapchain array index for quads. 2020-05-26 11:33:58 +01:00