use std::sync::Mutex;
use log::warn;
pub mod error;
pub mod instance;
pub mod device;
pub mod memory;
pub mod buffer;
pub mod pipeline;
pub mod descriptor;
pub mod sync;
pub mod icd_loader;
pub mod forward;
pub mod persistent_descriptors;
pub mod barrier_policy;
pub mod timeline_batching;
pub mod pool_allocator;
pub use instance::*;
pub use device::*;
pub use memory::*;
pub use buffer::*;
pub use pipeline::*;
pub use descriptor::*;
pub use sync::*;
lazy_static::lazy_static! {
pub static ref ICD_INITIALIZED: Mutex<bool> = Mutex::new(false);
}
pub fn initialize_kronos() -> Result<(), error::KronosError> {
let mut initialized = ICD_INITIALIZED.lock()?;
if *initialized {
return Ok(());
}
match icd_loader::initialize_icd_loader() {
Ok(()) => {
*initialized = true;
log::info!("Kronos initialized successfully with ICD forwarding");
Ok(())
}
Err(e) => {
warn!("Failed to initialize Vulkan ICD loader: {}", e);
*initialized = true; Ok(())
}
}
}