It's not just used on the CS queue, but also on packet lists in deferred
contexts.
Signed-off-by: Jan Sikorski <jsikorski@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
The Khronos Vulkan loader calls into dxgi, which results in infinite recursion.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52640
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
Analogous to d71358f5e9 for the Vulkan backend.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52574
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
BOs will always be unmapped here. This is a relic from an older form of the code
where mapping was done in wined3d_context_vk_create_bo().
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This can be significantly more convenient than modifying the registry.
config_list_get_value() is based on vkd3d_debug_list_has_member() by Józef
Kucia.
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This removes tracking work entirely from the CS thread and replaces
interlocked with regular writes on the main thread. It also avoids
accessing access_count in read-write mode from two threads.
Signed-off-by: Stefan Dösinger <stefan@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This makes event results available sooner, i.e. after they are executed
by the GPU, and also moves the polling from CS to application's thread.
Signed-off-by: Jan Sikorski <jsikorski@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
We want to avoid using the poll list, for occlusion queries especially,
as in some games the number of occlusion queries can reach the hundreds.
OpenGL backend already does this by using ARB_QUERY_BUFFER_OBJECT.
We could mimic this in Vulkan too using compute shaders to accumulate
pending queries, however, unlike with OpenGL, we can also just directly
call vkGetQueryPoolResults() from the application's thread.
A downside of the approach taken here is that Vulkan queries allocated
to a wined3d_query are only released after the query is reused or
destroyed. In principle, if this ever becomes a problem, it could be
avoided by protecting the query pool with a mutex and releasing queries
after reading the results.
Signed-off-by: Jan Sikorski <jsikorski@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This is mostly to enable polling queries from the application thread by
removing the need to access the shared context.
Signed-off-by: Jan Sikorski <jsikorski@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
Its eventual purpose is to allow for skipping the poll list mechanism
by calling query_poll() in the application thread. In this patch it is
only used for when we don't have a separate CS thread.
Signed-off-by: Jan Sikorski <jsikorski@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
Based on patches by Matteo Bruni and Michael Müller.
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
For the purposes of texture2d_blt(). The main goal here is to allow uploading
from WINED3D_LOCATION_CLEARED to a multisample texture (and hence initializing
it).
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
For the purposes of wined3d_cs_map_upload_bo().
That is, if a buffer was just created or just discarded [e.g. with
wined3d_device_evict_managed_resources()], and then subsequently mapped with
WINED3D_MAP_NOOVERWRITE, treat it as if it had been mapped with
WINED3D_MAP_DISCARD instead, thus allowing the adapter_alloc_upload_bo callback
to allocate a new buffer from the client thread.
This was the source of a bunch of stalls in Grand Theft Auto V, although it's
hard to measure a difference in performance.
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
Parallel to a5efc1d5e0. Unlike with the Vulkan
backend, we cannot map chunks from the client thread, but we can access the
mapped pointer and increase the map count of already mapped chunks.
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
For download, vkCmdCopyImageToBuffer() is used, not
vkCmdCopyBufferToImage().
Signed-off-by: Connor McAdams <cmcadams@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
Currently this has no effect. Depending on whether wined3d_map_persistent()
returns true, either the client thread doesn't access the map pointer outside of
d3d map requests, or the BO is never unmapped. However, we'd like to be able to
let NOOVERWRITE maps be accelerated while still being able to unmap arbitrary
BOs at arbitrary times from the CS thread.
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>