Commit graph

1181 commits

Author SHA1 Message Date
bjorn ce498e18ed a/vk: Relax compute-only queue family check;
This changes the search to prefer compute-only queues, but consider
compute-enabled queues as acceptable fallbacks.
2022-07-11 17:33:59 +00:00
Mateo de Mayo afa7f7ade9 u/vector: Add generic wrapper for std::vector 2022-07-07 15:35:04 +00:00
bjorn 128ea42915 c/render: inline vk_command_buffer helper;
It's not really abstracting much anymore, and makes it more difficult to
see what's going on.
2022-07-01 22:01:32 +00:00
bjorn 4c09d20f80 c/render: render_resources has its own command pool;
Currently, there is a single command pool in the vk bundle, shared by
everyone.  Since command pools (and command buffers allocated from those
pools) can only be used on one thread at a time, this requires locking.
However, the main point of having these annoying command pool things in
the first place is that you can use one for each thread/lifetime/area in
the app and avoid the overhead of the locks (both computational and
cognitive).

In this change I have given the rendering bits of the compositor its own
command pool.  Instead of allocating and freeing a command buffer every
frame, a single command buffer is allocated from the pool during
initialization, and the pool is reset at the beginning of each frame.
Normally, multiple pools would need to be used, but this is not
necessary in monado because frames are serialized. The `TRANSIENT` and
`ONE_TIME_SUBMIT` flags have been added, which can allow for some driver
optimizations.  The render code no longer takes out the command pool
mutex.  The shared command pool is still there for a few remaining
places where vulkan work needs to be done outside the compositor.

I used the command buffer vulkan helpers when possible, but I would
maybe propose the idea of removing them, since they aren't really
wrapping much at this point.  The `C` macro helps a lot and it's a bit
easier to see the Vulkan details in front of you instead of needing to
switch back and forth between the helper.

Later, I think it would be cool to apply and document some constraints
like "the queue is only accessed in functions XYZ, the render_resources
command pool must only be accessed in layer_commit from 1 thread" etc.
2022-07-01 22:01:32 +00:00
bjorn 24c9dabfbb aux/vk: Add vkResetCommandPool; 2022-07-01 22:01:32 +00:00
Ryan Pavlik 0496ba9c5c aux/vk: Add additional include dirs conditionally. 2022-07-01 21:57:07 +00:00
bjorn a4e5a2d027 Support cubemap swapchains; 2022-07-01 12:23:53 -07:00
Jakob Bornecrantz 2cbad30823 u/pacing: Introduce a app pacing factory 2022-06-27 19:09:46 +01:00
Jakob Bornecrantz 6e2644dea7 u/pacing: Tidy comments 2022-06-27 19:09:46 +01:00
Ryan Pavlik e1a0486f30 gradle: Update some deps slightly to cope with gradle 7 2022-06-25 09:59:37 +08:00
Moses Turner a67d2fc28b a/util: Add u_system_devices_get_ht_device 2022-06-24 01:54:45 +01:00
Jakob Bornecrantz 218fbeae4e a/vk: Free "unused" AHardwareBuffer
It was only used for getting the format, free it until the function can
be completely rewritten to use it instead.
2022-06-21 20:47:04 +00:00
Jakob Bornecrantz 2c688a2d08 a/vk: Tidy return variable name 2022-06-21 20:47:04 +00:00
Jakob Bornecrantz 13504a29af a/vk: Return an error if ahardwarebuffer_image_allocate fails 2022-06-21 20:47:04 +00:00
Moses Turner 9651f66c4c a/util: Add clear() method to HistoryBuffer 2022-06-18 21:56:03 +01:00
Moses Turner 543a436c99 m/relation_history: Add motion estimation 2022-06-18 21:50:14 +01:00
Mateo de Mayo 326402da2a a/math: Use angle as magnitude of change in m_filter_euro_quat
Previously this was using math_quat_len which was always 1 for
these unit quaternions. This commit assumes math_quat_ln works properly which is
not exactly true at the moment and the returned angle will be twice as large.
2022-06-18 14:19:01 -03:00
Mateo de Mayo d773ab4cf2 a/math: Add pose interpolate function and others
- math_matrix_4x4_isometry_from_pose
- math_pose_from_isometry
- math_pose_interpolate
- m_vec3_equal
2022-06-18 14:19:01 -03:00
Moses Turner 3cdc9bc6cb a/gst: Explain why we require evenly-sized frames (NFC) 2022-06-14 14:01:38 +01:00
Jakob Bornecrantz a0724d8ea7 a/vk: On Android create sRGB images as linear and use views to sample with gamma 2022-06-13 20:10:45 +01:00
Jakob Bornecrantz bff61bec4b a/vk: Create image with mutable format if a sRGB on Android 2022-06-12 11:09:36 +01:00
Jakob Bornecrantz 2b29e925ea a/vk: Add check for VK_KHR_image_format_list device extension 2022-06-12 11:09:36 +01:00
Jakob Bornecrantz 4150028cb1 a/vk: Add a lot more formats vk_format_string 2022-06-12 11:09:36 +01:00
Moses Turner 18678786b7 a/gst: Complain if the image size is not divisible by two 2022-06-12 00:45:00 +01:00
Julian Petrov 1debb2e015 u/time: Implement QPC related functions 2022-06-09 14:48:27 -04:00
Julian Petrov 3b1e34ee20 a/os: Add QPC helper for getting win32 ticks 2022-06-09 14:48:27 -04:00
zhibinw 1972fd3758 a/android: Add a flag to enable AHardwareBuffer GPU sampled usage. 2022-06-08 13:02:52 +00:00
Mateo de Mayo e7c3376612 a/math: Add disabled test to show problem with current quat_exp implementation 2022-06-02 15:47:57 +00:00
Mateo de Mayo 6bc551d004 t/slam: Prioritize SLAM_CONFIG over driver calibration if set 2022-06-02 15:47:57 +00:00
Jakob Bornecrantz 93d92ec6a7 d/remote: Use vive_bindings helper library 2022-06-01 16:50:19 +01:00
Campbell Suter 0f8da1900b a/math: Fix math_pose_invert breaking on rotated poses, and add a test
Previously, math_pose_invert would apply a multiplication in the wrong
order. This lead to the position of the 'original' pose being rotated.

This patch fixes that, and adds a unit test to check this case.
2022-06-01 16:44:03 +01:00
Jakob Bornecrantz fc469e7d5f a/tracking: Document and fix cond var loop in psvr 2022-05-31 13:38:56 +00:00
Jakob Bornecrantz d2a2005212 a/tracking: Document and fix cond var loop in psmv 2022-05-31 13:38:56 +00:00
Charlton Rodda 803d679e11 st/oxr: Add dpad bindings 2022-05-31 13:25:48 +00:00
Jakob Bornecrantz 9b27fb1a2e WIP: aux/binding: Add dpad_emulation support 2022-05-31 13:25:48 +00:00
Jakob Bornecrantz 2715b0e144 aux/bindings: Fix a few pep8 errors 2022-05-31 13:25:48 +00:00
Jakob Bornecrantz a8c254a8cf aux/bindings: Refactor path verify function generation 2022-05-31 13:25:48 +00:00
Jakob Bornecrantz 037c49ce30 aux/bindings: Update generated file copyright 2022-05-31 13:25:48 +00:00
Mateo de Mayo 29aefe2ba8 misc: Use pretty printers and remove stale matrix print functions
Use u_pp_matrix_* instead.
2022-05-26 18:35:39 +00:00
Mateo de Mayo 7d80729358 u/pp: Add array and array2d f64 pretty printers 2022-05-26 18:35:39 +00:00
Mateo de Mayo 8adbdc27e5 t/slam: Allow drivers to send calibration info to SLAM tracker
There were a couple of properties that didn't fit well in our current
calibration structs and so I created t_slam_calib_extras struct to store them.
2022-05-26 18:35:39 +00:00
Mateo de Mayo 02abc49313 t/calib: Add IMU intrinsics struct 2022-05-26 18:35:39 +00:00
Mateo de Mayo 05b8e320a5 a/math: Add multiple isometry-related matrix functions
An isometry is a rigid body transform. In this context I'm using the term to
refer to 4x4 homogeneous matrices in SE(3). I.e., matrices comprised of a
3x3 rotation, a 3x1 translation, and a [0,0,0,1] last row.
This matrix represent both rigid body transforms.
2022-05-26 18:35:39 +00:00
Mateo de Mayo 8b2fa955b9 a/math: Fix matrix identities and use isometry
Isometry3f is a 4x4 matrix transform that performs only rotation and translation
(an SE(3) matrix). Its inverse can be computed trivially by Eigen compared to a
regular 4x4 transform.
2022-05-26 18:35:39 +00:00
Mateo de Mayo 2212cf95cf a/math: Add missing extern C 2022-05-26 18:35:39 +00:00
Jakob Bornecrantz 433915b0bf u/pp: Add math object printers 2022-05-26 14:10:06 +01:00
Moses Turner 5652ddd718 a/util: Fix function signature for u_builder_find_prober_device
Was this ever working?
2022-05-25 20:53:46 +00:00
bjorn d523001b6e aux/vk: Use correct image type for 3D images; 2022-05-25 20:24:17 +00:00
Ryan Pavlik 2da547ce66 a/util: Update pretty printing of results 2022-05-25 18:12:22 +00:00
Ryan Pavlik 596d15a50c a/d3d: Further namespace the d3d11-specific functions 2022-05-25 18:12:22 +00:00