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