Skip to main content

jay_ash/extensions/nv/
cuda_kernel_launch.rs

1//! <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_NV_cuda_kernel_launch.html>
2
3use crate::RawPtr;
4use crate::prelude::*;
5use crate::vk;
6use alloc::vec::Vec;
7use core::mem;
8
9impl crate::nv::cuda_kernel_launch::Device {
10    /// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/vkCreateCudaModuleNV.html>
11    #[inline]
12    pub unsafe fn create_cuda_module(
13        &self,
14        create_info: &vk::CudaModuleCreateInfoNV<'_>,
15        allocator: Option<&vk::AllocationCallbacks<'_>>,
16    ) -> VkResult<vk::CudaModuleNV> {
17        unsafe {
18            let mut module = mem::MaybeUninit::uninit();
19            (self.fp.create_cuda_module_nv)(
20                self.handle,
21                create_info,
22                allocator.as_raw_ptr(),
23                module.as_mut_ptr(),
24            )
25            .assume_init_on_success(module)
26        }
27    }
28
29    /// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/vkGetCudaModuleCacheNV.html>
30    #[inline]
31    pub unsafe fn get_cuda_module_cache(&self, module: vk::CudaModuleNV) -> VkResult<Vec<u8>> {
32        unsafe {
33            read_into_uninitialized_vector(|cache_size, cache_data: *mut u8| {
34                (self.fp.get_cuda_module_cache_nv)(
35                    self.handle,
36                    module,
37                    cache_size,
38                    cache_data.cast(),
39                )
40            })
41        }
42    }
43
44    /// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/vkCreateCudaFunctionNV.html>
45    #[inline]
46    pub unsafe fn create_cuda_function(
47        &self,
48        create_info: &vk::CudaFunctionCreateInfoNV<'_>,
49        allocator: Option<&vk::AllocationCallbacks<'_>>,
50    ) -> VkResult<vk::CudaFunctionNV> {
51        unsafe {
52            let mut function = mem::MaybeUninit::uninit();
53            (self.fp.create_cuda_function_nv)(
54                self.handle,
55                create_info,
56                allocator.as_raw_ptr(),
57                function.as_mut_ptr(),
58            )
59            .assume_init_on_success(function)
60        }
61    }
62
63    /// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/vkDestroyCudaModuleNV.html>
64    #[inline]
65    pub unsafe fn destroy_cuda_module(
66        &self,
67        module: vk::CudaModuleNV,
68        allocator: Option<&vk::AllocationCallbacks<'_>>,
69    ) {
70        unsafe { (self.fp.destroy_cuda_module_nv)(self.handle, module, allocator.as_raw_ptr()) }
71    }
72
73    /// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/vkDestroyCudaFunctionNV.html>
74    #[inline]
75    pub unsafe fn destroy_cuda_function(
76        &self,
77        function: vk::CudaFunctionNV,
78        allocator: Option<&vk::AllocationCallbacks<'_>>,
79    ) {
80        unsafe { (self.fp.destroy_cuda_function_nv)(self.handle, function, allocator.as_raw_ptr()) }
81    }
82
83    /// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/vkCmdCudaLaunchKernelNV.html>
84    #[inline]
85    pub unsafe fn cmd_cuda_launch_kernel(
86        &self,
87        command_buffer: vk::CommandBuffer,
88        launch_info: &vk::CudaLaunchInfoNV<'_>,
89    ) {
90        unsafe { (self.fp.cmd_cuda_launch_kernel_nv)(command_buffer, launch_info) }
91    }
92}