1 #![allow(dead_code)] 2 use crate::version::{DeviceV1_0, InstanceV1_0}; 3 use crate::vk; 4 use std::ffi::CStr; 5 use std::mem; 6 7 #[derive(Clone)] 8 pub struct MeshShader { 9 mesh_shader_fn: vk::NvMeshShaderFn, 10 } 11 12 impl MeshShader { new<I: InstanceV1_0, D: DeviceV1_0>(instance: &I, device: &D) -> MeshShader13 pub fn new<I: InstanceV1_0, D: DeviceV1_0>(instance: &I, device: &D) -> MeshShader { 14 let mesh_shader_fn = vk::NvMeshShaderFn::load(|name| unsafe { 15 mem::transmute(instance.get_device_proc_addr(device.handle(), name.as_ptr())) 16 }); 17 MeshShader { mesh_shader_fn } 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.mesh_shader_fn 27 .cmd_draw_mesh_tasks_nv(command_buffer, task_count, first_task); 28 } 29 #[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, )30 pub unsafe fn cmd_draw_mesh_tasks_indirect( 31 &self, 32 command_buffer: vk::CommandBuffer, 33 buffer: vk::Buffer, 34 offset: vk::DeviceSize, 35 draw_count: u32, 36 stride: u32, 37 ) { 38 self.mesh_shader_fn.cmd_draw_mesh_tasks_indirect_nv( 39 command_buffer, 40 buffer, 41 offset, 42 draw_count, 43 stride, 44 ); 45 } 46 #[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, )47 pub unsafe fn cmd_draw_mesh_tasks_indirect_count( 48 &self, 49 command_buffer: vk::CommandBuffer, 50 buffer: vk::Buffer, 51 offset: vk::DeviceSize, 52 count_buffer: vk::Buffer, 53 count_buffer_offset: vk::DeviceSize, 54 max_draw_count: u32, 55 stride: u32, 56 ) { 57 self.mesh_shader_fn.cmd_draw_mesh_tasks_indirect_count_nv( 58 command_buffer, 59 buffer, 60 offset, 61 count_buffer, 62 count_buffer_offset, 63 max_draw_count, 64 stride, 65 ); 66 } name() -> &'static CStr67 pub fn name() -> &'static CStr { 68 vk::NvMeshShaderFn::name() 69 } 70 fp(&self) -> &vk::NvMeshShaderFn71 pub fn fp(&self) -> &vk::NvMeshShaderFn { 72 &self.mesh_shader_fn 73 } 74 } 75