Commit graph

557 commits

Author SHA1 Message Date
Jakob Bornecrantz 648f49f4ef c/render: Change argument order to object first 2021-11-03 13:25:15 +00:00
Jakob Bornecrantz ccc4bbcf86 c/render: Remove unused disable_atw argument 2021-11-03 13:25:15 +00:00
Jakob Bornecrantz 56f4466ffa c/render: Move shaders to render 2021-11-03 13:25:15 +00:00
Jakob Bornecrantz 8c8d72647b c/render: Refactor out timewarp matrix into util file 2021-11-03 13:25:15 +00:00
Jakob Bornecrantz 60024efba9 c/render: If we only have a projection layer skip the layer renderer 2021-11-03 13:25:14 +00:00
Jakob Bornecrantz 4ca35b8b3c c/render: Don't cache comp_rendering 2021-11-03 13:24:20 +00:00
Jakob Bornecrantz 847e322fe5 c/render: Remove stub function decls 2021-11-02 20:19:05 +00:00
Jakob Bornecrantz d8a580d875 c/render: Tidy compute rendering 2021-11-02 20:19:05 +00:00
Jakob Bornecrantz f74812f02e c/render: Refactor rendering code so target data is it's own struct. 2021-11-02 20:19:05 +00:00
Jakob Bornecrantz 08135b6365 c/shaders: Tidy and codestyle 2021-11-02 20:19:05 +00:00
Jakob Bornecrantz 0b9bf9c772 c/main: Do not go via target for compositor 2021-11-02 20:19:05 +00:00
Jakob Bornecrantz 765feb6fe1 c/main: Refactor mesh descriptor and UBO upload 2021-11-02 20:19:05 +00:00
Mario Kleiner a6185490e8 c/direct: Fix direct display RandR leased output on multi-X-Screen.
The old code assumes the HMD is always connected to a RandR
output on X-Screen 0, but this is not neccessarily the case
on multi-X-Screen setups. Use a loop to iterate over all
X-Screens outputs until the HMD output is found.

Tested on single and dual X-Screen setups, also with Oculus
Rift CV1 connected to 2nd X-Screen.

This is rather useful for porting applications from "OpenHMD Rift
on separate X-Screen for performance" to OpenXR Monado direct
mode, so one can quickly switch between Monado and OpenHMD native
without cumbersome xorg.conf + logout + login games.

Signed-off-by: Mario Kleiner <mario.kleiner.de@gmail.com>
2021-10-28 12:29:36 +00:00
Ryan Pavlik 782aa11754 comp/main: Initial wiring, but don't actually allow closing the window on Windows for now. 2021-10-15 15:29:58 -05:00
Ryan Pavlik cb3fc65f14 comp/main: Win32: Spawn a thread for our windowed output. 2021-10-15 15:13:00 -05:00
Ryan Pavlik 2790f6d29f comp: Fix windows build - near and far are keywords. 2021-10-15 10:15:16 -05:00
Ryan Pavlik 884a312011 build: Fix build with CMake before 3.14 2021-10-01 11:21:35 -05:00
Christoph Haag 2ef9e0aa61 comp: Don't disconnect from NULL wayland_display
Fixes crash when not running on wayland.
2021-09-20 13:54:36 +00:00
Jakob Bornecrantz d36eec8fbb c/main: Guard against XRT_HAVE_WAYLAND_DIRECT 2021-09-17 11:54:57 +00:00
Jakob Bornecrantz 02d67a52c5 c/main: Guard use of VK_EXT_acquire_drm_display identifier 2021-09-17 11:54:57 +00:00
Jakob Bornecrantz a58b8df4a9 cmake: Link with WAYLAND_LIBRARIES or SDL gets sad 2021-09-17 11:54:57 +00:00
Simon Zeni 47be806428 c/main: Implement WINDOW_DIRECT_WAYLAND 2021-09-15 18:44:18 +00:00
Jakob Bornecrantz c5c07eced2 c/render: Remove the hacks 2021-09-14 16:15:27 +00:00
Jakob Bornecrantz 5bff6f3c9b c/render: Add ATW support for compute rendering 2021-09-14 16:15:27 +00:00
Jakob Bornecrantz 3795004208 c/main: Add compute distortion rendering backend 2021-09-14 16:15:27 +00:00
Christoph Haag 79fe29f674 c/main: Use ns_to_ms helper for nominal frame interval 2021-09-13 21:28:10 +01:00
Christoph Haag 83e194e9d3 comp: Wait for release/acquire fence before destroying swapchain
Fixes validation warning when quitting Vulkan OpenXR applications
like hello_xr -G Vulkan2:

VUID-vkDestroyImage-image-01000(ERROR / SPEC): msgNum: -221078694 - Validation Error: [ VUID-vkDestroyImage-image-01000 ] Object 0: handle = 0x55d4d96e4960, type = VK_OBJECT_TYPE_DEVICE; | MessageID = 0xf2d29b5a | Cannot call vkDestroyImage on VkImage 0xcb1c7c000000001b[] that is currently in use by a command buffer. The Vulkan spec states: All submitted commands that refer to image, either directly or via a VkImageView, must have completed execution (https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VUID-vkDestroyImage-image-01000)
    Objects: 1
        [0] 0x55d4d96e4960, type: 3, name: NULL

This is an addition to commit 778515739f that
introduced this fence.
2021-09-07 11:51:03 +02:00
Christoph Haag 527efd379f comp: debug print the numeric format
helps to see which format it is when it can not be translated to a string
2021-09-03 15:32:35 +00:00
korejan 42af354f65 c/multi: Fixes some uninitialized mutexes.
Fixes some uninitialized/null mutexes that causes crash bug during the creation of the multi compositors (seen on Windows).
2021-08-21 11:34:33 +01:00
Jakob Bornecrantz 9178e0ef59 c/main: Constify argument 2021-08-17 12:04:49 +01:00
Christoph Haag 778515739f comp: Guard acquire/release with a fence
Fixes validation warning when acquiring images before the command buffer
of the previous acquire or release on the same queue has finished.

VUID-vkQueueSubmit-pCommandBuffers-00071(ERROR / SPEC): msgNum: 774851941 - Validation Error: [ VUID-vkQueueSubmit-pCommandBuffers-00071 ] Object 0: handle = 0x558634c5c750, type = VK_OBJECT_TYPE_DEVICE; | MessageID = 0x2e2f4d65 | vkQueueSubmit(): pSubmits[0].pCommandBuffers[0] VkCommandBuffer 0x558634b85a10[] is already in use and is not marked for simultaneous use. The Vulkan spec states: If any element of the pCommandBuffers member of any element of pSubmits was not recorded with the VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT, it must not be in the pending state (https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VUID-vkQueueSubmit-pCommandBuffers-00071)
    Objects: 1
        [0] 0x558634c5c750, type: 3, name: NULL
2021-08-16 15:52:57 +02:00
Christoph Haag b249af9415 comp: Bind the correct GL texture for importing memory objects 2021-08-09 15:17:25 +02:00
Christoph Haag 1b179306dc comp: Only use dedicated allocation when supported/preferred
Fixes OpenGL depth formats on Tegra
2021-08-09 15:17:25 +02:00
Jakob Bornecrantz 9d9879ca3e c/multi: Make sure there are at least some predicted data
To avoid asserts in non-service mode.
2021-07-22 17:19:45 +01:00
Christoph Haag ab209bcf18 c/main: Add return value for when asserts are disabled
It's not worth introducing a new error code for this case, just
return XRT_ERROR_VULKAN.

Fixes error with asserts disabled

../src/xrt/compositor/main/comp_compositor.c: In function 'compositor_mark_frame':
../src/xrt/compositor/main/comp_compositor.c:186:1: warning: control reaches end of non-void function [-Wreturn-type]
  186 | }
      | ^
2021-07-15 01:31:19 +02:00
Ryan Pavlik 2d20a6436c comp: Wrap a unistd include for Windows. 2021-06-15 17:37:14 -05:00
Jakob Bornecrantz ebc2208a73 c/main: Also resize on VK_SUBOPTIMAL_KHR 2021-06-15 19:45:14 +00:00
Jakob Bornecrantz 9996d686e4 c/main: Tidy 2021-06-15 19:45:14 +00:00
Jakob Bornecrantz 1eebc12780 c/main: Refactor out viewport calculation into own function 2021-06-15 19:45:14 +00:00
Jakob Bornecrantz 6d011e25d4 c/main: Give the correct queue family argument to vkGetPhysicalDeviceSurfaceSupportKHR 2021-06-15 19:45:14 +00:00
Jakob Bornecrantz f38932cb64 c/main: Tidy comp_renderer fence creation a bit 2021-06-15 19:45:14 +00:00
Jakob Bornecrantz 65ca3113f8 c/main: Allow to specifiy image usage for target images 2021-06-15 19:45:14 +00:00
Jakob Bornecrantz fd1a916e0b c/main: Tidy and add a bit of debug to comp_target_swapchain 2021-06-15 19:45:14 +00:00
Jakob Bornecrantz 0f07e5b899 c/main: Tweak swapchain formats a bit 2021-06-15 19:45:14 +00:00
Jakob Bornecrantz 928ae5b27a c/render: Add support for non-freeable descriptor pools 2021-06-15 19:45:14 +00:00
Jakob Bornecrantz 6c033658a8 c/render: Add support for storage image descriptors 2021-06-15 19:45:14 +00:00
Jakob Bornecrantz 8a7d857dde aux/vk: Add the option to handle optional device features 2021-06-15 19:45:14 +00:00
Jakob Bornecrantz 57d24ecdbb aux/vk: Make it possible to get a compute only queue 2021-06-15 19:45:14 +00:00
Jakob Bornecrantz b805742a53 c/main: Do not list VK_FORMAT_A2B10G10R10_UNORM_PACK32 as a supported format 2021-06-15 14:27:07 +00:00
Jakob Bornecrantz f9b5097134 c/client: Use the EGL compositor's display in swapchain 2021-06-02 14:26:59 +00:00
Jakob Bornecrantz 13a5036b24 c/main: Make temp_vk be a pointer 2021-05-11 16:34:10 +00:00
Jakob Bornecrantz 9b6b5b7e6a c/main: Do not copy vk_bundle 2021-05-11 16:34:10 +00:00
Jakob Bornecrantz bd6e15c70c c/main: Follow style of using vk variable for vk_bundle interactions 2021-05-11 16:34:10 +00:00
Jakob Bornecrantz 3af65d60d2 c/client: Follow style of using vk variable for vk_bundle interactions 2021-05-11 16:34:10 +00:00
Jakob Bornecrantz 35beaeead4 c/client: Add EGL comment (NFC) 2021-05-05 16:14:00 +00:00
Jakob Bornecrantz c1ac7fc679 c/client: s/comp_egl_glue.c/comp_egl_client.c (NFC) 2021-05-05 16:14:00 +00:00
Jakob Bornecrantz 3a537b8374 c/client: Tidy EGL code (NFC) 2021-05-05 16:14:00 +00:00
Jakob Bornecrantz 12489295cb c/client: Do not blindly try to restore no EGLDisplay contexts 2021-05-05 16:14:00 +00:00
Jakob Bornecrantz 41817b6e11 c/client: Tidy EGL code (NFC) 2021-05-05 16:14:00 +00:00
Jakob Bornecrantz 1af00e7cbe c/client: Fix swapchain leak 2021-04-30 21:56:09 +00:00
Jakob Bornecrantz 76ed4d16ce c/client: Tidy and lower the logging level 2021-04-28 12:25:53 +00:00
Ryan Pavlik 2dd81f53e3 comp: Port to using new zero/identity defines 2021-04-26 22:38:42 +00:00
Jakob Bornecrantz 41ad1dcf99 c/main: Better Vulkan error printing 2021-04-26 22:56:08 +01:00
Jakob Bornecrantz 159eeb81a7 c/main: Pass in preferred dimensions to create images
Fixes #120
2021-04-26 20:28:32 +00:00
Jakob Bornecrantz 9c4b41f58e c/main: Assert that preferred dimensions are somewhat valid 2021-04-26 20:28:32 +00:00
Jakob Bornecrantz 2efd2f543f c/main: Tidy code in comp_target_swapchain (NFC) 2021-04-26 20:28:32 +00:00
Jakob Bornecrantz 5915318654 c/main: Clarify in code that it is preferred dimensions (NFC) 2021-04-26 20:28:32 +00:00
Jakob Bornecrantz ceb6c8b3fe c/main: Remove trailing newline in error message (NFC) 2021-04-26 20:28:32 +00:00
Jakob Bornecrantz 846a663942 c/main: Make instance extension list more readable (NFC) 2021-04-26 20:28:32 +00:00
Jakob Bornecrantz 64093dfaaf c/main: Expose more formats 2021-04-26 20:26:30 +01:00
Jakob Bornecrantz a377fb135f c/client: Vulkan formats are listed as numbers not hex 2021-04-26 18:52:31 +00:00
Jakob Bornecrantz c1d18f9b25 c/client: Add support for more formats in GL 2021-04-26 18:52:31 +00:00
Jakob Bornecrantz 7af531a6c5 c/main: Refactor so we can do an early acquire 2021-04-21 17:56:29 +00:00
Christoph Haag c47775a95d comp: Fix warning after Vulkan 1.2.174 VK_NULL_HANDLE change
../src/xrt/compositor/main/comp_layer_renderer.c:317:17: warning: initialization of 'unsigned int' from 'void *' makes integer from pointer without a cast [-Wint-conversion]
  317 |      .subpass = VK_NULL_HANDLE,
      |                 ^~~~~~~~~~~~~~
2021-04-19 13:04:59 +02:00
Jakob Bornecrantz daff92a275 c/main: None functional refactor of renderer.
Not ment to change the functionallity of the code only reflow the code.
2021-04-17 00:12:22 +01:00
Jakob Bornecrantz 5d605c7b3f c/main: Do not create images when initing swapchain. 2021-04-16 02:27:22 +01:00
Ryan Pavlik 1521953813 c/main: Re-arrange comp_renderer to allow late init.
Co-author: Jakob Bornecrantz <jakob@collabora.com>
2021-04-16 02:27:22 +01:00
Ryan Pavlik 1cf39ec2c0 c/main: Add comp_target::has_images, and implement in comp_target_swapchain. 2021-04-16 01:51:05 +01:00
Ryan Pavlik 90192118d0 c/main: Add comp_target::check_ready, and implement in comp_target_swapchain. 2021-04-16 01:45:38 +01:00
Jakob Bornecrantz 780ec4fac9 c/main: Turn debug into spew 2021-04-16 01:45:38 +01:00
Ryan Pavlik 7c2ea1369f c/main: Normalize destroy pattern for comp_renderer. 2021-04-15 23:28:47 +01:00
Ryan Pavlik 70982e9c39 c/main: Remove unimplemented comp_renderer function. 2021-04-15 23:28:47 +01:00
Ryan Pavlik 04c9a7d892 c/main: Normalize comp_layer_renderer_destroy convention. 2021-04-15 23:28:47 +01:00
Ryan Pavlik ffe458fdba c/main: Add comp_layer_renderer docs. 2021-04-15 23:28:47 +01:00
Ryan Pavlik 80da6fe3b8 c/main: Add comp_renderer docs. 2021-04-15 23:28:47 +01:00
Ryan Pavlik ab5f9ae9d8 c/main: Add comp_target docs. 2021-04-15 23:28:47 +01:00
Ryan Pavlik 969c78efbd c/client: Fix comment. 2021-04-15 23:28:47 +01:00
Jakob Bornecrantz 7dc132a207 c/client: Set correct reference on swapchain 2021-04-13 23:21:14 +01:00
Jakob Bornecrantz b48cdfed44 c/main: Fix xrt_compositor::wait_frame 2021-04-13 16:56:17 +00:00
Jakob Bornecrantz 4507804819 c/multi: Implement xrt_compositor::wait_frame 2021-04-13 16:56:17 +00:00
Ryan Pavlik cb2710db87 comp: Improve docs on comp_target_swapchain 2021-04-13 11:46:53 -05:00
Ryan Pavlik 1e1fe01374 comp: Doc improvements. 2021-04-13 11:46:53 -05:00
Jakob Bornecrantz 1b51cbd1a7 aux/vk: Add support for VK_EXT_global_priority 2021-04-12 22:16:31 +00:00
Jakob Bornecrantz 796f3cf792 c/main: Set default logging level to INFO 2021-04-12 22:16:31 +00:00
Jakob Bornecrantz c9c362e16a c/multi: Overwrite stale scheduled frames 2021-04-12 22:16:31 +00:00
Jakob Bornecrantz b0c9f2a1d9 c/multi: Break potential long running tasks into functions for better trace_marker logging 2021-04-12 22:16:31 +00:00
Jakob Bornecrantz 95e95ba9b5 c/render: Tidy mesh shader 2021-04-12 22:16:31 +00:00
Ryan Pavlik 1ce306cb55 cmake: Fix include dir scope for comp_multi 2021-04-09 18:11:46 -05:00
Ryan Pavlik dde274b13e comp: Fix typo. 2021-04-09 18:11:52 +01:00
Jakob Bornecrantz aca09bdebf c/multi: Do not display frames before they are to be displayed
This follows the OpenXR spec that says that a frame might not be
displayed before XrFrameEndInfo::displayTime value.
2021-04-07 15:41:47 +01:00