Skip to main content

jay_ash/extensions/ext/
descriptor_buffer.rs

1//! <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_EXT_descriptor_buffer.html>
2
3use crate::prelude::*;
4use crate::vk;
5use core::mem;
6
7impl crate::ext::descriptor_buffer::Device {
8    /// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/vkGetDescriptorSetLayoutSizeEXT.html>
9    #[inline]
10    pub unsafe fn get_descriptor_set_layout_size(
11        &self,
12        layout: vk::DescriptorSetLayout,
13    ) -> vk::DeviceSize {
14        unsafe {
15            let mut count = mem::MaybeUninit::uninit();
16            (self.fp.get_descriptor_set_layout_size_ext)(self.handle, layout, count.as_mut_ptr());
17            count.assume_init()
18        }
19    }
20
21    /// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/vkGetDescriptorSetLayoutBindingOffsetEXT.html>
22    #[inline]
23    pub unsafe fn get_descriptor_set_layout_binding_offset(
24        &self,
25        layout: vk::DescriptorSetLayout,
26        binding: u32,
27    ) -> vk::DeviceSize {
28        unsafe {
29            let mut offset = mem::MaybeUninit::uninit();
30            (self.fp.get_descriptor_set_layout_binding_offset_ext)(
31                self.handle,
32                layout,
33                binding,
34                offset.as_mut_ptr(),
35            );
36            offset.assume_init()
37        }
38    }
39
40    /// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/vkGetDescriptorEXT.html>
41    #[inline]
42    pub unsafe fn get_descriptor(
43        &self,
44        descriptor_info: &vk::DescriptorGetInfoEXT<'_>,
45        descriptor: &mut [u8],
46    ) {
47        unsafe {
48            (self.fp.get_descriptor_ext)(
49                self.handle,
50                descriptor_info,
51                descriptor.len(),
52                descriptor.as_mut_ptr().cast(),
53            )
54        }
55    }
56
57    /// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/vkCmdBindDescriptorBuffersEXT.html>
58    #[inline]
59    pub unsafe fn cmd_bind_descriptor_buffers(
60        &self,
61        command_buffer: vk::CommandBuffer,
62        binding_info: &[vk::DescriptorBufferBindingInfoEXT<'_>],
63    ) {
64        unsafe {
65            (self.fp.cmd_bind_descriptor_buffers_ext)(
66                command_buffer,
67                binding_info.len() as u32,
68                binding_info.as_ptr(),
69            )
70        }
71    }
72
73    /// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/vkCmdSetDescriptorBufferOffsetsEXT.html>
74    #[inline]
75    pub unsafe fn cmd_set_descriptor_buffer_offsets(
76        &self,
77        command_buffer: vk::CommandBuffer,
78        pipeline_bind_point: vk::PipelineBindPoint,
79        layout: vk::PipelineLayout,
80        first_set: u32,
81        buffer_indices: &[u32],
82        offsets: &[vk::DeviceSize],
83    ) {
84        unsafe {
85            assert_eq!(buffer_indices.len(), offsets.len());
86            (self.fp.cmd_set_descriptor_buffer_offsets_ext)(
87                command_buffer,
88                pipeline_bind_point,
89                layout,
90                first_set,
91                buffer_indices.len() as u32,
92                buffer_indices.as_ptr(),
93                offsets.as_ptr(),
94            )
95        }
96    }
97
98    /// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/vkCmdBindDescriptorBufferEmbeddedSamplersEXT.html>
99    #[inline]
100    pub unsafe fn cmd_bind_descriptor_buffer_embedded_samplers(
101        &self,
102        command_buffer: vk::CommandBuffer,
103        pipeline_bind_point: vk::PipelineBindPoint,
104        layout: vk::PipelineLayout,
105        set: u32,
106    ) {
107        unsafe {
108            (self.fp.cmd_bind_descriptor_buffer_embedded_samplers_ext)(
109                command_buffer,
110                pipeline_bind_point,
111                layout,
112                set,
113            )
114        }
115    }
116
117    /// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/vkGetBufferOpaqueCaptureDescriptorDataEXT.html>
118    #[inline]
119    pub unsafe fn get_buffer_opaque_capture_descriptor_data(
120        &self,
121        info: &vk::BufferCaptureDescriptorDataInfoEXT<'_>,
122        data: &mut [u8],
123    ) -> VkResult<()> {
124        unsafe {
125            (self.fp.get_buffer_opaque_capture_descriptor_data_ext)(
126                self.handle,
127                info,
128                data.as_mut_ptr().cast(),
129            )
130            .result()
131        }
132    }
133
134    /// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/vkGetImageOpaqueCaptureDescriptorDataEXT.html>
135    #[inline]
136    pub unsafe fn get_image_opaque_capture_descriptor_data(
137        &self,
138        info: &vk::ImageCaptureDescriptorDataInfoEXT<'_>,
139        data: &mut [u8],
140    ) -> VkResult<()> {
141        unsafe {
142            (self.fp.get_image_opaque_capture_descriptor_data_ext)(
143                self.handle,
144                info,
145                data.as_mut_ptr().cast(),
146            )
147            .result()
148        }
149    }
150
151    /// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/vkGetImageViewOpaqueCaptureDescriptorDataEXT.html>
152    #[inline]
153    pub unsafe fn get_image_view_opaque_capture_descriptor_data(
154        &self,
155        info: &vk::ImageViewCaptureDescriptorDataInfoEXT<'_>,
156        data: &mut [u8],
157    ) -> VkResult<()> {
158        unsafe {
159            (self.fp.get_image_view_opaque_capture_descriptor_data_ext)(
160                self.handle,
161                info,
162                data.as_mut_ptr().cast(),
163            )
164            .result()
165        }
166    }
167
168    /// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/vkGetSamplerOpaqueCaptureDescriptorDataEXT.html>
169    #[inline]
170    pub unsafe fn get_sampler_opaque_capture_descriptor_data(
171        &self,
172        info: &vk::SamplerCaptureDescriptorDataInfoEXT<'_>,
173        data: &mut [u8],
174    ) -> VkResult<()> {
175        unsafe {
176            (self.fp.get_sampler_opaque_capture_descriptor_data_ext)(
177                self.handle,
178                info,
179                data.as_mut_ptr().cast(),
180            )
181            .result()
182        }
183    }
184
185    /// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT.html>
186    #[inline]
187    pub unsafe fn get_acceleration_structure_opaque_capture_descriptor_data(
188        &self,
189        info: &vk::AccelerationStructureCaptureDescriptorDataInfoEXT<'_>,
190        data: &mut [u8],
191    ) -> VkResult<()> {
192        unsafe {
193            (self
194                .fp
195                .get_acceleration_structure_opaque_capture_descriptor_data_ext)(
196                self.handle,
197                info,
198                data.as_mut_ptr().cast(),
199            )
200            .result()
201        }
202    }
203}