Vulkan 现已在 NetBSD 上可用

Hacker News Top 新闻

摘要

一项使用 Mesa 的 Lavapipe 软件驱动为 NetBSD 带来 Vulkan 支持的项目已进入 Beta 阶段,该驱动已在 NetBSD 10.1 amd64 上构建并安装,即将提供预构建二进制文件。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/07/02 20:08

segaboy/vulkan-netbsd

来源: https://github.com/segaboy/vulkan-netbsd

vulkan-netbsd

该项目旨在将 Vulkan 软件栈(Mesa / Lavapipe)引入 NetBSD,并记录和自动化整个过程,使其可复现并可持续维护。


状态: Beta — Lavapipe Vulkan 驱动在 NetBSD 上可构建、安装并注册

里程碑达成: Mesa 在 NetBSD 10.1 amd64 上,基于 LLVM 19.1.7,完成了配置、编译、链接、安装,并注册了 Lavapipe 软件 Vulkan 驱动。驱动文件(libvulkan_lvp.so,约 17 MB)安装到 /usr/pkg/lib,其 ICD 清单(声明支持 Vulkan API 1.4)安装到 /usr/pkg/share/vulkan/icd.d/,因此系统上的 Vulkan 加载器可以发现它。ldd 检查显示所有依赖均已正确解析。整个过程——环境搭建、依赖构建、Mesa 构建与安装——完全自动化,并且可以在全新安装的系统上复现。

预编译的二进制文件即将推出。 用于构建、生成指纹并发布预构建制品(artifacts)的工具已经就位,构建脚本已具备从本地下载并安装匹配预构建版本(而非从源码构建)的能力。一旦构建机器开始发布版本,安装驱动将仅需下载,而无需数小时的构建。这是近期的工作方向。

目前尚未实现的功能:

  • 运行 Vulkan 程序需要加载器。 本工程只构建并安装 Vulkan 驱动(Lavapipe ICD)。要实际执行 Vulkan 应用程序,还需要 Vulkan 加载器(libvulkan.so.1),这是下一个需要搭建的组件。因此运行时执行尚未得到验证。
  • 仍有一个变通方案。 构建过程中应用了 -Wno-error=format 来绕过 GCC 在 NetBSD 上对 Mesa 的 %m 格式说明符的拒绝。一个更适当且可向上游提交的修复(使用 strerror(errno))仍在等待中。

随着加载器和发布流水线的完善,步骤、脚本和文档将会持续变更。


目标

NetBSD 是目前唯一不支持 Vulkan 的主流 BSD 系统。本项目的目标是:

  1. 在 NetBSD 上构建 Vulkan 软件栈(Mesa 的 Lavapipe 驱动,该驱动通过 LLVM 在 CPU 上运行,无需 GPU)。
  2. 记录所有步骤(包括失败尝试),使过程可复现。
  3. 自动化环境搭建,使一台新机器只需运行少量脚本即可达到可构建状态。
  4. 最终将必要的修复反馈给上游(Mesa 和 pkgsrc),并提供预编译二进制文件或 pkgsrc 软件包,使用户可以简单地安装 Vulkan 而无需从源码构建。

范围与环境

  • 目标操作系统: NetBSD 10.1(amd64),最小化 ISO 安装。
  • 宿主机: VirtualBox 虚拟机。
  • 仅构建目标: 本项目旨在完成 Vulkan 软件栈的编译与链接。VirtualBox 下无法使用运行时 GPU 加速;软驱动(Lavapipe)是目标。

仓库结构

vulkan-netbsd/ ├── docs/ │ ├── 01-environment-setup.md 基础系统 + pkgsrc + 构建依赖 │ ├── 02-source-dependencies.md pkgsrc 中不存在的依赖(从源码构建) │ ├── 03-mesa-build.md 配置 + 编译 Mesa(Lavapipe);移植笔记 │ └── 04-prebuilt-artifacts.md 构建一次 / 复用预构建二进制文件 └── scripts/ ├── setup-env.sh 自动化环境搭建 ├── build-glslang.sh 构建 glslang(Mesa 所需;pkgsrc 中不存在) ├── build-mesa.sh 克隆 + 配置 + 编译 Mesa(Lavapipe) ├── install-mesa.sh 安装构建好的驱动 + ICD 清单 ├── lib-artifacts.sh 共享:指纹 + 预构建获取辅助函数 └── package-artifacts.sh 将构建的二进制文件打包为发布 tarball

快速上手

在全新最小化安装的 NetBSD 10.1(amd64)上,以 root 身份执行:

``sh cd /root ftp https://raw.githubusercontent.com/segaboy/vulkan-netbsd/main/scripts/setup-env.sh sh setup-env.sh . /root/.profile

ftp https://raw.githubusercontent.com/segaboy/vulkan-netbsd/main/scripts/build-glslang.sh sh build-glslang.sh

ftp https://raw.githubusercontent.com/segaboy/vulkan-netbsd/main/scripts/build-mesa.sh sh build-mesa.sh –build

ftp https://raw.githubusercontent.com/segaboy/vulkan-netbsd/main/scripts/install-mesa.sh sh install-mesa.sh ``

build-mesa.sh --build 会克隆、配置并编译 Mesa,生成 Lavapipe Vulkan 驱动(libvulkan_lvp.so)。接着 install-mesa.sh 将该驱动及其 ICD 清单安装到 /usr/pkg 中,并验证注册。

如果构建被中断或机器崩溃,只需重新运行相同的命令——构建脚本会自动检测现有构建并从中断处恢复。

这些脚本共同将一台全新最小化安装的系统一直带到已安装并注册的 Vulkan 软件驱动。

完整、带注释的逐步说明及通过 SSH 运行的注意事项,请参见 docs/01-environment-setup.md。

贡献 / 跟随进展

这是一个个人正在进行的项目,预期会有较多变更。文档以运行记录的形式编写,记录了实际有效(以及无效)的内容,因此对于任何尝试相同移植的人来说,它也是现场笔记。

许可

本仓库中的原创工作——脚本、文档以及任何在此编写的补丁——均采用 MIT 许可(见 LICENSE 文件)。

本项目构建、安装并(可选地)重新分发第三方软件,这些软件不受该许可覆盖,并保留其自身许可:

  • Mesa —— 主要采用 MIT 许可(部分组件采用其他宽松许可)。
  • glslang —— 宽松许可(BSD 风格、Apache 2.0 和 Khronos 条款)。
  • LLVM —— Apache 2.0 with LLVM Exceptions。LLVM 通过 pkgsrc 单独安装,不由本项目重新分发。

scripts/package-artifacts.sh 生成的预构建制品会附带相应上游项目的许可文本(位于 share/licenses/ 下),以确保二进制分发时保留每个项目的归属信息。如果您发布制品,请保持这些文件完整。

相似文章

NetBSD 11.0 发布

Lobsters Hottest

NetBSD 11.0 历经长期延迟后终于发布,现已提供安装镜像和发布说明。该版本承认存在未解决的安全问题,并计划在两个月内发布后续的 11.1 版本。

破解Windows:将RADV移植到Win32

Hacker News Top

Collabora 报告了将面向 AMD GPU 的开源 RADV Vulkan 驱动从 Linux 移植到 Windows 的过程,通过逆向工程 WDDM2 接口成功运行了 Counter-Strike 2。

Valve赞助将开源RADV驱动移植到Windows的工作

Hacker News Top

Valve已赞助Collabora工程师将开源RADV Vulkan驱动移植到Microsoft Windows,初步工作已成功演示《反恐精英2》。该项目旨在利用AMD的Windows内核驱动,并通过逆向工程来适配该驱动。

OpenBSD 7.9 发布

Lobsters Hottest

OpenBSD 7.9 已发布,包含针对 arm64、amd64、luna88k、riscv64 等架构的平台特定改进,以及各种错误修复和增强的硬件支持。