Loader
vulkan loader负责将应用的API调用映射到 Vulkan Layer和 Vulkan 驱动程序(ICD)。
只要遵循 vulkan loader 接口,任何人都可以创建自己的 Vulkan Loader。你可以构建参考加载器,或从 Vulkan SDK 中获取已构建的版本。
链接到 Loader
Vulkan 头文件仅提供了 Vulkan 函数原型声明。在构建 Vulkan 应用程序时,您必须将其链接到loader库,否则将产生引用未定义的 Vulkan 函数的错误。可以使用直接和间接两种方式链接 loader,这与 “static and dynamic linking” 有点区别。
- 在编译时直接链接
- 这需要有一个构建好的 Vulkan 加载器(静态或动态库),让构建工具可以找到它。
- 构建工具(Visual Studio、CMake 等)知道如何链接到该库。
- 在运行时间接链接
- 使用动态符号表查找方式(通过系统调用,例如
dlsym
和dlopen
),应用程序可以初始化自己的调度表,这是应用程序调用 Vulkan 函数最便捷的机制。 - Volk 是一个开源的加载程序,可以帮助简化查找过程。
- 使用动态符号表查找方式(通过系统调用,例如
各平台使用说明
每个平台都可以设置自己的规则来查找 Vulkan loader。
Android
支持 Vulkan 的 Android 设备已提供了内置到操作系统中的 Vulkan loader。
Android NDK 中提供了一个 vulkan_wrapper.c/h 文件用于间接链接,这很有必要,因为 Vulkan loader程序在不同的供应商和 OEM 设备上可能不同。
Linux
Vulkan SDK 为 Linux 提供了预构建的loader程序。参考:如何在 Linux 上找到loader程序。
macOS
Vulkan SDK 为 MacOS 提供了预构建的loader程序。参考:如何在 MacOS 上找到加载程序。
Windows
Vulkan SDK 为 Windows 提供了一个预构建的加载程序。参考:如何在 Windows 上找到加载程序。