1 use crate::vk; 2 use crate::{Device, Instance}; 3 use std::ffi::CStr; 4 use std::mem; 5 6 #[derive(Clone)] 7 pub struct DrawIndirectCount { 8 handle: vk::Device, 9 draw_indirect_count_fn: vk::KhrDrawIndirectCountFn, 10 } 11 12 impl DrawIndirectCount { new(instance: &Instance, device: &Device) -> Self13 pub fn new(instance: &Instance, device: &Device) -> Self { 14 let draw_indirect_count_fn = vk::KhrDrawIndirectCountFn::load(|name| unsafe { 15 mem::transmute(instance.get_device_proc_addr(device.handle(), name.as_ptr())) 16 }); 17 Self { 18 handle: device.handle(), 19 draw_indirect_count_fn, 20 } 21 } 22 name() -> &'static CStr23 pub fn name() -> &'static CStr { 24 vk::KhrDrawIndirectCountFn::name() 25 } 26 27 #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/vkCmdDrawIndexedIndirectCountKHR.html>"] cmd_draw_indexed_indirect_count( &self, command_buffer: vk::CommandBuffer, buffer: vk::Buffer, offset: vk::DeviceSize, count_buffer: vk::Buffer, count_buffer_offset: vk::DeviceSize, max_draw_count: u32, stride: u32, )28 pub unsafe fn cmd_draw_indexed_indirect_count( 29 &self, 30 command_buffer: vk::CommandBuffer, 31 buffer: vk::Buffer, 32 offset: vk::DeviceSize, 33 count_buffer: vk::Buffer, 34 count_buffer_offset: vk::DeviceSize, 35 max_draw_count: u32, 36 stride: u32, 37 ) { 38 self.draw_indirect_count_fn 39 .cmd_draw_indexed_indirect_count_khr( 40 command_buffer, 41 buffer, 42 offset, 43 count_buffer, 44 count_buffer_offset, 45 max_draw_count, 46 stride, 47 ); 48 } 49 50 #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/vkCmdDrawIndirectCountKHR.html>"] cmd_draw_indirect_count( &self, command_buffer: vk::CommandBuffer, buffer: vk::Buffer, offset: vk::DeviceSize, count_buffer: vk::Buffer, count_buffer_offset: vk::DeviceSize, max_draw_count: u32, stride: u32, )51 pub unsafe fn cmd_draw_indirect_count( 52 &self, 53 command_buffer: vk::CommandBuffer, 54 buffer: vk::Buffer, 55 offset: vk::DeviceSize, 56 count_buffer: vk::Buffer, 57 count_buffer_offset: vk::DeviceSize, 58 max_draw_count: u32, 59 stride: u32, 60 ) { 61 self.draw_indirect_count_fn 62 .cmd_draw_indexed_indirect_count_khr( 63 command_buffer, 64 buffer, 65 offset, 66 count_buffer, 67 count_buffer_offset, 68 max_draw_count, 69 stride, 70 ); 71 } 72 } 73