Skip to main content

jay_ash/extensions/ext/
mesh_shader.rs

1//! <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_EXT_mesh_shader.html>
2
3use crate::vk;
4
5impl crate::ext::mesh_shader::Device {
6    /// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/vkCmdDrawMeshTasksEXT.html>
7    #[inline]
8    pub unsafe fn cmd_draw_mesh_tasks(
9        &self,
10        command_buffer: vk::CommandBuffer,
11        group_count_x: u32,
12        group_count_y: u32,
13        group_count_z: u32,
14    ) {
15        unsafe {
16            (self.fp.cmd_draw_mesh_tasks_ext)(
17                command_buffer,
18                group_count_x,
19                group_count_y,
20                group_count_z,
21            )
22        }
23    }
24
25    /// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/vkCmdDrawMeshTasksIndirectEXT.html>
26    ///
27    /// `buffer` contains `draw_count` [`vk::DrawMeshTasksIndirectCommandEXT`] structures starting at `offset` in bytes, holding the draw parameters.
28    #[inline]
29    pub unsafe fn cmd_draw_mesh_tasks_indirect(
30        &self,
31        command_buffer: vk::CommandBuffer,
32        buffer: vk::Buffer,
33        offset: vk::DeviceSize,
34        draw_count: u32,
35        stride: u32,
36    ) {
37        unsafe {
38            (self.fp.cmd_draw_mesh_tasks_indirect_ext)(
39                command_buffer,
40                buffer,
41                offset,
42                draw_count,
43                stride,
44            )
45        }
46    }
47
48    /// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/vkCmdDrawMeshTasksIndirectCountEXT.html>
49    ///
50    /// `buffer` contains a maximum of `max_draw_count` [`vk::DrawMeshTasksIndirectCommandEXT`] structures starting at `offset` in bytes, holding the draw parameters.
51    /// `count_buffer` is the buffer containing the draw count, starting at `count_buffer_offset` in bytes.
52    /// The actual number of executed draw calls is the minimum of the count specified in `count_buffer` and `max_draw_count`.
53    #[inline]
54    pub unsafe fn cmd_draw_mesh_tasks_indirect_count(
55        &self,
56        command_buffer: vk::CommandBuffer,
57        buffer: vk::Buffer,
58        offset: vk::DeviceSize,
59        count_buffer: vk::Buffer,
60        count_buffer_offset: vk::DeviceSize,
61        max_draw_count: u32,
62        stride: u32,
63    ) {
64        unsafe {
65            (self.fp.cmd_draw_mesh_tasks_indirect_count_ext)(
66                command_buffer,
67                buffer,
68                offset,
69                count_buffer,
70                count_buffer_offset,
71                max_draw_count,
72                stride,
73            )
74        }
75    }
76}