vkd3d/libs
Conor McCarthy 8cae046803 vkd3d: Map timeline semaphore values to fence virtual values and buffer out-of-order waits.
Strictly increasing timeline values must be mapped to fence virtual values
to avoid invalid use of Vulkan timeline semaphores. In particular, non-
increasing values and value jumps of >= 4G are permitted in d3d12.

Different virtual D3D12 command queues may map to the same Vulkan queue.
If a wait of value N is submitted on one command queue, and then a signal
for >= N is submitted on another, but they are sent to the same Vk queue,
the wait will never complete. The solution is to buffer out-of-order waits
and any subsequent queue commands until an unblocking signal value is
submitted to a different D3D12 queue, or signaled on the CPU.

Buffering out-of-order waits also fixes the old fence implementation so it
is fully functional, though a bit less efficient than timeline semaphores.

Based in part on vkd3d-proton patches by Hans-Kristian Arntzen. Unlike the
vkd3d-proton implementation, this patch does not use worker threads for
submissions to the Vulkan queue.

Signed-off-by: Conor McCarthy <cmccarthy@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-05-13 18:20:10 +02:00
..
vkd3d vkd3d: Map timeline semaphore values to fence virtual values and buffer out-of-order waits. 2022-05-13 18:20:10 +02:00
vkd3d-common vkd3d-shader/sm1: Introduce a parser for the legacy D3D byte-code format. 2021-10-06 18:35:44 +02:00
vkd3d-shader vkd3d-shader/hlsl: Handle over/underflow when parsing integer literals. 2022-05-12 19:33:56 +02:00
vkd3d-utils vkd3d-utils: Simplify handling of shader messages a bit. 2022-03-07 16:30:44 +01:00
.gitignore libs/vkd3d: Trace build version. 2018-06-27 22:43:49 +02:00