ash/extensions/khr/
draw_indirect_count.rs
1use 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 pub unsafe fn cmd_draw_indexed_indirect_count(
21 &self,
22 command_buffer: vk::CommandBuffer,
23 buffer: vk::Buffer,
24 offset: vk::DeviceSize,
25 count_buffer: vk::Buffer,
26 count_buffer_offset: vk::DeviceSize,
27 max_draw_count: u32,
28 stride: u32,
29 ) {
30 (self.fp.cmd_draw_indexed_indirect_count_khr)(
31 command_buffer,
32 buffer,
33 offset,
34 count_buffer,
35 count_buffer_offset,
36 max_draw_count,
37 stride,
38 );
39 }
40
41 pub unsafe fn cmd_draw_indirect_count(
43 &self,
44 command_buffer: vk::CommandBuffer,
45 buffer: vk::Buffer,
46 offset: vk::DeviceSize,
47 count_buffer: vk::Buffer,
48 count_buffer_offset: vk::DeviceSize,
49 max_draw_count: u32,
50 stride: u32,
51 ) {
52 (self.fp.cmd_draw_indexed_indirect_count_khr)(
53 command_buffer,
54 buffer,
55 offset,
56 count_buffer,
57 count_buffer_offset,
58 max_draw_count,
59 stride,
60 );
61 }
62
63 pub const fn name() -> &'static CStr {
64 vk::KhrDrawIndirectCountFn::name()
65 }
66
67 pub fn fp(&self) -> &vk::KhrDrawIndirectCountFn {
68 &self.fp
69 }
70}