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