vulkan-headers
Официальный набор заголовочных файлов C для Vulkan API. Эти заголовки определяют типы, константы, структуры и прототипы функций для взаимодействия с графическим и вычислительным API Vulkan. Библиотека представляет собой каноническое описание Vulkan API, производное от реестра vk.xml, и необходима для разработки любых приложений, использующих Vulkan.
Особенности
- официальные заголовки Khronos Group, синхронизированные со спецификацией Vulkan;
- поддержка всех версий Vulkan API и всех зарегистрированных расширений;
- возможность использования в C и C++ проектах;
- модульная структура: основной заголовок
vulkan.hвключает необходимые подзаголовки.
Основные компоненты
Библиотека предоставляет набор заголовочных файлов, определяющих интерфейс Vulkan API (подробнее с документацией можно ознакомиться здесь).
Основной заголовочный файл vulkan.h
Главный заголовочный файл, который включают приложения для доступа ко всему Vulkan API. В свою очередь, он автоматически подключает следующие компоненты:
vk_platform.h— платформозависимые определения и макросы;vulkan_core.h— определения ядра Vulkan API и всех зарегистрированных расширений;
Платформозависимые определения
Файл vk_platform.h определяет макросы для управления соглашениями вызовов и платформозависимым поведением. Это обеспечивает переносимость кода между различными компиляторами и операционными системами.
Основные макросы:
VKAPI_ATTR— макрос, размещаемый перед типом возвращаемого значения в объявлениях функций Vulkan;VKAPI_CALL— макрос, размещаемый после типа возвращаемого значения;VKAPI_PTR— макрос для определения типов указателей на функции;VK_USE_64_BIT_PTR_DEFINES— управляет представлением non-dispatchable handles (как 64-битные указатели или как 64-битные целые);VK_NULL_HANDLE— константа для нулевого handle (определяется какnullptr,((void*)0)или0ULLв зависимости от контекста).
Версионирование заголовков
Заголовки содержат макросы для определения версии API и самих заголовочных файлов.
Основные макросы версионирования:
VK_HEADER_VERSION— номер версии заголовочного файла (синхронизирован с patch-версией спецификации);VK_HEADER_VERSION_COMPLETE— полная версия заголовков (major.minor.patch);VK_API_VERSION_1_0,VK_API_VERSION_1_1,VK_API_VERSION_1_2,VK_API_VERSION_1_3— константы для указания версии API в приложении;VK_MAKE_API_VERSION()— макрос для создания составного номера версии из variant, major, minor и patch компонентов.
Определение типов handle
Vulkan использует два типа handle: dispatchable (для объектов диспетчеризации, таких как VkInstance и VkDevice) и non-dispatchable. Заголовки предоставляют макросы для их определения.
Макросы для handle:
VK_DEFINE_HANDLE(object)— определяет dispatchable handle тип;VK_DEFINE_NON_DISPATCHABLE_HANDLE(object)— определяет non-dispatchable handle.
Управление включением стандартных заголовков
Для контроля зависимостей от стандартных заголовков C библиотеки предоставляются следующие макросы:
VK_NO_STDINT_H— если определён, приложение должно самостоятельно определить типыuint8_t,uint32_tи др.;VK_NO_STDDEF_H— если определён, приложение должно самостоятельно определитьsize_t.