Что копирует vulkan API?
Когда приложение вызывает команду API Vulkan, в некоторых случаях существуют указатели на память, принадлежащие переданному приложению. Хранит ли когда-нибудь Vulkan такой указатель, переданный ему? Откуда вы знаете?
Например, давайте возьмем vkCmdWaitEvents
команда. Я передаю pEvents
указатель на массив VkEvent
, Незамедлительно после vkCmdWaitEvents
возвращает, я могу удалить этот массив? Или мне нужно подождать, пока это ожидание не будет выполнено и вмещающий CommandBuffer не будет уничтожен? то есть vulkan берет копию массива, или он просто хранит указатель на первый элемент массива? Откуда ты знаешь что?
1 ответ
Это никогда не делает.
Владение памятью, принадлежащей приложению, немедленно приобретается любой командой Vulkan, в которую она передается. Владение такой памятью должно быть возвращено приложению по истечении срока действия команды, чтобы приложение могло изменить или освободить эту память, как только все команды, получившие ее, вернули.
Единственный раз, когда указатель должен быть действительным для более чем одного вызова, это когда он используется как pUserData
для обратного вызова, как VkDebugReportCallbackCreateInfoEXT
или обратные вызовы распределения.