#vulkan #metal #macos #api-bindings

bin+lib ash-molten

使用 Ash 静态链接 MoltenVK 进行 Mac 上的 Vulkan

22 个版本 (破坏性)

0.30.0+38 2020年3月24日
0.19.0+1.2.8 2024年4月3日
0.18.0+1.2.8 2024年3月19日
0.16.0+1.2.6 2023年11月3日
0.1.0 2019年6月28日

#17 in macOS 和 iOS API

Download history 9/week @ 2024-04-18 19/week @ 2024-04-25 15/week @ 2024-05-02 19/week @ 2024-05-09 49/week @ 2024-05-16 119/week @ 2024-05-23 167/week @ 2024-05-30 167/week @ 2024-06-06 141/week @ 2024-06-13 128/week @ 2024-06-20 150/week @ 2024-06-27 185/week @ 2024-07-04 82/week @ 2024-07-11 100/week @ 2024-07-18 261/week @ 2024-07-25 41/week @ 2024-08-01

每月514次下载
6 个 crate 中使用 (直接使用 3 个)

MIT/Apache

30KB
553

🌋 ash-molten

使用 MoltenVK 静态链接

Embark Embark Crates.io Docs dependency status Build status

ash-molten 基于 ash 构建,并暴露了一个新的入口点以静态链接到 MoltenVK

编译需要 Xcode 14 和 Mac OS 10.15 (Catalina)。

为什么?

  • 你想要编译成一个不需要设置任何环境变量的单一可执行文件。
  • 你只想尝试 MoltenVK,而不需要设置 SDK。

为什么不?

  • ash 已经支持通过运行时链接使用 MoltenVK。运行时链接是使用 Vulkan 的首选方式,因为加载器可以在任何时候更新,而不需要重新编译。
  • ash-molten 没有访问验证层,因此不能输出任何调试信息。

如何?

let entry = ash_molten::MoltenEntry::load().expect("Unable to load Molten");
let app_name = CString::new("Hello Static Molten").unwrap();

let appinfo = vk::ApplicationInfo::builder()
    .application_name(&app_name)
    .application_version(0)
    .engine_name(&app_name)
    .engine_version(0)
    .api_version(vk_make_version!(1, 0, 0));

let create_info = vk::InstanceCreateInfo::builder().application_info(&appinfo);
let instance = entry.create_instance(&create_info, None).expect("Instance");
let devices = instance.enumerate_physical_devices();
println!("{:?}", devices);

您可以使用以下命令运行示例:cargo run

它是如何工作的?

ash-molten 静态链接到 MoltenVK,然后使用 vkGetInstanceProcAddr 在运行时解析所有函数指针。

特性

cargo build 将克隆 MoltenVK 的特定版本,编译并与其应用程序静态链接。使用 cargo build --features pre-built 将从 ash-molten 的发布版下载预构建的 MoltenVK 版本。cargo build --features external 提供自己的 MoltenVK 库。

如果您想自己编译 MoltenVK,可以使用 external 特性。cargo build --features external 需要 libMoltenVK 可见(LD_LIBRARY_PATH)。

如何更新

要更新使用的 MoltenVK 版本,更改以下内容

  • build.rs 中,将 static VERSION = "1.1.0" 更改为新的 MoltenVK 发布 标签名
  • 更新 Cargo.toml 中的 crate 版本
    • 增加补丁版本
    • 将版本元数据设置为 MoltenVK 发布版。
    • 例如,0.2.0+1.1.9 -> 0.2.1+1.1.10
  • 在您可以提交 PR 之前,您还必须更新预构建版本。请参阅下一节。

更新预构建版本

要更新 ash-molten 使用的 MoltenVK 预构建版本,更改以下内容

  • 遵循上述步骤。
  • 从 Vulkan SDK for Mac 或自行构建 MoltenVK 下载 MoltenVK XCFramework。
    • 如果从外部来源下载,请确保 MoltenVK 版本与 static VERSION 匹配。
  • 从 XCFramework 文件夹中,对需要支持的每个平台分别压缩 MoltenVK 构建版本中的文件夹。
  • 使用标签:MoltenVK-{版本号} 创建发布版。
  • 将 zip 文件上传到带有 MoltenVK-{版本号} 标签的发布版。

贡献

Contributor Covenant

我们欢迎社区为此项目做出贡献。

有关如何开始的信息,请阅读我们的 贡献指南

许可证

以下任一许可证下授权

根据您的选择。

贡献

除非您明确表示否则,根据Apache-2.0许可证定义,您有意提交并包含在作品中的任何贡献,将如上双许可,不附加任何额外条款或条件。

依赖项

~5.5MB
~134K SLoC