vk_llw/
lib.rs

1use ash::vk;
2use std::ffi::{CStr, CString};
3
4pub mod debug_report;
5pub mod device;
6pub mod instance;
7pub mod memory;
8
9fn get_c_str_pointers(strs: &[CString]) -> Vec<*const i8> {
10    let mut ptrs = Vec::with_capacity(strs.len());
11    for layer in strs {
12        ptrs.push(layer.as_ptr());
13    }
14    ptrs
15}
16
17pub fn raw_name_to_c_string(raw: &mut [i8]) -> CString {
18    if raw.is_empty() {
19        return CString::new("").unwrap();
20    }
21    if let Some(last) = raw.last_mut() {
22        *last = 0 // To ensure that EOL symbol present
23    }
24    let c_str = unsafe { CStr::from_ptr(raw.as_ptr()) };
25    c_str.to_owned()
26}
27
28pub trait ContainRawVkName {
29    fn get_name(&mut self) -> &mut [i8];
30    fn c_string_name(&mut self) -> CString {
31        raw_name_to_c_string(self.get_name())
32    }
33}
34
35impl ContainRawVkName for vk::LayerProperties {
36    fn get_name(&mut self) -> &mut [i8] {
37        self.layer_name.as_mut()
38    }
39}
40
41impl ContainRawVkName for vk::ExtensionProperties {
42    fn get_name(&mut self) -> &mut [i8] {
43        self.extension_name.as_mut()
44    }
45}