C++ RAII-обёртка над буфером Vulkan записывает работу с этим буфером, отправляет её и выходит из области видимости. Деструктор тут же вызывает vkDestroyBuffer. Отправленные команды, которые ссылаются на буфер, ещё выполняются.
Такой вызов недопустим. Vulkan требует, чтобы все отправленные команды, ссылающиеся на буфер, завершили выполнение до его уничтожения. Выход из области видимости показывает лишь, что хост закончил с обёрткой. О GPU он не говорит ничего.
Первая мысль такая. При отправке переместить обёртку в список ресурсов кадра на освобождение и уничтожать её только тогда, когда завершение этой отправки известно. Не могу решить, где должно происходить перемещение. Внутри вызова отправки? В том, кто владеет кадром? И название «список кадра» не отвечает, когда запись действительно можно отпускать.