跳到主要内容

Loader

vulkan loader负责将应用的API调用映射到 Vulkan Layer和 Vulkan 驱动程序(ICD)。

loader_overview.png

只要遵循 vulkan loader 接口,任何人都可以创建自己的 Vulkan Loader。你可以构建参考加载器,或从 Vulkan SDK 中获取已构建的版本。

链接到 Loader

Vulkan 头文件仅提供了 Vulkan 函数原型声明。在构建 Vulkan 应用程序时,您必须将其链接到loader库,否则将产生引用未定义的 Vulkan 函数的错误。可以使用直接和间接两种方式链接 loader,这与 “static and dynamic linking” 有点区别。

  • 在编译时直接链接
    • 这需要有一个构建好的 Vulkan 加载器(静态或动态库),让构建工具可以找到它。
    • 构建工具(Visual Studio、CMake 等)知道如何链接到该库。
  • 在运行时间接链接
    • 使用动态符号表查找方式(通过系统调用,例如dlsymdlopen),应用程序可以初始化自己的调度表,这是应用程序调用 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 上找到加载程序