diff --git a/src/dxvk/dxvk_queue.cpp b/src/dxvk/dxvk_queue.cpp index 02671a096..46a594ce0 100644 --- a/src/dxvk/dxvk_queue.cpp +++ b/src/dxvk/dxvk_queue.cpp @@ -104,7 +104,13 @@ namespace dxvk { waitInfo.pSemaphores = &m_semaphore; waitInfo.pValues = &semaphoreValue; - VkResult vr = vk->vkWaitSemaphores(vk->device(), &waitInfo, ~0ull); + // 32-bit winevulkan on Proton seems to be broken here + // and returns with VK_TIMEOUT, even though the timeout + // is infinite. Work around this by spinning. + VkResult vr = VK_TIMEOUT; + + while (vr == VK_TIMEOUT) + vr = vk->vkWaitSemaphores(vk->device(), &waitInfo, ~0ull); if (vr) Logger::err(str::format("Failed to synchronize with global timeline semaphore: ", vr));