Configured InstanceCreateInfo to request the VK_LAYER_KHRONOS_validation layer and the VK_EXT_debug_utils extension when compiling in debug mode. This lays the foundation for wiring Vulkan debug callbacks to tracing.
43 lines
1.2 KiB
Rust
43 lines
1.2 KiB
Rust
pub mod error;
|
|
|
|
use std::ffi::c_char;
|
|
use ash::{Entry, Instance, vk};
|
|
|
|
pub use error::RendererError;
|
|
|
|
pub struct Renderer {
|
|
_entry: Entry,
|
|
instance: Instance,
|
|
}
|
|
|
|
impl Renderer {
|
|
/// Initializes the Vulkan renderer.
|
|
/// `required_extensions` are raw C-strings (pointers) provided by the windowing system.
|
|
pub fn new(required_extensions: &[*const c_char]) -> Result<Self, RendererError> {
|
|
let entry = unsafe { Entry::load() }?;
|
|
|
|
let mut extensions: Vec<*const c_char> = required_extensions.to_vec();
|
|
let mut layers: Vec<*const c_char> = Vec::new();
|
|
|
|
#[cfg(debug_assertions)]
|
|
{
|
|
extensions.push(ash::ext::debug_utils::NAME.as_ptr());
|
|
layers.push(c"VK_LAYER_KHRONOS_validation".as_ptr());
|
|
}
|
|
|
|
let app_info = vk::ApplicationInfo::default()
|
|
.api_version(vk::API_VERSION_1_3);
|
|
|
|
let create_info = vk::InstanceCreateInfo::default()
|
|
.application_info(&app_info)
|
|
.enabled_extension_names(&extensions)
|
|
.enabled_layer_names(&layers);
|
|
|
|
let instance = unsafe { entry.create_instance(&create_info, None)? };
|
|
|
|
Ok(Self {
|
|
_entry: entry,
|
|
instance,
|
|
})
|
|
}
|
|
} |