Go to file
2019-06-18 10:11:51 +02:00
src Fix clippy warnings 2019-06-07 14:56:59 +02:00
.gitignore Init 2019-06-05 10:22:29 +02:00
.gitmodules Remove MoltenVK as a submodule 2019-06-18 10:11:51 +02:00
build.rs Build molten inside the build script 2019-06-17 16:42:34 +02:00
build_molten.sh Remove MoltenVK as a submodule 2019-06-18 10:11:51 +02:00
Cargo.toml Build molten inside the build script 2019-06-17 16:42:34 +02: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 Remove MoltenVK as a submodule 2019-06-18 10:11:51 +02:00

ash-molten

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

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.

ash-molten ships with a prebuilt library which you can find in external.

MoltenVK is built via build_molten.sh. MoltenVK is added as a git submodule. See the commit hash to find out which version ash-molten uses.

Features

cargo build will automatically compile molten for you. If you want to compile molten yourself, you can use the external feature. cargo build --features external requires libMoltenVK to be visible. You have to manually set LD_LIBRARY_PATH.

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.