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 }
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}