On Tue, 26 Apr 2022 at 15:48, Conor McCarthy cmccarthy@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.