jay_ash/extensions/ext/
descriptor_heap.rs1use crate::prelude::*;
4use crate::vk;
5
6impl crate::ext::descriptor_heap::Device {
7 #[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 #[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 #[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 #[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 #[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 #[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 #[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 #[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 #[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 #[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}