1 use crate::prelude::*; 2 use crate::vk; 3 use crate::RawPtr; 4 use crate::{Device, Instance}; 5 use std::ffi::CStr; 6 use std::mem; 7 8 #[derive(Clone)] 9 pub struct DeferredHostOperations { 10 handle: vk::Device, 11 deferred_host_operations_fn: vk::KhrDeferredHostOperationsFn, 12 } 13 14 impl DeferredHostOperations { new(instance: &Instance, device: &Device) -> Self15 pub fn new(instance: &Instance, device: &Device) -> Self { 16 let deferred_host_operations_fn = vk::KhrDeferredHostOperationsFn::load(|name| unsafe { 17 mem::transmute(instance.get_device_proc_addr(device.handle(), name.as_ptr())) 18 }); 19 Self { 20 handle: device.handle(), 21 deferred_host_operations_fn, 22 } 23 } 24 25 #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateDeferredOperationKHR.html>"] create_deferred_operation( &self, allocation_callbacks: Option<&vk::AllocationCallbacks>, ) -> VkResult<vk::DeferredOperationKHR>26 pub unsafe fn create_deferred_operation( 27 &self, 28 allocation_callbacks: Option<&vk::AllocationCallbacks>, 29 ) -> VkResult<vk::DeferredOperationKHR> { 30 let mut operation = mem::zeroed(); 31 self.deferred_host_operations_fn 32 .create_deferred_operation_khr( 33 self.handle, 34 allocation_callbacks.as_raw_ptr(), 35 &mut operation, 36 ) 37 .result_with_success(operation) 38 } 39 40 #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDeferredOperationJoinKHR.html>"] deferred_operation_join( &self, operation: vk::DeferredOperationKHR, ) -> VkResult<()>41 pub unsafe fn deferred_operation_join( 42 &self, 43 operation: vk::DeferredOperationKHR, 44 ) -> VkResult<()> { 45 self.deferred_host_operations_fn 46 .deferred_operation_join_khr(self.handle, operation) 47 .result() 48 } 49 50 #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyDeferredOperationKHR.html>"] destroy_deferred_operation( &self, operation: vk::DeferredOperationKHR, allocation_callbacks: Option<&vk::AllocationCallbacks>, )51 pub unsafe fn destroy_deferred_operation( 52 &self, 53 operation: vk::DeferredOperationKHR, 54 allocation_callbacks: Option<&vk::AllocationCallbacks>, 55 ) { 56 self.deferred_host_operations_fn 57 .destroy_deferred_operation_khr( 58 self.handle, 59 operation, 60 allocation_callbacks.as_raw_ptr(), 61 ); 62 } 63 64 #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetDeferredOperationMaxConcurrencyKHR.html>"] get_deferred_operation_max_concurrency( &self, operation: vk::DeferredOperationKHR, ) -> u3265 pub unsafe fn get_deferred_operation_max_concurrency( 66 &self, 67 operation: vk::DeferredOperationKHR, 68 ) -> u32 { 69 self.deferred_host_operations_fn 70 .get_deferred_operation_max_concurrency_khr(self.handle, operation) 71 } 72 73 #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetDeferredOperationResultKHR.html>"] get_deferred_operation_result( &self, operation: vk::DeferredOperationKHR, ) -> VkResult<()>74 pub unsafe fn get_deferred_operation_result( 75 &self, 76 operation: vk::DeferredOperationKHR, 77 ) -> VkResult<()> { 78 self.deferred_host_operations_fn 79 .get_deferred_operation_result_khr(self.handle, operation) 80 .result() 81 } 82 name() -> &'static CStr83 pub fn name() -> &'static CStr { 84 vk::KhrDeferredHostOperationsFn::name() 85 } 86 fp(&self) -> &vk::KhrDeferredHostOperationsFn87 pub fn fp(&self) -> &vk::KhrDeferredHostOperationsFn { 88 &self.deferred_host_operations_fn 89 } 90 device(&self) -> vk::Device91 pub fn device(&self) -> vk::Device { 92 self.handle 93 } 94 } 95