Ответ 1
Чтобы API мог быть изменен без нарушения обратной совместимости.
Если версия 1.1 Vulkan хочет расширить на создание, например, пулов командного буфера, как бы это сделать? Ну, они могли бы добавить совершенно новую точку входа: vkCreateCommandPool2
. Но эта функция имела бы почти ту же подпись, что и vkCreateCommandPool
; единственное отличие состоит в том, что они берут разные структуры pCreateInfo
.
Итак, все, что вам нужно сделать, это объявить структуру VkCommandPoolCreateInfo2
. И затем объявите, что vkCreateCommandPool
может принимать один. Как реализация сообщит, какой из них вы прошли?
Поскольку первые 4 байта любой такой структуры sType
. Они могут проверить это значение. Если значение VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO
, то это старая структура. Если он VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO_2
, то он новый.
Это также упрощает расширение, чтобы полностью переопределить структуру CreateInfo
. Поле pNext
предназначено для расширения API с дополнительными параметрами. С sType
расширение может изменять существующие параметры.