• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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