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 MeshShader {
8     fp: vk::NvMeshShaderFn,
9 }
10 
11 impl MeshShader {
new(instance: &Instance, device: &Device) -> Self12     pub fn new(instance: &Instance, device: &Device) -> Self {
13         let fp = vk::NvMeshShaderFn::load(|name| unsafe {
14             mem::transmute(instance.get_device_proc_addr(device.handle(), name.as_ptr()))
15         });
16         Self { fp }
17     }
18 
19     #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdDrawMeshTasksNV.html>"]
cmd_draw_mesh_tasks( &self, command_buffer: vk::CommandBuffer, task_count: u32, first_task: u32, )20     pub unsafe fn cmd_draw_mesh_tasks(
21         &self,
22         command_buffer: vk::CommandBuffer,
23         task_count: u32,
24         first_task: u32,
25     ) {
26         self.fp
27             .cmd_draw_mesh_tasks_nv(command_buffer, task_count, first_task);
28     }
29 
30     #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdDrawMeshTasksIndirectNV.html>"]
cmd_draw_mesh_tasks_indirect( &self, command_buffer: vk::CommandBuffer, buffer: vk::Buffer, offset: vk::DeviceSize, draw_count: u32, stride: u32, )31     pub unsafe fn cmd_draw_mesh_tasks_indirect(
32         &self,
33         command_buffer: vk::CommandBuffer,
34         buffer: vk::Buffer,
35         offset: vk::DeviceSize,
36         draw_count: u32,
37         stride: u32,
38     ) {
39         self.fp
40             .cmd_draw_mesh_tasks_indirect_nv(command_buffer, buffer, offset, draw_count, stride);
41     }
42 
43     #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdDrawMeshTasksIndirectCountNV.html>"]
cmd_draw_mesh_tasks_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, )44     pub unsafe fn cmd_draw_mesh_tasks_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_mesh_tasks_indirect_count_nv(
55             command_buffer,
56             buffer,
57             offset,
58             count_buffer,
59             count_buffer_offset,
60             max_draw_count,
61             stride,
62         );
63     }
64 
name() -> &'static CStr65     pub fn name() -> &'static CStr {
66         vk::NvMeshShaderFn::name()
67     }
68 
fp(&self) -> &vk::NvMeshShaderFn69     pub fn fp(&self) -> &vk::NvMeshShaderFn {
70         &self.fp
71     }
72 }
73