ash/extensions/khr/
push_descriptor.rs1use 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 #[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 #[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}