Что копирует vulkan API?

Когда приложение вызывает команду API Vulkan, в некоторых случаях существуют указатели на память, принадлежащие переданному приложению. Хранит ли когда-нибудь Vulkan такой указатель, переданный ему? Откуда вы знаете?

Например, давайте возьмем vkCmdWaitEvents команда. Я передаю pEvents указатель на массив VkEvent, Незамедлительно после vkCmdWaitEvents возвращает, я могу удалить этот массив? Или мне нужно подождать, пока это ожидание не будет выполнено и вмещающий CommandBuffer не будет уничтожен? то есть vulkan берет копию массива, или он просто хранит указатель на первый элемент массива? Откуда ты знаешь что?

1 ответ

Решение

Это никогда не делает.

Цитировать спецификацию

Владение памятью, принадлежащей приложению, немедленно приобретается любой командой Vulkan, в которую она передается. Владение такой памятью должно быть возвращено приложению по истечении срока действия команды, чтобы приложение могло изменить или освободить эту память, как только все команды, получившие ее, вернули.

Единственный раз, когда указатель должен быть действительным для более чем одного вызова, это когда он используется как pUserData для обратного вызова, как VkDebugReportCallbackCreateInfoEXT или обратные вызовы распределения.

Другие вопросы по тегам