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    /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdDrawIndexedIndirectCountKHR.html>
20    #[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    /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdDrawIndirectCountKHR.html>
43    #[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}