Jakob Bornecrantz
2b8c835b68
xrt: Introduce xrt_system_compositor
2021-01-20 15:04:09 +00:00
Christoph Haag
9481013081
comp: add VkDisplayKHR window backend
...
Must be activated/selected with an env var for now: XRT_COMPOSITOR_FORCE_VK_DISPLAY=2
2021-01-19 17:00:46 +00:00
Christoph Haag
5e8338a6de
comp: Render with pose for next display time, not last
2021-01-15 18:25:27 +01:00
Jakob Bornecrantz
2b996f30c4
xrt: Reflow after column change
2021-01-15 13:50:32 +00:00
Jakob Bornecrantz
a5560f8363
c/main: Remove unused field
2021-01-14 12:30:54 +00:00
Christoph Haag
ad1e809dfc
comp: Extend nvidia VK_ERROR_INITIALIZATION_FAILED message
...
The real cause for this failure seems to be an extended desktop to the direct mode
display, not the allowhmd setting.
2021-01-13 23:51:36 +01:00
Christoph Haag
f684ae95d1
comp: Fix depth-stencil image validation warning
...
Depth-only formats must use *only* VK_IMAGE_ASPECT_DEPTH_BIT.
Depth-stencil formats must use both VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT.
2021-01-13 20:39:20 +01:00
Lubosz Sarnecki
b005f4e2fa
comp/vk: Guard VkCommandBuffer usage with command pool mutex.
...
Lock all queue submits with 2 mutexes using a new vk_locked_submit
function.
2021-01-13 12:42:26 +01:00
Lubosz Sarnecki
fc3b7fef25
comp/vk: Lock command pool calls with a mutex.
...
This patch resolves multithreading issues as detected by the Vulkan
validation when running the OpenXR CTS using OpenGL.
2021-01-13 12:33:15 +01:00
Lubosz Sarnecki
c97404e873
comp/vk_client: Improve error messages.
...
As we use u_logging here, new lines are redundant. Also showing the
VkError code is handy.
2021-01-13 12:33:15 +01:00
Lubosz Sarnecki
cc44816026
comp/vk: Put queue mutex around vkDeviceWaitIdle calls.
2021-01-13 12:33:15 +01:00
Lubosz Sarnecki
9a9d46b85a
comp/vk: Lock our only VkQueue with a mutex.
...
This resolved mutlithreading issues as seen in the `multithreading` test
of the OpenXR CTS.
This patch fixes the test on Vulkan Android and resolves Vulkan
validation errors when running on Linux with OpenGL.
2021-01-13 12:33:15 +01:00
Jakob Bornecrantz
eea8036e91
c/client: Ensure that EGL_ANDROID_native_fence_sync
2021-01-11 16:50:02 +00:00
Christoph Haag
726c752db2
comp: Add support for list of optional device extensions
...
If one of the supplied optional extensions is VK_GOOGLE_display_timing and it is
supported by the driver, vk_bundle::has_GOOGLE_display_timing will be set to true.
2021-01-07 19:12:41 +01:00
Jakob Bornecrantz
15320d9ebe
c/client: Insert fence and give sync handle on layer_commit (EGL for now only)
2020-12-28 15:22:46 +00:00
Jakob Bornecrantz
32c9cb1bf3
c/main: Make sure to close sync handles on layer_commit
2020-12-28 15:22:06 +00:00
Jakob Bornecrantz
1302b07d68
xrt: Add sync_handle argument to layer_commit
2020-12-28 15:22:06 +00:00
Lubosz Sarnecki
4acab28f3f
c/client: Port printfs to static u_logging.
2020-12-28 13:04:11 +00:00
Lubosz Sarnecki
ba1d966f9f
aux/vk: Port to u_logging.
...
Fix log calls where no valid state struct was provided.
2020-12-28 13:04:11 +00:00
Boris-Chengbiao Zhou
98ef9a8ef7
comp: Fix Wayland backend
2020-12-28 04:13:22 +01:00
Lubosz Sarnecki
d0262c8613
c/comp: Fix switch fall through warning in gcc10.
2020-12-16 15:07:28 +01:00
Jakob Bornecrantz
c30c4c011d
c/main: Silence warnings and make sure that layer configs are picked up
2020-12-15 14:27:31 +00:00
Lubosz Sarnecki
200fb5aeed
c/layers: Don't build equirect code if not enabled.
2020-12-14 18:59:28 +00:00
Lubosz Sarnecki
4995854d06
c/layers: Implement equirect1 rendering.
...
Add equirect1 boilerplate, shader files, ubo and pipeline.
2020-12-14 18:59:28 +00:00
Lubosz Sarnecki
dc45a201db
c+ipc+st: Complete equirect1 boilerplate.
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
ada506513f
comp: Add XRT_COMPOSITOR_DEFAULT_FRAMERATE variable, default to 60
...
This variable only has an effect if
* The compositor is not run in direct mode (which uses the actual refresh interval of the chosen mode)
* The HMD driver does not default to a refresh ate by settting hmd->screens[0].nominal_frame_interval_ns
2020-12-10 16:36:22 +01:00
Christoph Haag
99e8416cac
comp: Hook up xcb fullscreen and display settings to variables
2020-12-10 16:33:38 +01:00
Christoph Haag
199536c575
comp: Default xcb window to VK_PRESENT_MODE_IMMEDIATE_KHR
...
VK_PRESENT_MODE_FIFO_KHR leads to unsteady 60 fps.
2020-12-10 16:33:34 +01:00
Ryan Pavlik
ee755961fc
comp: Guard more of the caps-detector with an ifdef.
2020-12-06 23:07:05 +00:00
Ryan Pavlik
8b4e3aafa5
comp: Remove unused macro
2020-12-06 23:07:05 +00:00
Ryan Pavlik
5ea9fe04a3
comp: Add comments near Vulkan extension lists about updating docs.
2020-12-06 23:07:05 +00:00
Ryan Pavlik
0cb64ce5bd
comp/main: Windows work - got a window to appear!
2020-12-06 23:07:05 +00:00
Ryan Pavlik
2743790180
comp/main: Remove *nix-only include
2020-12-06 23:07:05 +00:00
Lubosz Sarnecki
373a3096a9
c/window_android: Use cached surface from IPC.
...
Create window if activity is cached for in process.
2020-12-01 18:05:32 +01:00
Lubosz Sarnecki
ae76b5037d
c/renderer: Fix right eye viewport when not pre-rotating.
...
Scale X / Y were swapped incorrectly.
2020-12-01 15:46:21 +01:00
Lubosz Sarnecki
c4683bb059
c/renderer: Pre-rotate display for transformed surfaces.
...
This resolves VK_SUBOPTIMAL_KHR warnings when preseting the swap chain
on systems likes Android.
https://android-developers.googleblog.com/2020/02/handling-device-orientation-efficiently.html
2020-11-27 16:50:55 +01:00
Ryan Pavlik
147dcc24e0
comp/main: Fix finding M_PI
2020-11-23 14:27:21 -06:00
Ryan Pavlik
8b4c473233
comp/main: Change annotation for struct packing for MSVC compatibility.
2020-11-23 14:27:21 -06:00
Ryan Pavlik
6fbd12bde4
comp/main: near and far are keywords on Windows.
2020-11-23 14:27:21 -06:00
Ryan Pavlik
66811b436a
xrt: Have the vk_helper vk_create_device take in a list of device extensions, and fix usages.
2020-11-23 14:27:21 -06:00
Ryan Pavlik
6c2b5d6614
comp/main: Clean up lists of extensions in main compositor
2020-11-23 14:27:21 -06:00
Ryan Pavlik
69a33c642d
comp/client: Clean up Vulkan extension list, and add Windows extensions.
2020-11-23 14:18:20 -06:00
Jakob Bornecrantz
9bf58ec275
c/main: Make COMP_ERROR respect log level
2020-11-20 03:20:33 +00:00
Jakob Bornecrantz
6902f6d7a3
c/render: Change some COMP_ERROR to VK_ERROR
2020-11-20 03:20:33 +00:00
Jakob Bornecrantz
363703602e
c/main: Tidy comp_target_swapchain
2020-11-20 03:20:33 +00:00
Jakob Bornecrantz
ea723240e3
c/main: Tidy comp_android_window
2020-11-20 03:20:33 +00:00
Jakob Bornecrantz
f4c1ebe90c
c/main: Remove vk field from comp_target_swapchain
2020-11-20 03:20:33 +00:00
Jakob Bornecrantz
d60ae941f1
c/main: Remove comp_window struct
2020-11-20 03:20:33 +00:00
Jakob Bornecrantz
9302bfa028
c/main: Move c field from comp_window to comp_target
2020-11-20 03:20:33 +00:00
Jakob Bornecrantz
e8360c013d
c/main: Refactor vk_swapchain into comp_target_swapchain
2020-11-20 03:20:33 +00:00
Jakob Bornecrantz
6260248d20
c/main: Introduce comp_target struct
2020-11-20 03:20:33 +00:00
Jakob Bornecrantz
78f7ad7301
c/main: Tidy vk_swapchain a bit
2020-11-19 01:13:23 +00:00
Jakob Bornecrantz
e0a7df0f1d
st/oxr: Make sure to restore old EGL display/context/drawables when creating a EGL compositor
2020-11-15 22:47:42 +00:00
Benjamin Saunders
15a89005ca
Fix trailing space in xrGetVulkanDeviceExtensionsKHR
...
Also tweak the instance extensions definition for consistency.
2020-11-07 12:50:25 -08:00
Christoph Haag
2a00c9f09e
comp: Add basic frame timing information to trace log
2020-11-06 00:50:24 +01:00
Christoph Haag
965fa60bff
xrt: Move synchronized state test into oxr session
...
The compositor now moves immediately to visible/focused when polling.
The state tracker will generate relevant openxr state changes once the session is synchronized.
Properly working alternative to e03ee48dce
(reverted in e7643de8db
)
2020-11-04 00:37:10 +01:00
Jakob Bornecrantz
e7643de8db
c/main: Revert "Transition to visible/focused after xrEndFrame, not xrWaitFrame"
...
This reverts commit e03ee48dce
.
2020-11-03 21:04:05 +00:00
Ryan Pavlik
5f70826ba5
xrt: Add misc missing copyright/license notices
2020-11-02 17:04:51 +00:00
Christoph Haag
e03ee48dce
comp: Transition to visible/focused after xrEndFrame, not xrWaitFrame
...
The application synchronizes its frame loop by "by calling xrWaitFrame,
xrBeginFrame and xrEndFrame in a loop."
Applications can discard frames by not calling xrEndFrame. If initial
frames are discarded, we should not consider the frame loop synchronized.
Previously a sequence like
xrBeginFrame, xrWaitFrame, xrBeginFrame, xrWaitFrame, xrPollEvent, xrBeginFrame
failed because xrPollEvent the compositor emitted transitions to visible
and focused but they were not emitted in the state tracker, because the
oxr session had not internally tranisitioned to the synchronized state.
2020-10-31 20:14:49 +01:00
Lubosz Sarnecki
a8c7ac2074
c/eglimage_swapchain: Actually return created swapchain.
2020-10-28 12:12:31 -05:00
Lubosz Sarnecki
af4c6a8ba3
c/gl_client: Check if swapchain is not NULL.
2020-10-28 12:12:31 -05:00
Lubosz Sarnecki
bd107095fd
c/gl_client: Port to u_logging.
2020-10-28 12:12:31 -05:00
Lubosz Sarnecki
633b7839c2
aux/vk+comp/sc: Initialize extra structs for hardware buffer extension.
...
Fix sRGB format for Android hardware buffers.
2020-10-28 12:12:31 -05:00
Lubosz Sarnecki
3cc8793d7d
aux+comp: Add Android hardware buffer device extension.
2020-10-28 12:12:31 -05:00
Ryan Pavlik
a0bbca572d
comp: Basic Android compositor window.
...
Also makes the service feature not depend on other options:
it can be used without those other parts.
comp/window_android: Remove unused EGL code for now, as it is crashing.
comp/window_android: Use MonadoView async method to create surface.
comp/window_android: Use custom surface as intended
Co-authored-by: Lubosz Sarnecki <lubosz.sarnecki@collabora.com>
2020-10-28 09:41:30 -05:00
Lubosz Sarnecki
c64d17fa88
comp/main: Define Android extensions.
2020-10-28 09:33:46 -05:00
Lubosz Sarnecki
79fd76f68d
comp/main: Don't check for VK_KHR_display on Android.
2020-10-28 09:33:46 -05:00
Jakob Bornecrantz
09566cf5fd
c/main: Fix projection layer flags not getting set
2020-10-27 16:05:13 +00:00
Jakob Bornecrantz
cf8ca3756e
c/main: Fix leaks of samplers and tidy code
2020-10-26 22:07:12 +00:00
Lubosz Sarnecki
3195ba8351
c/main: Implement XR_KHR_composition_layer_equirect2.
2020-10-26 01:34:10 +00:00
Lubosz Sarnecki
9738b4fe93
c/shaders: Add equirect shader.
2020-10-26 01:34:10 +00:00
Lubosz Sarnecki
5777d829c6
c/comp: Init repeat sampler for swapchain images.
2020-10-26 01:34:10 +00:00
Jakob Bornecrantz
54739aff8d
c/render: Refactor out distortion rendering
2020-10-13 19:51:13 +01:00
Jakob Bornecrantz
c5741af98a
c/main: Tidy names
2020-10-13 19:17:50 +01:00
Jakob Bornecrantz
4ffc0b4144
c/main: Remove viewport_id in mesh shader
2020-10-13 19:17:50 +01:00
Jakob Bornecrantz
95bdcc0bd3
c/main: Round viewport to cover the same as scissors
2020-10-13 19:17:50 +01:00
Jakob Bornecrantz
32fd9398fe
c/main: Refactor shader loading to own file
2020-10-13 19:17:50 +01:00
Jakob Bornecrantz
1750bb672f
c/main: Remove none shaders
2020-10-08 15:02:52 +01:00
Jakob Bornecrantz
39ec39dbee
c/main: Add more logging levels
2020-10-08 14:57:59 +01:00
Jakob Bornecrantz
b5e5322f49
c/main: Use log levels
2020-10-06 20:37:01 +01:00
Lubosz Sarnecki
bbeab1da3f
c/main: Use u_logging.
...
Remove comp_compositor_print.
2020-10-06 20:04:52 +01:00
Jakob Bornecrantz
309037a445
c/client: The client compositors doesn't own the native compositor
2020-10-04 13:04:52 +01:00
Christoph Haag
c5209c5ed4
comp: Move mesh generation to comp_renderer init
...
Use none shader when XRT_DISTORTION_MODEL_NONE is set.
Fall back to none distortion if mesh generation fails or unsupported
distortion model is set.
comp_render init updates comp_settings::distortion_model.
u_compute_distortion_mesh: Don't touch xdev::distortion::preferred,
just add XRT_DISTORTION_MODEL_MESHUV mesh to xdev::distortion::models.
2020-09-30 02:05:05 +02:00
Christoph Haag
f82f247c19
comp: Rename distortion.vert to none.vert
...
After removing the other shaders, it is only used for no distortion anymore.
2020-09-30 02:05:05 +02:00
Christoph Haag
bc7a948975
comp: More replacing of binding indices with variables
2020-09-30 02:05:05 +02:00
Christoph Haag
2e7451ca5e
comp: Support only mesh and no istortion, remove pano and vive shaders
...
Also changes hardcoded binding indices into variables to make following the code easier
e.g. when adding new UBOs.
2020-09-30 02:05:04 +02:00
Christoph Haag
80f6fc9039
comp: Replace hardcoded binding indices with variables
...
Makes it easier to follow when changing code.
2020-09-30 01:30:30 +02:00
Christoph Haag
fb71c71a8c
xrt: Replace mesh generator with xdev->compute_distortion()
...
Each HMD driver now has to implement compute_distortion() which will be called
by the compositor implementation to generate a mesh (usually).
u_distortion_mesh contains implementations for the defaults (panotools, OpenHMD, vive).
Also adds compute_distortion function for Vive distortion
There are differences between OpenHMD and Panotools values, main differences for now:
* psvr has 5 pano coefficients, ohmd has 3
* psvr uses viewport size and lens center in pixels for distortion calculation, ohmd in meter
* psvr uses different distortion scaling than ohmd
2020-09-28 17:04:15 +01:00
Christoph Haag
e5683d4fde
comp: remove useless pano ubo from mesh distortion
...
It was left in as a debug measure, but is more confusing than useful,
especially with northstar directly generating a mesh and vive with its own shader.
2020-09-22 02:19:13 +02:00
Ryan Pavlik
dae3ab3a4f
xrt: Be sure to include config headers
2020-09-18 13:56:24 +01:00
Jakob Bornecrantz
8e24dda794
xrt: Remove out_timestamp argument to xrt_device::get_tracked_pose
2020-09-07 23:37:09 +01:00
Jakob Bornecrantz
855b2005f3
c/main: Use new xrt_space_graph
2020-09-07 23:33:28 +01:00
Ryan Pavlik
cb26f7255c
comp: Use the correct calloc macro
2020-08-26 11:25:43 -05:00
Jakob Bornecrantz
516212fef4
c/main: Test if a format is supported before adding to list
2020-08-26 14:28:10 +00:00
Jakob Bornecrantz
1eaf4baf91
c/main: Support 16 layers
2020-08-26 15:25:00 +01:00
Jakob Bornecrantz
1496262564
xrt: Constify compositor interface
2020-08-26 15:25:00 +01:00
Christoph Haag
8377655128
comp: Handle skipping rendering of infinite cylinder properly
...
* Setting visibility to none will make the compositor skip rendering this layer
* But do fill in some information in like layer type to ease debugging
2020-08-26 15:59:54 +02:00
Christoph Haag
aecfdfc9f9
comp: Fix typo in switch statement
2020-08-26 15:59:54 +02:00
Jakob Bornecrantz
16b9dc13e2
xrt: Correct assert for ipc data type
2020-08-25 14:55:43 +01:00