VkExternalMemoryBufferCreateInfoKHR
предназначен для создания памяти, которая используется совместно с API или, возможно, между экземплярами или устройствами Vulkan , где базовое физическое устройство одинаково .
В моем репозитории примеров здесь есть пример использования API внешней памяти для обмена информацией об изображениях текстуры между OpenGL и Vulkan. В этом примере используются версии API Win32 HANDLE, но функциональность эквивалентна версиям FD, просто с другим типом для хранения идентификатора, который будет передаваться между различными API.
Другой вопрос касается VkExternalMemoryBufferCreateInfoKHR, который используется в VkBufferCreateInfo :: pNext
Эта структура используется для информирования экземпляра vulkan о том, что рассматриваемый буфер может использоваться совместно, что может повлиять на то, как драйвер Vulkan управляет им внутренне.
I думаю эта структура используется при создании буфера Vulkan из внешней памяти. Во время создания буфера (или изображения) вы должны использовать эту структуру, чтобы отметить, что изображение будет поддерживаться внешней памятью, а затем вместо обычного выделения вы установите pNext
для MemoryAllocateInfo в экземпляр ImportMemoryHostPointerInfoEXT
, содержащий общая ручка. Я подозреваю, что это не используется в моем примере, потому что там я использую Vulkan только для экспорта, а сторона GL выполняет импорт. Если вы используете Vulkan как для экспорта, так и для импорта, он может вам понадобиться.