diff --git a/ash/src/extensions/khr/deferred_host_operations.rs b/ash/src/extensions/khr/deferred_host_operations.rs new file mode 100644 index 0000000..e200013 --- /dev/null +++ b/ash/src/extensions/khr/deferred_host_operations.rs @@ -0,0 +1,95 @@ +#![allow(dead_code)] +use crate::prelude::*; +use crate::version::{DeviceV1_0, InstanceV1_0}; +use crate::vk; +use crate::RawPtr; +use std::ffi::CStr; +use std::mem; + +#[derive(Clone)] +pub struct DeferredHostOperations { + handle: vk::Device, + deferred_host_operations_fn: vk::KhrDeferredHostOperationsFn, +} + +impl DeferredHostOperations { + pub fn new(instance: &I, device: &D) -> Self { + let deferred_host_operations_fn = vk::KhrDeferredHostOperationsFn::load(|name| unsafe { + mem::transmute(instance.get_device_proc_addr(device.handle(), name.as_ptr())) + }); + Self { + handle: device.handle(), + deferred_host_operations_fn, + } + } + + #[doc = ""] + pub unsafe fn create_deferred_operation( + &self, + allocation_callbacks: Option<&vk::AllocationCallbacks>, + ) -> VkResult { + let mut operation = mem::zeroed(); + self.deferred_host_operations_fn + .create_deferred_operation_khr( + self.handle, + allocation_callbacks.as_raw_ptr(), + &mut operation, + ) + .result_with_success(operation) + } + + #[doc = ""] + pub unsafe fn deferred_operation_join( + &self, + operation: vk::DeferredOperationKHR, + ) -> VkResult<()> { + self.deferred_host_operations_fn + .deferred_operation_join_khr(self.handle, operation) + .result() + } + + #[doc = ""] + pub unsafe fn destroy_deferred_operation( + &self, + operation: vk::DeferredOperationKHR, + allocation_callbacks: Option<&vk::AllocationCallbacks>, + ) { + self.deferred_host_operations_fn + .destroy_deferred_operation_khr( + self.handle, + operation, + allocation_callbacks.as_raw_ptr(), + ); + } + + #[doc = ""] + pub unsafe fn get_deferred_operation_max_concurrency( + &self, + operation: vk::DeferredOperationKHR, + ) -> u32 { + self.deferred_host_operations_fn + .get_deferred_operation_max_concurrency_khr(self.handle, operation) + } + + #[doc = ""] + pub unsafe fn get_deferred_operation_result( + &self, + operation: vk::DeferredOperationKHR, + ) -> VkResult<()> { + self.deferred_host_operations_fn + .get_deferred_operation_result_khr(self.handle, operation) + .result() + } + + pub fn name() -> &'static CStr { + vk::KhrDeferredHostOperationsFn::name() + } + + pub fn fp(&self) -> &vk::KhrDeferredHostOperationsFn { + &self.deferred_host_operations_fn + } + + pub fn device(&self) -> vk::Device { + self.handle + } +} diff --git a/ash/src/extensions/khr/mod.rs b/ash/src/extensions/khr/mod.rs index f5c54ca..4a72867 100644 --- a/ash/src/extensions/khr/mod.rs +++ b/ash/src/extensions/khr/mod.rs @@ -1,5 +1,6 @@ pub use self::acceleration_structure::AccelerationStructure; pub use self::android_surface::AndroidSurface; +pub use self::deferred_host_operations::DeferredHostOperations; pub use self::display::Display; pub use self::display_swapchain::DisplaySwapchain; pub use self::draw_indirect_count::DrawIndirectCount; @@ -18,6 +19,7 @@ pub use self::xlib_surface::XlibSurface; mod acceleration_structure; mod android_surface; +mod deferred_host_operations; mod display; mod display_swapchain; mod draw_indirect_count;