如果设备不支持vulkan,就用swiftshader,否则就加载系统的vulkan的正确姿势(让程序能够智能的在vulkan-1.dll和libvk_swiftshader.dll之间切换)

一些老的显卡设备没有更新驱动,甚至根本就不支持Vulkan的显卡,遇到静态链接的vulkan-1.lib文件,启动exe就会崩溃。

 

你以为从别的机器拷贝这个vulkan-1.dll就可以了吗? 太傻太天真了,直接上图:

 

 

现在你的救星来了,Google出了一款SwiftShader,它是Vulkan的另外一种实现。

SwiftShader ( https://github.com/google/swiftshader )是一个高性能的 CPU-based Vulkan 实现,它可以提供高级 3D 图形的硬件独立性。

SwiftShader 的库可以作为图形驱动程序的替代品,使用它非常简单,只需将它们放在可执行文件的同一文件夹中,或者设置 VK_ICD_FILENAMES 环境变量指向 vk_swiftshader_icd.json 文件。

因此,如果想使用 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 文件。

 

posted @ 2023-03-21 11:45  重庆Debug  阅读(1073)  评论(0编辑  收藏  举报