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