Можно ли делить объекты фреймбуфера между экземплярами в Vulkan?
Я пытаюсь написать простой композитор. Возможно ли в Vulkan получить доступ к объекту данных (кадровому буферу, изображению или буферу) из другого экземпляра. (т.е. передать дескриптор другому процессу). Я использую Ubuntu и пытаюсь сделать это без использования X, Wayland и т. Д. Спасибо
1 ответ
Вулканские объекты сгруппированы в строгую иерархию. Объект, который использовался для создания объекта, владеет им, и, вообще говоря, созданный объект больше не может использоваться, если вы уничтожаете объект, который использовался для его создания.
Например, vkAllocateMemory
занимает VkDevice
, Этот объект памяти выделен из этого логического устройства, и он связан с ним. Если это устройство уничтожено, вы больше не сможете его использовать. И если это устройство не принадлежит вашему приложению, вы также не сможете его использовать.
Теперь, как говорится, KHR_external_memory
расширение (и его семейство вариаций) позволяет Vulkan получать доступ к памяти между устройствами. Это работает даже между процессами; Вы можете иметь два процесса, которые создают локальные логические устройства, которые используют физические устройства с одинаковыми VkPhysicalDeviceIDPropertiesKHR::deviceUUID
, Эти логические устройства могут совместно использовать память друг с другом, но для этого необходимо использовать специальную структуру, чтобы определить, будет ли она использоваться совместно.
Обратите внимание, что этот общий доступ работает только для логических устройств, которые представляют одно и то же физическое устройство через deviceUUID
,