• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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