mesa/src/vulkan
Hans-Kristian Arntzen 19dba854be wsi/x11: Rewrite implementation to always use threads.
The current implementation has many different code paths which get very
messy to reason about and maintain.

- FIFO mode worked well enough.
- IMMEDIATE did not need a thread at all, but present wait
  implementation complicated a lot of things since we had to handle
  concurrent special event reads.
- MAILBOX (and Xwayland) adds even more jank on top of this where
  have present thread, but no acquire thread, so there are tons of
  forward progress issues to consider.

In the new model, we have two threads:

- Queue thread is only responsible for receiving presents, waiting for
  them if necessary, and submitting them to X.
- Event thread pumps the special event queue and notifies
  other threads about frame completions.
- Application thread does not interact with X directly, only through
  acquire/present queues and present wait condvar.

Two threads are required to implement IMMEDIATE and MAILBOX well.
IDLE events can come back at any time and the queue thread might be
waiting for a new presentation request to come through.

This new model has the advantage that we will be able to implement
VK_EXT_swapchain_maintenance1 in a more reasonable way, since we can
just toggle the present mode per present request as all presentation
go through the same system.

Some cleanups were done as well:

- We no longer need the busy bool. Since everything goes through thread,
  we just rely on acquire/present queues.
- SW/non-MITSHM path is also moved to thread. Move acquire-specific
  logic to the thread as well.

Signed-off-by: Hans-Kristian Arntzen <post@arntzen-software.no>
Reviewed-By: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Acked-by: Adam Jackson <ajax@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26954>
2024-01-22 16:45:14 +00:00
..
device-select-layer device_select: add shortcut for MESA_VK_DEVICE_SELECT_FORCE_DEFAULT_DEVICE 2023-09-18 07:45:28 +00:00
overlay-layer util: Add align_uintptr and use it treewide to replace ALIGN that works on size_t and uintptr_t 2024-01-05 21:54:35 +00:00
registry vulkan: bump headers/registry to 1.3.274 2023-12-19 14:44:07 +00:00
runtime mesa/vulkan: use DETECT_OS_ANDROID 2024-01-18 18:45:40 +00:00
util mesa/vulkan: use a simpler path for header in trampoline gen 2024-01-18 18:45:40 +00:00
wsi wsi/x11: Rewrite implementation to always use threads. 2024-01-22 16:45:14 +00:00
meson.build vulkan/wsi: fix build when platform headers are installed in non-standard locations 2023-12-15 18:35:54 +00:00
vulkan-android.sym android/vk: drop unnecessary symbols 2023-03-04 07:41:10 +00:00
vulkan-icd-android-symbols.txt vk: be stricter about symbols check between android and other platforms 2023-03-04 07:41:10 +00:00
vulkan-icd-symbols.txt vk: be stricter about symbols check between android and other platforms 2023-03-04 07:41:10 +00:00
vulkan.sym vk: move radv's linker symbols scripts for use in all drivers 2023-03-04 07:41:10 +00:00
vulkan_api.def.in win32: Fixes 32 bits visual studio module definition files by add script gen_vs_module_defs.py 2022-04-19 19:38:47 +00:00