Commit graph

847 commits

Author SHA1 Message Date
Jakob Bornecrantz 0b2c7e207d c/multi: Use precise sleeper for scheduled frame waiting 2022-09-07 15:06:57 +00:00
Jakob Bornecrantz e21b74059c c/multi: Use wait helper to do wait frame on main loop 2022-09-07 15:06:57 +00:00
Jakob Bornecrantz 221aea883a c/multi: Use wait helper to implement wait frame 2022-09-07 15:06:57 +00:00
Jakob Bornecrantz b09aa79f4a c/multi: Improve frame timing printing a little bit 2022-09-06 18:08:10 +00:00
Simon Zeni a6c30b4083 c/main: stop allocating vkCommandBuffer each blit 2022-09-05 17:58:38 +00:00
Mateo de Mayo dfd37bba78 c/render: Fix forloop bounds innocuous typo 2022-08-31 09:50:17 -03:00
Jakob Bornecrantz 1d4c4cc4a0 c/render: Add scratch image 2022-08-25 16:58:03 +01:00
Christoph Haag 10e5e75a1d c/render: Default mock image to VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL
Since it's only used as a default/fallback read image it's
best to put it in that layout and keep it there.
2022-08-25 16:58:03 +01:00
Jakob Bornecrantz 4505bf09ff c/render: Rename scratch to mock
Can't use default as it's a keyword in C.
2022-08-25 16:58:03 +01:00
Christoph Haag eec55c5102 c/render: Put clear and distortion shaders in own sub structs 2022-08-25 16:58:03 +01:00
Jakob Bornecrantz 8b654c76cc c/render: Spelling 2022-08-25 16:58:03 +01:00
Jakob Bornecrantz 7a52814c26 c/render: Code style 2022-08-25 16:58:03 +01:00
Jakob Bornecrantz e02f47ef72 c/null: Request VK_KHR_maintenance[1|2] 2022-08-25 16:58:03 +01:00
Jakob Bornecrantz acd5655a79 c/main: Request VK_KHR_maintenance[1|2] 2022-08-25 16:58:03 +01:00
Jakob Bornecrantz 06ee685e9a c/util: Enable swapchain to be sub-classed 2022-08-24 19:56:42 +00:00
Jakob Bornecrantz d578203a8e c/util: Refactor comp_swapchain interface a bit 2022-08-24 19:56:42 +00:00
Ryan Pavlik bdcc5be476 c/client: Win32 OpenGL client compositor
Co-authored-by: Milan Jaros <milan.jaros@vsb.cz>
Co-authored-by: Jakob Bornecrantz <jakob@collabora.com>
2022-08-22 19:53:50 +00:00
Milan Jaros afe84a2c35 c/client: Swapchain for Win32 GL
Co-authored-by: Ryan Pavlik <ryan.pavlik@collabora.com>
Co-authored-by: Jakob Bornecrantz <jakob@collabora.com>
2022-08-22 19:53:50 +00:00
Ryan Pavlik dc470ca6fe c/client: Adjust minimum GL version for clients to 3.0.0. 2022-08-22 19:53:50 +00:00
Jakob Bornecrantz 2632c2239d c/multi: Start and stop the native session
This depends on the number of active app sessions.
2022-08-15 14:46:26 +00:00
Simon Zeni 778900cd3c c/main: add hmd peek window 2022-08-12 14:19:13 -04:00
Jakob Bornecrantz b6cab2fe07 c/main: Treat cube as the other optional layers 2022-08-11 13:42:17 +01:00
Simon Zeni 90f708d91c xrt: Enable XR_KHR_composition_layer_cube
Co-authored-by: Bjorn Swenson <bjorn@collabora.com>
2022-08-11 13:42:09 +01:00
Aidan Thornton 3485babd71 comp: rotate the compute compositor's distortion texture
Some devices like Android smartphones have displays which are
rotated, meaning the compositor needs to rotate its output.

Add support for this to the compute compositor by rotating the
contents of the textures it uses for distortion lookups. This
requires postponing the calculation of that texture and adding
code to recreate it if the rotation changes (which is allowed,
but unlikely to happen in practice.)
2022-08-10 12:39:44 +00:00
Ryan Pavlik 11525976fa c/client: Fix doc warning 2022-08-08 16:44:24 +00:00
Christoph Haag ee450e6f29 comp/main: Fix chosen vk display mode debug print 2022-07-27 15:04:31 +02:00
Jakob Bornecrantz 19302a5d21 c/util: Fix warning 2022-07-26 18:15:04 +00:00
Jakob Bornecrantz 086a702b79 c/main: Fix warning 2022-07-26 18:15:04 +00:00
Ryan Pavlik 3fb162ea3a c/client: Turn off depth formats for D3D11, they are breaking Vulkan right now 2022-07-26 14:45:29 +00:00
Ryan Pavlik a4d2740b4b c/client: D3D12 client compositor 2022-07-26 14:45:29 +00:00
Ryan Pavlik a9facfe671 c/client: Extract some utilities usable by D3D11 and 12 2022-07-26 14:45:29 +00:00
Ryan Pavlik 576b158a83 a/d3d: Add some d3d12 features 2022-07-26 14:45:29 +00:00
Ryan Pavlik ee26b5f575 a/d3d: Split out some d3d11 stuff from generic 2022-07-26 14:45:29 +00:00
Ryan Pavlik 79f86ff0e3 c/client: Fix swapchain leak in D3D11. 2022-07-26 14:45:29 +00:00
Ryan Pavlik 8f55f87f3d build: Let compositor util consumers get to the includes. 2022-07-26 14:45:29 +00:00
bjorn 6275c4de10 c/main: comp_renderer uses queue from vk bundle;
The vk bundle currently creates a single queue, calls vkGetDeviceQueue,
and stores it in the bundle.  There's only ever 1 queue from 1 queue
family right now, even when using the compute compositor.

It doesn't really make sense for the renderer to re-request this queue
instead of using the one in the bundle.  If we wanted to store a local
version to it, it should probably be assigned directly (i.e. r->queue =
vk->queue) to ensure that it's the same.  If we decide we want multiple
queues later, that would be a good time to add this sort of thing back.
2022-07-19 16:26:18 +00:00
Ryan Pavlik 7e4c7d8407 c/client: Resolve warnings 2022-07-14 14:17:35 +00:00
bjorn f703355761 c/main: rm unused wireframe setting; 2022-07-13 10:29:27 -07:00
Xaver Hugl 94407f6679 compositor/direct_wayland: don't warn about connector removals
The connector being withdrawn has no effect on active leases, printing a
warning is unnecessary.
2022-07-11 16:37:34 +02: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 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 0fb155b886 c/multi: Include interface header 2022-06-27 19:09:46 +01:00
Jakob Bornecrantz 23aca9c0b9 c/multi: Document multi_system_compositor 2022-06-27 18:35:40 +01:00
Moses Turner 10c72d4272 c/main: Explain why we force the blit texture to be evenly-sized (NFC) 2022-06-14 14:01:55 +01:00
Jakob Bornecrantz 4870c34485 c/util: Emulate sRGB formats with linear versions 2022-06-13 20:10:45 +01:00
Jakob Bornecrantz 022f23b26c c/client: Correctly check for sRGB format 2022-06-13 20:10:45 +01:00
Jakob Bornecrantz 6fc1e0cdce c/client: Split EGL creation functions into smaller helper functions 2022-06-13 18:24:49 +01:00
Jakob Bornecrantz 83d29cfdc7 c/client: Print error if we can not query client API type from context 2022-06-13 18:22:31 +01:00
Jakob Bornecrantz db2cec2916 c/client: Rename insert fence function to match other functions 2022-06-13 18:22:31 +01:00
Jakob Bornecrantz b56142942d c/client: Tidy and reorg flow in egl create function 2022-06-13 18:22:31 +01:00
Jakob Bornecrantz 40a62329d8 c/client: Add some sanity checking and debug print OpenGL information 2022-06-13 18:22:31 +01:00
Jakob Bornecrantz ef93c43b21 c/client: Restore context on unsupported API and better debug printing 2022-06-13 18:22:31 +01:00
Jakob Bornecrantz 1d4bf5dcd5 c/client: Log if a format conversion isn't supported 2022-06-13 18:22:31 +01:00
Jakob Bornecrantz 0cbb850462 c/util: Improve debug printing when importing swapchain 2022-06-13 18:22:31 +01:00
Jakob Bornecrantz dfa24a7829 c/main: On Android prefer RGBA over BGRA VkSwapchains
BGRA is only supported on 0.1% of devices according to GPUinfo.
2022-06-13 18:22:31 +01:00
Jakob Bornecrantz 0984cfe9e1 c/main: Print swapchain formats on debug 2022-06-12 11:09:36 +01:00
Jakob Bornecrantz ee23b6244c c/main: Use trace instead of debug for per frame message 2022-06-12 11:09:36 +01:00
Jakob Bornecrantz 53a936a720 c/main: Ask for VK_KHR_image_format_list optionally 2022-06-12 11:09:36 +01:00
Jakob Bornecrantz 0682407ec6 c/null: Ask for VK_KHR_image_format_list optionally 2022-06-12 11:09:36 +01:00
Moses Turner 633439e439 c/main: Fix rounding math and ensure even image sizes for readback 2022-06-12 00:50:28 +01:00
Moses Turner 3e87f9831d comp/main: Prettify nvidia allowlist and add Odyssey+ 2022-06-09 01:09:06 +01:00
zhibinw 9616606a2b c/client: Add protected content flag when create EGL images 2022-06-08 19:31:36 +08:00
Jakob Bornecrantz 2300e4fa57 c/main: Document cond var loop 2022-05-31 13:38:56 +00:00
Jakob Bornecrantz c976c54008 c/null: Add null compositor
Based on sample compositor code.

Co-authored-by: Jakob Bornecrantz <jakob@collabora.com>
Co-authored-by: Ryan Pavlik <ryan.pavlik@collabora.com>
2022-05-28 17:30:19 +00:00
Jakob Bornecrantz fc769347a8 c/client: Better error logging when failing to make current context 2022-05-27 15:14:59 +00:00
Simon Zeni c8b4f7c64c c/client: implement EGL context begin and end 2022-05-27 15:08:40 +00:00
bjorn d3a0f10acb c/client: rm client swapchain layout transition;
This was only there to satisfy a validation layer bug, which appears
to have since been fixed.  It doesn't make sense to transition an XR
swapchain image to PRESENT_SRC, and the client transitions from
UNDEFINED anyway when acquiring the image.

This also fixes a case where monado violates the OpenXR specification:

> The list of OpenXR functions where the OpenXR runtime may access the
> VkQueue are:
> - xrBeginFrame
> - xrEndFrame
> - xrAcquireSwapchainImage
> - xrReleaseSwapchainImage
> The runtime must not access the VkQueue in any OpenXR function that is
> not listed above or in an extension definition.
2022-05-26 17:39:02 +00:00
bjorn 2d954d84af c/render: Fix invalid synchronization when uploading images;
`queue_upload_for_first_level_and_layer` uploads pixels to an image.

It performs a layout transition, does the copy, and does another layout
transition.  There is an execution dependency between the the copy and
the second layout transition, but the memory dependency was missing.

Caught/tested via enabling synchronization validation.
2022-05-26 17:27:15 +00:00
Jakob Bornecrantz 9c44bc98fa c/multi: Document why unsetting waiting so late 2022-05-26 14:06:18 +00:00
Jakob Bornecrantz 1b7631bd54 c/multi: Also check if a semaphore or fence has been pushed in layer_begin
Closes #171
2022-05-26 14:06:18 +00:00
Jakob Bornecrantz f404cc4c50 c/multi: Document flattened out producer/consumer construct 2022-05-25 21:42:58 +01:00
Jakob Bornecrantz 2afdb79895 c/multi: Document spurious wakeups 2022-05-25 21:42:58 +01:00
Jakob Bornecrantz 72dbed3ab5 c/multi: Make sure that wait thread has started in creation
Co-authored-by: Ryan Pavlik <ryan.pavlik@collabora.com>
Co-authored-by: Jakob Bornecrantz <jakob@collabora.com>
2022-05-25 21:42:58 +01:00
Jakob Bornecrantz 3e9a5da3c6 c/multi: Ensure that only one thread waits for wait thread 2022-05-25 21:42:58 +01:00
Ryan Pavlik fd3a0a1435 c/multi: Fix condition var waiting for wait thread.
Spurious wakeups happen, have to actually have a condition
to check in a loop with the cond var wait.
2022-05-25 20:41:10 +00:00
Ryan Pavlik 596d15a50c a/d3d: Further namespace the d3d11-specific functions 2022-05-25 18:12:22 +00:00
Ryan Pavlik 4a91eb3d84 c/client: Sync/waiting in D3D11
Co-Authored-By: Jakob Bornecrantz <jakob@collabora.com>
2022-05-24 16:55:45 -05:00
Jakob Bornecrantz 037872e2b8 c/client: Include u_time.h in D3D11 compositor 2022-05-23 09:12:54 -05:00
Jakob Bornecrantz b8b42a4bcb c/client: Tidy D3D11 flip comments 2022-05-23 14:11:43 +00:00
Jakob Bornecrantz d91d6e2aa3 c/client: Do not flip projection layers in D3D11 2022-05-23 14:11:43 +00:00
Mateo de Mayo dd802f7fef c/main: Init vblank.even_thread 2022-05-21 23:50:19 -03:00
Mateo de Mayo 7a0a142dba misc: Fix some uninitialized mutexes 2022-05-21 23:31:18 -03:00
Ryan Pavlik e54d336844 c/util: Clarify that wait_image timeout is nanoseconds 2022-05-20 23:31:59 +01:00
Ryan Pavlik 1b01eb808c c/mock: Clarify that wait_image timeout is nanoseconds 2022-05-20 23:31:59 +01:00
Ryan Pavlik 1cd435f321 c/client: Clarify that wait_image timeout is nanoseconds 2022-05-20 23:31:59 +01:00
Ryan Pavlik fcc18cf839 comp: Add a basic "mock" native compositor for testing purposes 2022-05-20 22:37:15 +01:00
Ryan Pavlik 945603a8be comp/client: Initial D3D11 client compositor
Still missing image synchronization/waiting for completion.
2022-05-20 22:37:15 +01:00
Ryan Pavlik c7580c5242 c/main: Fix a condition var wait in windows win 2022-05-20 21:30:41 +00:00
Ryan Pavlik 5a81d1412a c/main: Fix Windows window backend to handle being shut down and started up again. 2022-05-20 21:30:41 +00:00
Ryan Pavlik 1fe1e8847e c/main: Get more data on our errors 2022-05-20 21:30:41 +00:00
Ryan Pavlik 795db8712b c/main: Be sure to clean up window class when done. 2022-05-20 21:30:41 +00:00
Jakob Bornecrantz 875815b55b c/main: Init comp_base as early as possible 2022-05-20 19:06:14 +01:00
Ryan Pavlik ea4c14c3aa a/os: Rename os_thread_helper_stop to os_thread_helper_stop_and_wait 2022-05-20 18:46:37 +01:00
Ryan Pavlik 4d9c3650cc c/multi: Unlock when multi system loop exits 2022-05-20 18:40:14 +01:00
Jakob Bornecrantz fee6809bc2 c/multi: Destroy threads instead of only stopping them 2022-05-20 18:40:11 +01:00
Ryan Pavlik ba42730af3 compositor: Improve word choice/clarity 2022-05-17 17:40:58 -05:00
Ryan Pavlik 25cb2e1790 c/render: Improve word choice/clarity 2022-05-17 17:40:58 -05:00
Ryan Pavlik 973b8f3b7f c/main: Improve word choice/clarity 2022-05-17 17:40:58 -05:00