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 pub unsafe fn cmd_push_descriptor_set(
22 &self,
23 command_buffer: vk::CommandBuffer,
24 pipeline_bind_point: vk::PipelineBindPoint,
25 layout: vk::PipelineLayout,
26 set: u32,
27 descriptor_writes: &[vk::WriteDescriptorSet],
28 ) {
29 (self.fp.cmd_push_descriptor_set_khr)(
30 command_buffer,
31 pipeline_bind_point,
32 layout,
33 set,
34 descriptor_writes.len() as u32,
35 descriptor_writes.as_ptr(),
36 );
37 }
38
39 pub unsafe fn cmd_push_descriptor_set_with_template(
41 &self,
42 command_buffer: vk::CommandBuffer,
43 descriptor_update_template: vk::DescriptorUpdateTemplate,
44 layout: vk::PipelineLayout,
45 set: u32,
46 p_data: *const c_void,
47 ) {
48 (self.fp.cmd_push_descriptor_set_with_template_khr)(
49 command_buffer,
50 descriptor_update_template,
51 layout,
52 set,
53 p_data,
54 );
55 }
56
57 pub const fn name() -> &'static CStr {
58 vk::KhrPushDescriptorFn::name()
59 }
60
61 pub fn fp(&self) -> &vk::KhrPushDescriptorFn {
62 &self.fp
63 }
64}