软件简介
SwiftShader 是一个高性能的,基于 CPU 的 OpenGL ES 和 Direct3D 9 图形 APIs 的实现。它的目标是为高级 3D 图形提供硬件独立性。
用法
该 SwiftShader 库充当显卡驱动。
在 Windows 中,大多数应用程序可以使用被放置在与可执行文件相同的文件夹中的 SwiftShader 的 DLL 文件被制成。
在 Linux 上,LD_LIBRARY_PATH 环境变量或 - rpath 链接器选项可以被直接应用于首先在指定的目录中搜索。
原因
一些老的显卡设备没有更新驱动,甚至根本就不支持Vulkan的显卡,遇到静态链接的vulkan-1.lib文件,启动exe就会崩溃
操作
如果想使用 SwiftShader 来切换成 CPU 运算,需要将 SwiftShader 库中的 libvk_swiftshader.dll 文件重命名为 vulkan-1.dll,并放在程序所在的文件夹中。
或者,可以保留原来的 vulkan-1.dll 文件,并设置 VK_ICD_FILENAMES 环境变量指向 SwiftShader 库中的 vk_swiftshader_icd.json 文件。
如果想让程序智能地在 vulkan-1.dll 和 libvk_swiftshader.dll 之间切换,可能需要使用 Vulkan Loader 来加载不同的 ICD(Installable Client Driver)。
Vulkan Loader 是一个共享库,它可以根据系统配置和环境变量来选择合适的 ICD 来执行 Vulkan API 调用。
如果你的设备不支持 Vulkan,那么可以使用 SwiftShader 库中的 libvk_swiftshader.dll 作为 ICD,并将其注册到 Vulkan Loader 中。
这样,当程序调用 vulkan-1.dll 时,Vulkan Loader 就会自动加载 libvk_swiftshader.dll 并使用 CPU 运算。
如果您的设备支持 Vulkan,那么您可以使用其他的 ICD(例如 NVIDIA 或 AMD 的驱动程序提供的),并将其注册到 Vulkan Loader 中。
这样,当程序调用 vulkan-1.dll 时,Vulkan Loader 就会自动加载相应的 ICD 并使用 GPU 运算。
要注册 ICD 到 Vulkan Loader 中,您需要创建一个 JSON 文件来描述 ICD 的信息,并将其放在一个特定的位置或者设置 VK_ICD_FILENAMES 环境变量来指向它。
SwiftShader 库中已经提供了一个 vk_swiftshader_icd.json 文件,可以参考它来创建其他 ICD 的 JSON 文件。