ash/extensions/ext/
private_data.rs

1//! <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_EXT_private_data.html>
2
3use crate::prelude::*;
4use crate::vk;
5use crate::RawPtr;
6use core::mem;
7
8impl crate::ext::private_data::Device {
9    /// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/vkCreatePrivateDataSlotEXT.html>
10    #[inline]
11    pub unsafe fn create_private_data_slot(
12        &self,
13        create_info: &vk::PrivateDataSlotCreateInfoEXT<'_>,
14        allocation_callbacks: Option<&vk::AllocationCallbacks<'_>>,
15    ) -> VkResult<vk::PrivateDataSlotEXT> {
16        let mut private_data_slot = mem::MaybeUninit::uninit();
17        (self.fp.create_private_data_slot_ext)(
18            self.handle,
19            create_info,
20            allocation_callbacks.as_raw_ptr(),
21            private_data_slot.as_mut_ptr(),
22        )
23        .assume_init_on_success(private_data_slot)
24    }
25
26    /// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/vkDestroyPrivateDataSlotEXT.html>
27    #[inline]
28    pub unsafe fn destroy_private_data_slot(
29        &self,
30        private_data_slot: vk::PrivateDataSlotEXT,
31        allocation_callbacks: Option<&vk::AllocationCallbacks<'_>>,
32    ) {
33        (self.fp.destroy_private_data_slot_ext)(
34            self.handle,
35            private_data_slot,
36            allocation_callbacks.as_raw_ptr(),
37        )
38    }
39
40    /// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/vkSetPrivateDataEXT.html>
41    #[inline]
42    pub unsafe fn set_private_data<T: vk::Handle>(
43        &self,
44        object: T,
45        private_data_slot: vk::PrivateDataSlotEXT,
46        data: u64,
47    ) -> VkResult<()> {
48        (self.fp.set_private_data_ext)(
49            self.handle,
50            T::TYPE,
51            object.as_raw(),
52            private_data_slot,
53            data,
54        )
55        .result()
56    }
57
58    /// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/vkGetPrivateDataEXT.html>
59    #[inline]
60    pub unsafe fn get_private_data<T: vk::Handle>(
61        &self,
62        object: T,
63        private_data_slot: vk::PrivateDataSlotEXT,
64    ) -> u64 {
65        let mut data = mem::MaybeUninit::uninit();
66        (self.fp.get_private_data_ext)(
67            self.handle,
68            T::TYPE,
69            object.as_raw(),
70            private_data_slot,
71            data.as_mut_ptr(),
72        );
73        data.assume_init()
74    }
75}