[PATCH vkd3d 2/4] vkd3d: Create one fence worker thread per command queue.

Henri Verbeet hverbeet at gmail.com
Thu Apr 28 11:06:48 CDT 2022


On Tue, 26 Apr 2022 at 15:48, Conor McCarthy <cmccarthy at codeweavers.com> wrote:
> @@ -525,25 +427,15 @@ HRESULT vkd3d_fence_worker_start(struct vkd3d_fence_worker *worker,
>      TRACE("worker %p.\n", worker);
>
>      worker->should_exit = false;
> +    worker->queue = queue;
>      worker->device = device;
>
> -    worker->enqueued_fence_count = 0;
> -    worker->enqueued_fences = NULL;
> -    worker->enqueued_fences_size = 0;
> -
>      worker->fence_count = 0;
> -
> -    worker->vk_fences = NULL;
> -    worker->vk_fences_size = 0;
>      worker->fences = NULL;
>      worker->fences_size = 0;
> -    worker->vk_semaphores = NULL;
> -    worker->vk_semaphores_size = 0;
> -    worker->semaphore_wait_values = NULL;
> -    worker->semaphore_wait_values_size = 0;
>
> -    worker->wait_for_gpu_fences = device->use_timeline_semaphores
> -            ? vkd3d_wait_for_gpu_timeline_semaphores : vkd3d_wait_for_gpu_fences;
> +    worker->wait_for_gpu_fence = device->vk_info.KHR_timeline_semaphore
> +            ? vkd3d_wait_for_gpu_timeline_semaphore : vkd3d_wait_for_gpu_fence;

I think the original "device->use_timeline_semaphores" check was
correct. As-is, this will try to use
vkd3d_wait_for_gpu_timeline_semaphore() on fences without a timeline
semaphore for me, with predictable results.



More information about the wine-devel mailing list