Skip to main content

jay_ash/extensions/ext/
descriptor_heap.rs

1//! <https://docs.vulkan.org/refpages/latest/refpages/source/VK_EXT_descriptor_heap.html>
2
3use crate::prelude::*;
4use crate::vk;
5
6impl crate::ext::descriptor_heap::Device {
7    /// <https://docs.vulkan.org/refpages/latest/refpages/source/vkWriteSamplerDescriptorsEXT.html>
8    #[inline]
9    pub unsafe fn write_sampler_descriptors(
10        &self,
11        samplers: &[vk::SamplerCreateInfo<'_>],
12        descriptors: &[vk::HostAddressRangeEXT<'_>],
13    ) -> VkResult<()> {
14        assert_eq!(samplers.len(), descriptors.len());
15        unsafe {
16            (self.fp.write_sampler_descriptors_ext)(
17                self.handle,
18                samplers.len() as u32,
19                samplers.as_ptr(),
20                descriptors.as_ptr(),
21            )
22        }
23        .result()
24    }
25
26    /// <https://docs.vulkan.org/refpages/latest/refpages/source/vkWriteResourceDescriptorsEXT.html>
27    #[inline]
28    pub unsafe fn write_resource_descriptors(
29        &self,
30        resources: &[vk::ResourceDescriptorInfoEXT<'_>],
31        descriptors: &[vk::HostAddressRangeEXT<'_>],
32    ) -> VkResult<()> {
33        assert_eq!(resources.len(), descriptors.len());
34        unsafe {
35            (self.fp.write_resource_descriptors_ext)(
36                self.handle,
37                resources.len() as u32,
38                resources.as_ptr(),
39                descriptors.as_ptr(),
40            )
41        }
42        .result()
43    }
44
45    /// <https://docs.vulkan.org/refpages/latest/refpages/source/vkCmdBindSamplerHeapEXT.html>
46    #[inline]
47    pub unsafe fn cmd_bind_sampler_heap(
48        &self,
49        command_buffer: vk::CommandBuffer,
50        bind_info: &vk::BindHeapInfoEXT<'_>,
51    ) {
52        unsafe { (self.fp.cmd_bind_sampler_heap_ext)(command_buffer, bind_info) }
53    }
54
55    /// <https://docs.vulkan.org/refpages/latest/refpages/source/vkCmdBindResourceHeapEXT.html>
56    #[inline]
57    pub unsafe fn cmd_bind_resource_heap(
58        &self,
59        command_buffer: vk::CommandBuffer,
60        bind_info: &vk::BindHeapInfoEXT<'_>,
61    ) {
62        unsafe { (self.fp.cmd_bind_resource_heap_ext)(command_buffer, bind_info) }
63    }
64
65    /// <https://docs.vulkan.org/refpages/latest/refpages/source/vkCmdPushDataEXT.html>
66    #[inline]
67    pub unsafe fn cmd_push_data(
68        &self,
69        command_buffer: vk::CommandBuffer,
70        push_data_info: &vk::PushDataInfoEXT<'_>,
71    ) {
72        unsafe { (self.fp.cmd_push_data_ext)(command_buffer, push_data_info) }
73    }
74
75    /// <https://docs.vulkan.org/refpages/latest/refpages/source/vkGetImageOpaqueCaptureDataEXT.html>
76    #[inline]
77    pub unsafe fn get_image_opaque_capture_data(
78        &self,
79        images: &[vk::Image],
80        datas: &mut [vk::HostAddressRangeEXT<'_>],
81    ) -> VkResult<()> {
82        assert_eq!(images.len(), datas.len());
83        unsafe {
84            (self.fp.get_image_opaque_capture_data_ext)(
85                self.handle,
86                images.len() as u32,
87                images.as_ptr(),
88                datas.as_mut_ptr(),
89            )
90            .result()
91        }
92    }
93
94    /// <https://docs.vulkan.org/refpages/latest/refpages/source/vkRegisterCustomBorderColorEXT.html>
95    #[inline]
96    pub unsafe fn register_custom_border_color(
97        &self,
98        border_color: &vk::SamplerCustomBorderColorCreateInfoEXT<'_>,
99        index: Option<u32>,
100    ) -> VkResult<u32> {
101        let request_index = index.is_some() as u32;
102        let mut index = index.unwrap_or_default();
103        unsafe {
104            (self.fp.register_custom_border_color_ext)(
105                self.handle,
106                border_color,
107                request_index,
108                &mut index,
109            )
110            .result()?;
111        }
112        Ok(index)
113    }
114
115    /// <https://docs.vulkan.org/refpages/latest/refpages/source/vkUnregisterCustomBorderColorEXT.html>
116    #[inline]
117    pub unsafe fn unregister_custom_border_color(&self, index: u32) {
118        unsafe { (self.fp.unregister_custom_border_color_ext)(self.handle, index) }
119    }
120
121    /// <https://docs.vulkan.org/refpages/latest/refpages/source/vkGetTensorOpaqueCaptureDataARM.html>
122    #[inline]
123    pub unsafe fn get_tensor_opaque_capture_data_arm(
124        &self,
125        tensors: &[vk::TensorARM],
126        datas: &mut [vk::HostAddressRangeEXT<'_>],
127    ) -> VkResult<()> {
128        assert_eq!(tensors.len(), datas.len());
129        unsafe {
130            (self.fp.get_tensor_opaque_capture_data_arm)(
131                self.handle,
132                tensors.len() as u32,
133                tensors.as_ptr(),
134                datas.as_mut_ptr(),
135            )
136            .result()
137        }
138    }
139}
140
141impl crate::ext::descriptor_heap::Instance {
142    /// <https://docs.vulkan.org/refpages/latest/refpages/source/vkGetPhysicalDeviceDescriptorSizeEXT.html>
143    #[inline]
144    pub unsafe fn get_physical_device_descriptor_size(
145        &self,
146        physical_device: vk::PhysicalDevice,
147        descriptor_type: vk::DescriptorType,
148    ) -> vk::DeviceSize {
149        unsafe {
150            (self.fp.get_physical_device_descriptor_size_ext)(physical_device, descriptor_type)
151        }
152    }
153}