Hanging during vkDeviceWaitIdle and vkWaitForFences

I have an application that seems to be suffering from a strange problem. Initially the problems only occurred when resizing, but now they simply happen regardless of any resizing, or any interaction at all. The problems seems to only occur on Linux. I am currently running the NVIDIA 470.74 stable drivers with a RTX 3080 Laptop GPU (and on desktop with a RTX 3080 Ti, running the 490 beta drivers). It occurs on both Wayland and X11, running Plasma, on Arch Linux. It does not occur on Windows, or on Linux with an AMD GPU.

Basically, when my application starts, inevitably it will block forever on waiting for the fences that govern the command buffer executions. Calling vkDeviceWaitIdle at that point will block forever as well. Waiting on timeline semaphores will block forever as well. Validation layers are completely silent.

I decided to create a whole new application, and see if i could cause the problem in a more contained way. I have succeeded at that:

https://github.com/flnhst/vulkantesting

You will find the most interesting code in src/core/engine.cpp.

My original application is multithreaded (which i thought was going to be the key to the problem), but as you can see this testing application is entirely single threaded, and i could not make it more simple if i tried.

So what am i doing wrong?

What do you mean by “hang”? Do you mean that it blocks forever?

Yes, in all cases (vkDeviceWaitIdle, fences and timeline semaphores) it blocks forever.