ash/extensions/khr/
push_descriptor.rs

1use crate::vk;
2use crate::{Device, Instance};
3use std::ffi::c_void;
4use std::ffi::CStr;
5use std::mem;
6
7#[derive(Clone)]
8pub struct PushDescriptor {
9    fp: vk::KhrPushDescriptorFn,
10}
11
12impl PushDescriptor {
13    pub fn new(instance: &Instance, device: &Device) -> Self {
14        let fp = vk::KhrPushDescriptorFn::load(|name| unsafe {
15            mem::transmute(instance.get_device_proc_addr(device.handle(), name.as_ptr()))
16        });
17        Self { fp }
18    }
19
20    /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdPushDescriptorSetKHR.html>
21    #[inline]
22    pub unsafe fn cmd_push_descriptor_set(
23        &self,
24        command_buffer: vk::CommandBuffer,
25        pipeline_bind_point: vk::PipelineBindPoint,
26        layout: vk::PipelineLayout,
27        set: u32,
28        descriptor_writes: &[vk::WriteDescriptorSet],
29    ) {
30        (self.fp.cmd_push_descriptor_set_khr)(
31            command_buffer,
32            pipeline_bind_point,
33            layout,
34            set,
35            descriptor_writes.len() as u32,
36            descriptor_writes.as_ptr(),
37        );
38    }
39
40    /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdPushDescriptorSetWithTemplateKHR.html>
41    #[inline]
42    pub unsafe fn cmd_push_descriptor_set_with_template(
43        &self,
44        command_buffer: vk::CommandBuffer,
45        descriptor_update_template: vk::DescriptorUpdateTemplate,
46        layout: vk::PipelineLayout,
47        set: u32,
48        p_data: *const c_void,
49    ) {
50        (self.fp.cmd_push_descriptor_set_with_template_khr)(
51            command_buffer,
52            descriptor_update_template,
53            layout,
54            set,
55            p_data,
56        );
57    }
58
59    #[inline]
60    pub const fn name() -> &'static CStr {
61        vk::KhrPushDescriptorFn::name()
62    }
63
64    #[inline]
65    pub fn fp(&self) -> &vk::KhrPushDescriptorFn {
66        &self.fp
67    }
68}