Концепция логического устройства должна отличаться от физического устройства, поскольку вам необходимо иметь возможность регистрировать расширения, функции, количество очередей и другие конструкции времени инициализации.Вы должны быть в состоянии спросить, каковы возможности физического устройства, тогда вам нужно иметь возможность построить вещь, которая использует определенное их подмножество.
Учитывая, что разделение полезно ... зачем добавлятьпроизвольное ограничение, которое говорит о том, что одно приложение может создать только одно VkDevice
из одного VkPhysicalDevice
?
В конце концов, физическое устройство уже должно быть в состоянии обслуживать несколько приложений.Каждое приложение должно иметь возможность выделять ресурсы графического процессора, и эти ресурсы должны отличаться друг от друга.Все они должны иметь возможность выполнять команды параллельно, которые не мешают друг другу (помимо использования вычислительных ресурсов).Таким образом, реализация уже должна быть в состоянии обслуживать множество мастеров, включая ОС.
Так что нет никаких причин, по которым реализация не может позволить одному приложению иметь несколько интерфейсов для этой реализации.Так что это не вопрос «необходимости».Реализации уже де-факто должны быть в состоянии это сделать, поэтому вряд ли стоит заставлять их делать то, что они уже должны делать.
Однако, если вам нужен пример того, где это может быть полезно,рассмотрим программу с архитектурой плагинов на основе DLL / SO.Программа использует Vulkan для некоторых целей.Но один из плагинов может также хотеть использовать Vulkan для каких-то целей.Они оба являются частью одного и того же процесса, но, поскольку они не пытаются визуализировать поверхности друг друга, им не нужно говорить друг с другом или знать, что другой VkDevice
даже существует.