Go to file
Maik Klein e9a124d646
Update to ash 0.30.0 (#15)
* Update to ash 0.30.0

* clippy

* Replace mk_version macro
2020-03-23 11:53:19 +01:00
.github Add cargo-deny GitHub action (#11) 2020-02-05 15:06:36 +01:00
src Update to ash 0.30.0 (#15) 2020-03-23 11:53:19 +01:00
.gitignore Remove native and MoltenVK root folders 2019-06-29 00:43:13 +02:00
.gitmodules Remove MoltenVK as a submodule 2019-06-18 10:11:51 +02:00
.mergify.yml Add cargo-deny GitHub action (#11) 2020-02-05 15:06:36 +01:00
build.rs Update to ash 0.30.0 (#15) 2020-03-23 11:53:19 +01:00
Cargo.toml Update to ash 0.30.0 (#15) 2020-03-23 11:53:19 +01:00
CODE_OF_CONDUCT.md Add CoC and Contributor Guide 2019-07-10 16:45:08 +02:00
CONTRIBUTING.md Add CoC and Contributor Guide 2019-07-10 16:45:08 +02:00
deny.toml Add cargo-deny GitHub action (#11) 2020-02-05 15:06:36 +01:00
LICENSE-APACHE Add license 2019-06-05 10:25:30 +02:00
LICENSE-MIT Add license 2019-06-05 10:25:30 +02:00
README.md Upgrade to MoltenVK 1.0.38 and Xcode 11 (#7) 2019-11-06 22:06:10 +01:00

🌋 ash-molten

Build Status Latest version Docs Contributor Covenant Embark

ash-molten is built on top of ash and exposes a new entry point to statically link with MoltenVK.

Requires Xcode 11 and Mac OS 10.15 (Catalina) to compile.

Why?

  • You want to compile down to a single binary that doesn't need any enviroment variables to bet set.

  • You just want to try out MoltenVK without needing to setup the SDK.

Why not?

  • ash already supports MoltenVK via runtime linking. Runtime linking is the prefered way of using Vulkan because the loader can be updated at anytime without needing to recompile.

  • ash-molten doesn't have access to the validation layers and thefore can not output any debug information.

How?

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);

You can run the example with cargo run.

How does it work?

ash-molten links statically with MoltenVK, it then uses vkGetInstanceProcAddr to resolve all the function pointers at runtime.

Features

cargo build will clone a specific release of MoltenVK compile and statically link it with your application.

If you want to compile MoltenVK yourself, you can use the external feature. cargo build --features external requires libMoltenVK to be visible (LD_LIBRARY_PATH).

How to update

To update the version of MoltenVK uses, change the following:

  • In build.rs, change let tag = "v1.0.37" to the new MoltenVK release tag name
  • Update the crate version in Cargo.toml
    • Bump the patch version
    • Set the version metadata to the MoltenVK release.
    • E.g. 0.2.0+37 -> 0.2.1+38.

Contributing

We welcome community contributions to this project.

Please read our Contributor Guide for more information on how to get started.

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.