Commit graph

269 commits

Author SHA1 Message Date
Jakob Bornecrantz 0d05eb6cae xrt: Make some fields on xrt_gl_swapchain private 2020-07-20 13:50:01 +00:00
Jakob Bornecrantz 34843c3ffe xrt: Make some fields on xrt_vk_swapchain private 2020-07-20 13:50:01 +00:00
Ryan Pavlik 6f56d91c05 xrt: Add separate build config for OpenGL ES 2020-07-17 15:17:42 -05:00
Ryan Pavlik ebf1b01d48 comp: Improve OpenGL extension checking 2020-07-17 13:53:39 -05:00
Ryan Pavlik cb69223532 aux: Move responsibility for clearing image FD to the helper. 2020-07-17 11:46:22 -05:00
Christoph Haag 4ec6f46717 comp/gl: hack: glFlush() before committing a layer
This works around corruption in layers on several drivers caused by
writes to the OpenGL textures not having finished when used by the
compositor.

This should be properly fixed with external semaphores later.
2020-07-17 17:11:35 +02:00
Lubosz Sarnecki db3a721946 comp/shaders: Remove has_sub option.
As we have subimage rects for all layers now.
2020-07-16 19:34:33 +02:00
Lubosz Sarnecki 7e35fcb8aa comp/renderer: Provide subrect properties for projection layers. 2020-07-16 19:32:53 +02:00
Lubosz Sarnecki 984056674e comp/shaders: Sample quad layers with texture(). 2020-07-16 19:08:10 +02:00
Lubosz Sarnecki 2472deb95a comp/layers: Remove layer type from constructor.
The value was not used anyway as it is not set at creation time, but
every frame. This avoids some confusion.
2020-07-16 19:08:10 +02:00
Lubosz Sarnecki 6222de38c9 comp/shaders: Rename quad shaders to layer.
As the shader is used for all layers we have, the generic name fits
better.
2020-07-16 19:08:10 +02:00
Lubosz Sarnecki a27164ab43 comp/renderer: Render subimage properties in layer shader.
This patch passes the offset and extent properties to the layer shader
by extending the uniform. The fragment shader stage now also receives
the transformation uniform, which contains a has_sub boolean to
distinguish if the properties are set, so between projection and quad layers.

To avoid color bleeding the subimage sampling happens on a global pixel
coordinates basis as ivec2 using the GLSL texelFetch function.
Projection layers will be sampled as before.
2020-07-16 19:08:10 +02: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 c3552ed420 xrt: Rename xrt_gfx_fd.h to xrt_gfx_native.h 2020-07-15 17:19:30 -05:00
Christoph Haag ba17d35f7f comp: Create second pipeline for premultiplied alpha blending
Fixes "Source Alpha Blending" conformance test.
2020-07-15 19:21:13 +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
Benjamin Saunders 1c78dd0246 c/client: Slightly improve barriers, taken from !360
Transplanted by Jakob, all the hard spec reading done by Ben.
2020-07-14 17:25:28 +01:00
Lubosz Sarnecki a5dc31359b c/compositor: Set a window title. 2020-07-10 17:03:28 +02:00
Christoph Haag 763b122c3e comp: Print info about AllowHMD when direct mode fails on nvidia 2020-07-08 15:43:05 +02:00
Jakob Bornecrantz 8ee7086ea6 xrt: Introduce xrt_swapchain_create_info 2020-07-04 11:04:07 +00:00
Jakob Bornecrantz bf086f8be2 c/client: Add two new linear formats to OpenGL 2020-06-25 19:55:08 +00:00
Jakob Bornecrantz 0be1456b32 c/main: Add support for more linear formats and prioritize them better 2020-06-25 19:55:08 +00:00
Jakob Bornecrantz 70a6240d48 comp: Use a sRGB window swapchain 2020-06-25 19:55:08 +00:00
Jakob Bornecrantz f13f911e8a c/main: Implement prepare_session and poll_events 2020-06-25 15:48:34 +01:00
Pete Black bd5aa24463 xrt: Add multi client and overlay client support 2020-06-25 15:48:34 +01:00
Jakob Bornecrantz a26fa7bbdc c/client: Tidy whitespace 2020-06-25 12:58:22 +01:00
Jakob Bornecrantz b75f4f844b xrt: Add frame_id to compositor frame calls 2020-06-23 21:31:00 +01:00
Lubosz Sarnecki 0dbbe423d9 c/layer_renderer: Implement eye visibility. 2020-06-18 16:03:49 +01:00
Jakob Bornecrantz e76f698463 c/main: Respect alpha blending layer flag 2020-06-18 16:03:49 +01:00
Jakob Bornecrantz d778c236fe c/client: A working but non-spec conforming way to get Vulkan clients working 2020-06-16 16:33:04 +01:00
Jakob Bornecrantz 65dcc82e3a comp+ipc: Respect view space layer flag 2020-06-15 23:59:04 +00:00
Gonzalo Aguilar Delgado cdde7cd2c2 FIX #88: Add required dependencies 2020-06-13 17:05:14 +00:00
Ryan Pavlik 26ab046fba comp: Remove no-longer-needed comp_layer_quad struct.
Replaced by xrt_comp_layer_quad.
Also add some comments.
2020-06-09 16:19:39 -05:00
Ryan Pavlik 7446dc08d5 xrt: Rename output parameter of acquire_image to out_image.
As is tradition.
2020-06-09 15:56:26 -05:00
Ryan Pavlik e0e5aeceda xrt: name xrt_swapchain pointers consistently "xsc" or similar.
As is tradition.
2020-06-09 15:29:46 -05: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 55e026245a xrt: Use new xrt_layer_data in layer functions 2020-06-09 19:04:48 +00:00
Jakob Bornecrantz 320c9ab3cb ipc+comp: Use new xrt_layer_data and friends struct 2020-06-09 19:04:48 +00:00
Jakob Bornecrantz 5912964ded ipc+comp: Even more make layers the same 2020-06-09 19:04:48 +00:00
Lubosz Sarnecki 08d81e5950 ipc+comp: Make layer structs more consistent.
Add missing fields.
Sort layer struct members.
ipc/protocol: Move xdev_id and name to common layer struct.
2020-06-09 19:04:48 +00:00
Lubosz Sarnecki b1d39e7f07 xrt: Move layer enum to xrt namespace. 2020-06-09 19:04:47 +00: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 077087bb15 xrt: Introduce xrt_comp_fd_destroy to avoid some error prone casting 2020-06-04 16:37:06 +00:00
Ryan Pavlik 4ee0ad7767 comp/client: Decrease visibility of downcast helpers. 2020-06-03 16:28:36 -05:00
Ryan Pavlik cc609f5fb7 comp/client: Use helper functions, comment. 2020-06-03 16:28:36 -05:00
Ryan Pavlik bc6cc85e7d xrt: Improve doxygen documentation. 2020-06-03 16:28:18 -05:00
Lubosz Sarnecki 435d5a9b9e c/comp: Remove internal Vulkan validation init.
Instead of maintaining this chunk of code and build options, the Vulkan
loader can be used to load up validation. This has the advantage that no
layer name needs to be hard coded inside Monado, which was subject of
change recently.

Instead of using our own environment variable we can easily set the one
from the loader, e.g. `VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation`.
2020-06-03 11:17:51 +00:00
Jakob Bornecrantz fb867b02c3 xrt: Remove array_size field on xrt_swapchain 2020-06-02 13:02:04 +01:00
Jakob Bornecrantz 09baeb91bc c/swapchain: Close and remaining open FDs 2020-06-02 13:02:04 +01:00
Jakob Bornecrantz 753b910b5a c/swapchain: Don't only give out the zero index 2020-06-02 13:02:04 +01:00
Jakob Bornecrantz 5b0085f1c1 c/client: Mark consumed FDs as invalid 2020-06-02 13:02:04 +01:00
Lubosz Sarnecki 7186bddf60 c/comp+ipc: Use array indices again.
This fixes a regression introduced by the IPC and layer rendering
patchsets and passes the array_index to the correct places, so the
correct VkImageView is used instead of the one with index 0.
2020-06-02 12:42:42 +02:00
Jakob Bornecrantz 77c2b9cb5d c/main: Include <math.h> in comp_layer_renderer.c 2020-05-29 23:37:22 +01:00
Lubosz Sarnecki 1e8106c974 c/compositor: Render multiple layers without IPC.
Hook up layer rendering when XRT_FEATURE_SERVICE is not set.
2020-05-28 22:16:57 +00:00
Jakob Bornecrantz 066009c0c5 c/layer_renderer: Enable blending. 2020-05-28 22:16:57 +00:00
Lubosz Sarnecki d0539161dc c/renderer+ipc: Use layer renderer.
Make the renderer and IPC aware of multiple projection and quad layers
using the layer renderer.

Remove redundant code related to idle images and imported buffers and
command buffer rebuild, since we now always just display the layer
renderer's frame buffer.

Get view and projection properties from xrt_device.
2020-05-28 22:16:57 +00:00
Lubosz Sarnecki aedd4d9ff8 c/layers: Implement layer renderer.
Implements a layer renderer capable of handling multiple quad
and projection layers rendered in it's own Vulkan pipeline.
2020-05-28 22:16:57 +00:00
Jakob Bornecrantz aa0523e535 c/main: Only allocate one image for static swapchains 2020-05-27 21:57:48 +01:00
Ryan Pavlik 5383944f85 comp/main: Fix warning 2020-05-26 11:25:03 -05:00
Jakob Bornecrantz 129d76687e c/main: Idle VkDevice after presenting VkSwapchain 2020-05-26 11:33:58 +01:00
Jakob Bornecrantz 7ab48b691c c/main&ipc: Adopt to flip y in layers change
Client side changes by Lubosz Sarnecki.
2020-05-26 11:33:58 +01:00
Lubosz Sarnecki 9c8d0ae3cc xrt: Pass the flip y on layer per layer basis.
st/oxr: Adopt to flip y in layers change.
c/client: Adapt to flip y in layers change.
Set true for GL and false for Vulkan.
2020-05-26 11:33:58 +01:00
Jakob Bornecrantz 83ace60132 c/main: Add simple support for new layer interface 2020-05-26 11:33:58 +01:00
Jakob Bornecrantz e36e457560 c/client: Add full support for new layer interface 2020-05-26 11:33:58 +01:00
Ryan Pavlik 4638b0af7b build: Switch all CMake options to XRT_... to match what's used in source.
Also revise other small related parts of the build to make them more clear and consistent.
2020-05-12 11:52:51 -05:00
Lubosz Sarnecki 136794ab63 c/distortion: Idle before running destructor. 2020-05-11 20:22:51 +01:00
Lubosz Sarnecki 3e88a850ff c/renderer: Use vk_submit_cmd_buffer from vk_helpers. 2020-05-11 20:22:51 +01:00
Lubosz Sarnecki dc45605c84 c/renderer: Use vk_init_cmd_buffer from vk_helpers. 2020-05-11 20:22:51 +01:00
Lubosz Sarnecki f131739c00 aux/vk: Take VkExtent2D and VkImageUsageFlags in vk_create_image_simple. 2020-05-11 20:21:58 +01:00
Lubosz Sarnecki 0e5d10ca39 c/renderer: Rename comment. 2020-05-11 20:21:58 +01:00
Lubosz Sarnecki 501d8dadd4 c/main: Split nvidia test to function. 2020-05-11 20:21:58 +01:00
Christoph Haag d95c77ad54 comp: Also enable vk debug print with XRT_COMPOSITOR_PRINT_DEBUG
This is useful because it prints which GPU the compositor runs on.
2020-05-05 15:12:08 +02:00
Ryan Pavlik 457d411016 comp: Remaining 32-bit warning fixes 2020-04-29 17:47:32 -05:00
Ryan Pavlik 233c63a773 comp: Fix Wint-to-pointer-cast warnings on 32-bit.
Culprit is a Vulkan non-dispatchable handle:
Fix is simpler than for OpenXR because we aren't a Vulkan
implementation so they're all opaque to us.
2020-04-29 17:44:07 -05:00
Lubosz Sarnecki 5ba751a239 c/renderer: Expose idle image control. 2020-04-29 09:58:52 +01:00
Pete Black 8082e8dbca c/renderer: Add new reset rendering function 2020-04-29 09:58:52 +01:00
Ryan Pavlik 974c68dead xrt: Re-arrange build to avoid unnecessary includes.
Avoid unintentionally including cJSON from the source tree when using system,
etc. This adds granularity to the usage of "external" sources.
2020-04-28 21:36:46 +00:00
Ryan Pavlik 128abac9e8 comp: Codespell fixes. 2020-04-24 15:30:46 -05:00
Lubosz Sarnecki ba3b220ad2 c/renderer: Use gray as idle image color. 2020-04-22 22:00:13 +01:00
Lubosz Sarnecki d81b3797ba c/meson: Expose include directory in meson 2020-04-22 22:00:13 +01:00
Pete Black ccb1b911f6 c/client: Get the supported formats from the fd compositor 2020-04-22 22:00:13 +01:00
Jakob Bornecrantz c8b4a00482 comp: Delay swapchain destruction until a safe time, like end frame. 2020-04-15 19:57:46 +01:00
Lubosz Sarnecki 916d7708c2 c/renderer: Don't wait for device idle every frame.
Do wait on device idle when destroying the swap chain.
Don't wait on device idle multiple times in resize.

Validation on NVIDA and AMD is happy when only keeping
the two idles when resizing and destroying the swapchain.
2020-04-15 18:07:17 +02:00
Lubosz Sarnecki e477452ac6 c/renderer: Add fences for each command buffer.
Wait for fences on vkQueueSubmit.
2020-04-15 18:07:17 +02:00
Lubosz Sarnecki bda1cdaee1 c/renderer: Use only one buffer counter cache.
Use the same counter for frame and command buffers, as their number is
equal, which is retrieved from swapchain.image_count.
Use the struct member num_buffers in favor of passing it as parameter.
Reuse some command buffer functions.
2020-04-15 16:43:57 +02:00
Lubosz Sarnecki ddc7ceb214 c/renderer: Don't wait on device idle after acquiring swapchain image.
vkAcquireNextImageKHR is synchronized with the present_complete
semaphore.
2020-04-15 16:43:57 +02:00
Lubosz Sarnecki a34ad629f7 c/renderer: Don't wait idle queue after present.
This is not nesseccary as the vkQueuePresentKHR is synchronized by the
render_complete semaphore.
2020-04-15 16:38:54 +02:00
Lubosz Sarnecki 6cb99ea8bf c/renderer: Return false when vkEndCommandBuffer fails. 2020-04-15 14:00:35 +02:00
Pete Black c02f89dc18 comp: Spell check 2020-04-09 17:34:27 +01:00
Lubosz Sarnecki bf49a421ba c/direct: Use common init swapchain function.
Simplify and add error messages.
2020-04-09 16:15:17 +00:00
Lubosz Sarnecki 77207ed585 c/direct: Shorten displays member names. 2020-04-09 16:15:17 +00:00
Lubosz Sarnecki 29b771818e c/direct: Move common direct mode code to comp_window_direct.
Create code file for common direct mode code.

Make common functions take generic parameters.

Use common code in randr and nvidia back ends.

Remove redunant includes.
2020-04-09 16:15:17 +00:00
Lubosz Sarnecki 94bc4cba28 c/direct: Split NVIDIA and RandR backends.
Rename functions and structs.

Define unused function overrides separatelty.

c/window: Define new backend init methods.
2020-04-09 16:15:17 +00:00
Lubosz Sarnecki 4ddcca7abd w/direct_mode: Use same num_displays variable for NVIDIA and RandR. 2020-04-09 16:15:17 +00:00
Pete Black 80d1d29cb5 comp: Tidy and spell check 2020-04-09 14:50:35 +01:00
Jakob Bornecrantz 6fe02588f9 comp: Get num_images from the fd compositor 2020-04-08 15:20:36 +01:00
Lubosz Sarnecki 6b05c216ce c/settings: Add a bunch of display strings to NVIDIA whitelist.
Whitelist Oculus DK1, DK2 and CV1.
Whitelist Vive Pro and Valve Index.
2020-04-07 13:45:11 +00:00
Lubosz Sarnecki 56a8e80844 c/direct_mode: Print meaningful error if no display matches NVIDIA whitelist. 2020-04-07 13:45:11 +00:00
Lubosz Sarnecki 7da70568be c/direct_mode: Use VkDisplayModeParametersKHR.
In favor of own struct to determine best available mode.
The loop now also starts as one, as we do not need compare the 0th mode
it itself and returns if there is only one mode.
2020-04-07 15:38:11 +02:00
Lubosz Sarnecki 7afb012544 c/direct_mode: Check if NVIDIA path found any displays.
This helps failing earlier with an NVIDIA Optimus setup, which currently
is not supported.
2020-04-07 15:00:16 +02:00