use crate::instance_handles::instance_fns; use vulkan_sys::prelude::*; static mut DEVICE_FN_HANDLES: Option = None; pub fn device_fns() -> &'static VkDeviceHandles { unsafe { DEVICE_FN_HANDLES.as_ref().unwrap() } } pub fn set_device_fns(handles: VkDeviceHandles) { unsafe { DEVICE_FN_HANDLES = Some(handles) }; } pub struct VkDeviceHandles { pub device: VkDevice, pub device_functions: DeviceFunctions, pub device_wsi_functions: DeviceWSIFunctions, pub maintenance3_functions: Maintenance3Functions, pub acceleration_structure_functions: AccelerationStructureFunctions, pub ray_tracing_pipeline_functions: RayTracingPipelineFunctions, pub deferred_operation_functions: DeferredOperationsFunctions, } impl VkDeviceHandles { pub fn new(device: VkDevice) -> Self { let instance = &instance_fns().instance_functions; Self { device, device_functions: DeviceFunctions::new(instance, device), device_wsi_functions: DeviceWSIFunctions::new(instance, device), maintenance3_functions: Maintenance3Functions::new(instance, device), acceleration_structure_functions: AccelerationStructureFunctions::new(instance, device), ray_tracing_pipeline_functions: RayTracingPipelineFunctions::new(instance, device), deferred_operation_functions: DeferredOperationsFunctions::new(instance, device), } } }