Skip to content

Commit

Permalink
Add no_std support
Browse files Browse the repository at this point in the history
Also includes an explicit change to the Cargo.toml to raise the MSRV to 1.69, which ash already requires.
  • Loading branch information
i509VCB committed Dec 9, 2023
1 parent e6d80ba commit 215578b
Show file tree
Hide file tree
Showing 104 changed files with 6,216 additions and 6,115 deletions.
8 changes: 8 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,14 @@ jobs:
- uses: dtolnay/rust-toolchain@1.69.0
- run: cargo check -p ash -p ash-rewrite -p ash-window -p ash-examples --all-features

check_no_std:
name: Check ash with no_std
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@1.69.0
- run: cargo check -p ash --no-default-features

# TODO: add a similar job for the rewrite once that generates code
generated:
name: Generated
Expand Down
1 change: 1 addition & 0 deletions Changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Added `descriptor_count()` setter on `ash::vk::WriteDescriptorSet` (#809)
- Added `*_as_c_str()` getters for `c_char` pointers and `c_char` arrays (#831)
- Added `#[must_use]` to Vulkan structs to make it more clear that they are moved by the builder pattern (#845)
- Added `std` feature. Disabling this feature makes ash `no_std` (#664)

### Changed

Expand Down
5 changes: 5 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ A very lightweight wrapper around Vulkan
- [x] No validation, everything is **unsafe**
- [x] Generated from `vk.xml`
- [x] Support for Vulkan `1.1`, `1.2`, `1.3`
- [x] `no_std` support

## ⚠️ Semver compatibility warning

Expand Down Expand Up @@ -193,6 +194,10 @@ The default `loaded` cargo feature will dynamically load the default Vulkan libr

If, on the other hand, your application cannot handle Vulkan being missing at runtime, you can instead enable the `linked` feature, which will link your binary with the Vulkan loader directly and expose the infallible `Entry::linked`.

### Use in `no_std` environments

Ash can be used in `no_std` environments (with `alloc`) by disabling the `std` feature.

## Example

You can find the examples [here](https://github.com/ash-rs/ash/tree/master/ash-examples).
Expand Down
2 changes: 1 addition & 1 deletion ash-examples/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,5 @@ winit = "0.28.0"
# The examples require the validation layers, which means the SDK or
# equivalent development packages should be present, so we can link
# directly and benefit from the infallible `Entry` constructor.
ash = { path = "../ash", default-features = false, features = ["linked", "debug"] }
ash = { path = "../ash", default-features = false, features = ["linked", "debug", "std"] }
ash-window = { path = "../ash-window" }
2 changes: 1 addition & 1 deletion ash-window/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ edition = "2021"
rust-version = "1.69.0"

[dependencies]
ash = { path = "../ash", version = "0.37", default-features = false }
ash = { path = "../ash", version = "0.37", default-features = false, features = ["std"] }
raw-window-handle = "0.5"

[target.'cfg(any(target_os = "macos", target_os = "ios"))'.dependencies]
Expand Down
6 changes: 4 additions & 2 deletions ash/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,15 @@ rust-version = "1.69.0"
libloading = { version = "0.8", optional = true }

[features]
default = ["loaded", "debug"]
default = ["loaded", "debug", "std"]
# Link the Vulkan loader at compile time.
linked = []
# Support searching for the Vulkan loader manually at runtime.
loaded = ["libloading"]
loaded = ["libloading", "std"]
# Whether Vulkan structs should implement Debug.
debug = []
# Whether the standard library should be required
std = []

[package.metadata.release]
no-dev-version = true
Expand Down
9 changes: 5 additions & 4 deletions ash/src/device.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@
use crate::prelude::*;
use crate::vk;
use crate::RawPtr;
use std::mem;
use std::os::raw::c_void;
use std::ptr;
use alloc::vec::Vec;
use core::ffi::c_void;
use core::mem;
use core::ptr;

/// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkDevice.html>
#[derive(Clone)]
Expand All @@ -19,7 +20,7 @@ pub struct Device {

impl Device {
pub unsafe fn load(instance_fn: &vk::InstanceFnV1_0, device: vk::Device) -> Self {
let load_fn = |name: &std::ffi::CStr| {
let load_fn = |name: &core::ffi::CStr| {
mem::transmute((instance_fn.get_device_proc_addr)(device, name.as_ptr()))
};

Expand Down
29 changes: 16 additions & 13 deletions ash/src/entry.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,18 @@ use crate::instance::Instance;
use crate::prelude::*;
use crate::vk;
use crate::RawPtr;
use std::error::Error;
use std::ffi::CStr;
use alloc::vec::Vec;
use core::ffi::c_char;
use core::ffi::c_void;
use core::ffi::CStr;
use core::fmt;
use core::mem;
use core::ptr;

#[cfg(feature = "loaded")]
use std::ffi::OsStr;
use std::fmt;
use std::mem;
use std::os::raw::c_char;
use std::os::raw::c_void;
use std::ptr;
use alloc::sync::Arc;
#[cfg(feature = "loaded")]
use std::sync::Arc;
use std::ffi::OsStr;

#[cfg(feature = "loaded")]
use libloading::Library;
Expand Down Expand Up @@ -337,7 +338,7 @@ impl vk::StaticFn {
if val.is_null() {
return Err(MissingEntryPoint);
} else {
::std::mem::transmute(val)
::core::mem::transmute(val)
}
},
})
Expand All @@ -351,7 +352,8 @@ impl fmt::Display for MissingEntryPoint {
write!(f, "Cannot load `vkGetInstanceProcAddr` symbol from library")
}
}
impl Error for MissingEntryPoint {}
#[cfg(feature = "std")]
impl std::error::Error for MissingEntryPoint {}

#[cfg(feature = "linked")]
extern "system" {
Expand Down Expand Up @@ -380,8 +382,9 @@ mod loaded {
}
}

impl Error for LoadingError {
fn source(&self) -> Option<&(dyn Error + 'static)> {
#[cfg(feature = "std")]
impl ::std::error::Error for LoadingError {
fn source(&self) -> Option<&(dyn ::std::error::Error + 'static)> {
Some(match self {
Self::LibraryLoadFailure(err) => err,
Self::MissingEntryPoint(err) => err,
Expand Down
4 changes: 2 additions & 2 deletions ash/src/extensions/amd/buffer_marker.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use crate::vk;
use crate::{Device, Instance};
use std::ffi::CStr;
use std::mem;
use core::ffi::CStr;
use core::mem;

/// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_AMD_buffer_marker.html>
#[derive(Clone)]
Expand Down
7 changes: 4 additions & 3 deletions ash/src/extensions/amd/shader_info.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
use crate::prelude::*;
use crate::vk;
use crate::{Device, Instance};
use std::ffi::CStr;
use std::mem;
use alloc::vec::Vec;
use core::ffi::CStr;
use core::mem;

/// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_AMD_shader_info.html>
#[derive(Clone)]
Expand Down Expand Up @@ -43,7 +44,7 @@ impl ShaderInfo {
vk::ShaderInfoTypeAMD::STATISTICS => {
let mut statistics_info = mem::MaybeUninit::<vk::ShaderStatisticsInfoAMD>::uninit();
load_data(
&mut std::mem::size_of_val(&statistics_info),
&mut core::mem::size_of_val(&statistics_info),
statistics_info.as_mut_ptr().cast(),
)
.result()?;
Expand Down
5 changes: 3 additions & 2 deletions ash/src/extensions/amdx/shader_enqueue.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@ use crate::prelude::*;
use crate::vk;
use crate::RawPtr;
use crate::{Device, Instance};
use std::ffi::CStr;
use std::mem;
use alloc::vec::Vec;
use core::ffi::CStr;
use core::mem;

/// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_AMDX_shader_enqueue.html>
#[derive(Clone)]
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
use crate::prelude::*;
use crate::vk;
use crate::{Device, Instance};
use std::ffi::CStr;
use std::mem;
use core::ffi::CStr;
use core::mem;

/// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_ANDROID_external_memory_android_hardware_buffer.html>
#[derive(Clone)]
Expand Down
4 changes: 2 additions & 2 deletions ash/src/extensions/ext/acquire_drm_display.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
use crate::prelude::*;
use crate::vk;
use crate::{Entry, Instance};
use std::ffi::CStr;
use std::mem;
use core::ffi::CStr;
use core::mem;

/// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_EXT_acquire_drm_display.html>
#[derive(Clone)]
Expand Down
4 changes: 2 additions & 2 deletions ash/src/extensions/ext/buffer_device_address.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use crate::vk;
use crate::{Device, Instance};
use std::ffi::CStr;
use std::mem;
use core::ffi::CStr;
use core::mem;

#[derive(Clone)]
pub struct BufferDeviceAddress {
Expand Down
5 changes: 3 additions & 2 deletions ash/src/extensions/ext/calibrated_timestamps.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
use crate::prelude::*;
use crate::vk;
use crate::{Entry, Instance};
use std::ffi::CStr;
use std::mem;
use alloc::vec::Vec;
use core::ffi::CStr;
use core::mem;

#[derive(Clone)]
pub struct CalibratedTimestamps {
Expand Down
4 changes: 2 additions & 2 deletions ash/src/extensions/ext/debug_marker.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
use crate::prelude::*;
use crate::vk;
use crate::{Device, Instance};
use std::ffi::CStr;
use std::mem;
use core::ffi::CStr;
use core::mem;

#[derive(Clone)]
pub struct DebugMarker {
Expand Down
4 changes: 2 additions & 2 deletions ash/src/extensions/ext/debug_report.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ use crate::prelude::*;
use crate::vk;
use crate::RawPtr;
use crate::{Entry, Instance};
use std::ffi::CStr;
use std::mem;
use core::ffi::CStr;
use core::mem;

#[derive(Clone)]
pub struct DebugReport {
Expand Down
4 changes: 2 additions & 2 deletions ash/src/extensions/ext/debug_utils.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
use crate::prelude::*;
use crate::{vk, RawPtr};
use crate::{Entry, Instance};
use std::ffi::CStr;
use std::mem;
use core::ffi::CStr;
use core::mem;

#[derive(Clone)]
pub struct DebugUtils {
Expand Down
4 changes: 2 additions & 2 deletions ash/src/extensions/ext/descriptor_buffer.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
use crate::prelude::*;
use crate::vk;
use crate::{Device, Instance};
use std::ffi::CStr;
use std::mem;
use core::ffi::CStr;
use core::mem;

/// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_EXT_descriptor_buffer.html>
#[derive(Clone)]
Expand Down
6 changes: 3 additions & 3 deletions ash/src/extensions/ext/extended_dynamic_state.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
use crate::vk;
use crate::{Device, Instance};
use std::ffi::CStr;
use std::mem;
use std::ptr;
use core::ffi::CStr;
use core::mem;
use core::ptr;

#[derive(Clone)]
pub struct ExtendedDynamicState {
Expand Down
4 changes: 2 additions & 2 deletions ash/src/extensions/ext/extended_dynamic_state2.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use crate::vk;
use crate::{Device, Instance};
use std::ffi::CStr;
use std::mem;
use core::ffi::CStr;
use core::mem;

/// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_EXT_extended_dynamic_state2.html>
#[derive(Clone)]
Expand Down
4 changes: 2 additions & 2 deletions ash/src/extensions/ext/extended_dynamic_state3.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use crate::vk;
use crate::{Device, Instance};
use std::ffi::CStr;
use std::mem;
use core::ffi::CStr;
use core::mem;

/// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_EXT_extended_dynamic_state3.html>
#[derive(Clone)]
Expand Down
5 changes: 3 additions & 2 deletions ash/src/extensions/ext/full_screen_exclusive.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
use crate::prelude::*;
use crate::vk;
use crate::{Device, Instance};
use std::ffi::CStr;
use std::mem;
use alloc::vec::Vec;
use core::ffi::CStr;
use core::mem;

#[derive(Clone)]
pub struct FullScreenExclusive {
Expand Down
4 changes: 2 additions & 2 deletions ash/src/extensions/ext/hdr_metadata.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use crate::vk;
use crate::{Device, Instance};
use std::ffi::CStr;
use std::mem;
use core::ffi::CStr;
use core::mem;

/// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_EXT_hdr_metadata.html>
#[derive(Clone)]
Expand Down
4 changes: 2 additions & 2 deletions ash/src/extensions/ext/headless_surface.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ use crate::prelude::*;
use crate::vk;
use crate::RawPtr;
use crate::{Entry, Instance};
use std::ffi::CStr;
use std::mem;
use core::ffi::CStr;
use core::mem;

/// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_EXT_headless_surface.html>
#[derive(Clone)]
Expand Down
4 changes: 2 additions & 2 deletions ash/src/extensions/ext/host_image_copy.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ use super::{super::khr::Maintenance5, ImageCompressionControl};
use crate::prelude::*;
use crate::vk;
use crate::{Device, Instance};
use std::ffi::CStr;
use std::mem;
use core::ffi::CStr;
use core::mem;

/// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_EXT_host_image_copy.html>
#[derive(Clone)]
Expand Down
4 changes: 2 additions & 2 deletions ash/src/extensions/ext/image_compression_control.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
use super::{super::khr::Maintenance5, HostImageCopy};
use crate::vk;
use crate::{Device, Instance};
use std::ffi::CStr;
use std::mem;
use core::ffi::CStr;
use core::mem;

/// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_EXT_image_compression_control.html>
#[derive(Clone)]
Expand Down
4 changes: 2 additions & 2 deletions ash/src/extensions/ext/image_drm_format_modifier.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
use crate::prelude::*;
use crate::vk;
use crate::{Device, Instance};
use std::ffi::CStr;
use std::mem;
use core::ffi::CStr;
use core::mem;

/// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_EXT_image_drm_format_modifier.html>
#[derive(Clone)]
Expand Down
4 changes: 2 additions & 2 deletions ash/src/extensions/ext/mesh_shader.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use crate::vk;
use crate::{Device, Instance};
use std::ffi::CStr;
use std::mem;
use core::ffi::CStr;
use core::mem;

/// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_EXT_mesh_shader.html>
#[derive(Clone)]
Expand Down
Loading

0 comments on commit 215578b

Please sign in to comment.