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