summaryrefslogtreecommitdiffstats
path: root/third_party/rust/ash/src/extensions/nv
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/ash/src/extensions/nv')
-rwxr-xr-xthird_party/rust/ash/src/extensions/nv/mesh_shader.rs74
-rw-r--r--third_party/rust/ash/src/extensions/nv/mod.rs5
-rwxr-xr-xthird_party/rust/ash/src/extensions/nv/ray_tracing.rs282
3 files changed, 361 insertions, 0 deletions
diff --git a/third_party/rust/ash/src/extensions/nv/mesh_shader.rs b/third_party/rust/ash/src/extensions/nv/mesh_shader.rs
new file mode 100755
index 0000000000..61822b3989
--- /dev/null
+++ b/third_party/rust/ash/src/extensions/nv/mesh_shader.rs
@@ -0,0 +1,74 @@
+#![allow(dead_code)]
+use crate::version::{DeviceV1_0, InstanceV1_0};
+use crate::vk;
+use std::ffi::CStr;
+use std::mem;
+
+#[derive(Clone)]
+pub struct MeshShader {
+ mesh_shader_fn: vk::NvMeshShaderFn,
+}
+
+impl MeshShader {
+ pub fn new<I: InstanceV1_0, D: DeviceV1_0>(instance: &I, device: &D) -> MeshShader {
+ let mesh_shader_fn = vk::NvMeshShaderFn::load(|name| unsafe {
+ mem::transmute(instance.get_device_proc_addr(device.handle(), name.as_ptr()))
+ });
+ MeshShader { mesh_shader_fn }
+ }
+ #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdDrawMeshTasksNV.html>"]
+ pub unsafe fn cmd_draw_mesh_tasks(
+ &self,
+ command_buffer: vk::CommandBuffer,
+ task_count: u32,
+ first_task: u32,
+ ) {
+ self.mesh_shader_fn
+ .cmd_draw_mesh_tasks_nv(command_buffer, task_count, first_task);
+ }
+ #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdDrawMeshTasksIndirectNV.html>"]
+ pub unsafe fn cmd_draw_mesh_tasks_indirect(
+ &self,
+ command_buffer: vk::CommandBuffer,
+ buffer: vk::Buffer,
+ offset: vk::DeviceSize,
+ draw_count: u32,
+ stride: u32,
+ ) {
+ self.mesh_shader_fn.cmd_draw_mesh_tasks_indirect_nv(
+ command_buffer,
+ buffer,
+ offset,
+ draw_count,
+ stride,
+ );
+ }
+ #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdDrawMeshTasksIndirectCountNV.html>"]
+ pub unsafe fn 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,
+ ) {
+ self.mesh_shader_fn.cmd_draw_mesh_tasks_indirect_count_nv(
+ command_buffer,
+ buffer,
+ offset,
+ count_buffer,
+ count_buffer_offset,
+ max_draw_count,
+ stride,
+ );
+ }
+ pub fn name() -> &'static CStr {
+ vk::NvMeshShaderFn::name()
+ }
+
+ pub fn fp(&self) -> &vk::NvMeshShaderFn {
+ &self.mesh_shader_fn
+ }
+}
diff --git a/third_party/rust/ash/src/extensions/nv/mod.rs b/third_party/rust/ash/src/extensions/nv/mod.rs
new file mode 100644
index 0000000000..ffc0c01970
--- /dev/null
+++ b/third_party/rust/ash/src/extensions/nv/mod.rs
@@ -0,0 +1,5 @@
+pub use self::mesh_shader::MeshShader;
+pub use self::ray_tracing::RayTracing;
+
+mod mesh_shader;
+mod ray_tracing;
diff --git a/third_party/rust/ash/src/extensions/nv/ray_tracing.rs b/third_party/rust/ash/src/extensions/nv/ray_tracing.rs
new file mode 100755
index 0000000000..af55f6bed7
--- /dev/null
+++ b/third_party/rust/ash/src/extensions/nv/ray_tracing.rs
@@ -0,0 +1,282 @@
+#![allow(dead_code)]
+use crate::prelude::*;
+use crate::version::{DeviceV1_0, InstanceV1_0, InstanceV1_1};
+use crate::vk;
+use crate::RawPtr;
+use std::ffi::CStr;
+use std::mem;
+
+#[derive(Clone)]
+pub struct RayTracing {
+ handle: vk::Device,
+ ray_tracing_fn: vk::NvRayTracingFn,
+}
+
+impl RayTracing {
+ pub fn new<I: InstanceV1_0, D: DeviceV1_0>(instance: &I, device: &D) -> RayTracing {
+ let ray_tracing_fn = vk::NvRayTracingFn::load(|name| unsafe {
+ mem::transmute(instance.get_device_proc_addr(device.handle(), name.as_ptr()))
+ });
+ RayTracing {
+ handle: device.handle(),
+ ray_tracing_fn,
+ }
+ }
+
+ pub unsafe fn get_properties<I: InstanceV1_1>(
+ instance: &I,
+ pdevice: vk::PhysicalDevice,
+ ) -> vk::PhysicalDeviceRayTracingPropertiesNV {
+ let mut props_rt = vk::PhysicalDeviceRayTracingPropertiesNV::default();
+ {
+ let mut props = vk::PhysicalDeviceProperties2::builder().push_next(&mut props_rt);
+ instance.get_physical_device_properties2(pdevice, &mut props);
+ }
+ props_rt
+ }
+
+ #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateAccelerationStructureNV.html>"]
+ pub unsafe fn create_acceleration_structure(
+ &self,
+ create_info: &vk::AccelerationStructureCreateInfoNV,
+ allocation_callbacks: Option<&vk::AllocationCallbacks>,
+ ) -> VkResult<vk::AccelerationStructureNV> {
+ let mut accel_struct = mem::zeroed();
+ let err_code = self.ray_tracing_fn.create_acceleration_structure_nv(
+ self.handle,
+ create_info,
+ allocation_callbacks.as_raw_ptr(),
+ &mut accel_struct,
+ );
+ match err_code {
+ vk::Result::SUCCESS => Ok(accel_struct),
+ _ => Err(err_code),
+ }
+ }
+
+ #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkDestroyAccelerationStructureNV.html>"]
+ pub unsafe fn destroy_acceleration_structure(
+ &self,
+ accel_struct: vk::AccelerationStructureNV,
+ allocation_callbacks: Option<&vk::AllocationCallbacks>,
+ ) {
+ self.ray_tracing_fn.destroy_acceleration_structure_nv(
+ self.handle,
+ accel_struct,
+ allocation_callbacks.as_raw_ptr(),
+ );
+ }
+
+ #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetAccelerationStructureMemoryRequirementsNV.html>"]
+ pub unsafe fn get_acceleration_structure_memory_requirements(
+ &self,
+ info: &vk::AccelerationStructureMemoryRequirementsInfoNV,
+ ) -> vk::MemoryRequirements2KHR {
+ let mut requirements = mem::zeroed();
+ self.ray_tracing_fn
+ .get_acceleration_structure_memory_requirements_nv(
+ self.handle,
+ info,
+ &mut requirements,
+ );
+ requirements
+ }
+
+ #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkBindAccelerationStructureMemoryNV.html>"]
+ pub unsafe fn bind_acceleration_structure_memory(
+ &self,
+ bind_info: &[vk::BindAccelerationStructureMemoryInfoNV],
+ ) -> VkResult<()> {
+ let err_code = self.ray_tracing_fn.bind_acceleration_structure_memory_nv(
+ self.handle,
+ bind_info.len() as u32,
+ bind_info.as_ptr(),
+ );
+ match err_code {
+ vk::Result::SUCCESS => Ok(()),
+ _ => Err(err_code),
+ }
+ }
+
+ #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdBuildAccelerationStructureNV.html>"]
+ pub unsafe fn cmd_build_acceleration_structure(
+ &self,
+ command_buffer: vk::CommandBuffer,
+ info: &vk::AccelerationStructureInfoNV,
+ instance_data: vk::Buffer,
+ instance_offset: vk::DeviceSize,
+ update: bool,
+ dst: vk::AccelerationStructureNV,
+ src: vk::AccelerationStructureNV,
+ scratch: vk::Buffer,
+ scratch_offset: vk::DeviceSize,
+ ) {
+ self.ray_tracing_fn.cmd_build_acceleration_structure_nv(
+ command_buffer,
+ info,
+ instance_data,
+ instance_offset,
+ if update { vk::TRUE } else { vk::FALSE },
+ dst,
+ src,
+ scratch,
+ scratch_offset,
+ );
+ }
+
+ #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdCopyAccelerationStructureNV.html>"]
+ pub unsafe fn cmd_copy_acceleration_structure(
+ &self,
+ command_buffer: vk::CommandBuffer,
+ dst: vk::AccelerationStructureNV,
+ src: vk::AccelerationStructureNV,
+ mode: vk::CopyAccelerationStructureModeNV,
+ ) {
+ self.ray_tracing_fn
+ .cmd_copy_acceleration_structure_nv(command_buffer, dst, src, mode);
+ }
+
+ #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdTraceRaysNV.html>"]
+ pub unsafe fn cmd_trace_rays(
+ &self,
+ command_buffer: vk::CommandBuffer,
+ raygen_shader_binding_table_buffer: vk::Buffer,
+ raygen_shader_binding_offset: vk::DeviceSize,
+ miss_shader_binding_table_buffer: vk::Buffer,
+ miss_shader_binding_offset: vk::DeviceSize,
+ miss_shader_binding_stride: vk::DeviceSize,
+ hit_shader_binding_table_buffer: vk::Buffer,
+ hit_shader_binding_offset: vk::DeviceSize,
+ hit_shader_binding_stride: vk::DeviceSize,
+ callable_shader_binding_table_buffer: vk::Buffer,
+ callable_shader_binding_offset: vk::DeviceSize,
+ callable_shader_binding_stride: vk::DeviceSize,
+ width: u32,
+ height: u32,
+ depth: u32,
+ ) {
+ self.ray_tracing_fn.cmd_trace_rays_nv(
+ command_buffer,
+ raygen_shader_binding_table_buffer,
+ raygen_shader_binding_offset,
+ miss_shader_binding_table_buffer,
+ miss_shader_binding_offset,
+ miss_shader_binding_stride,
+ hit_shader_binding_table_buffer,
+ hit_shader_binding_offset,
+ hit_shader_binding_stride,
+ callable_shader_binding_table_buffer,
+ callable_shader_binding_offset,
+ callable_shader_binding_stride,
+ width,
+ height,
+ depth,
+ );
+ }
+
+ #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCreateRayTracingPipelinesNV.html>"]
+ pub unsafe fn create_ray_tracing_pipelines(
+ &self,
+ pipeline_cache: vk::PipelineCache,
+ create_info: &[vk::RayTracingPipelineCreateInfoNV],
+ allocation_callbacks: Option<&vk::AllocationCallbacks>,
+ ) -> VkResult<Vec<vk::Pipeline>> {
+ let mut pipelines = vec![mem::zeroed(); create_info.len()];
+ let err_code = self.ray_tracing_fn.create_ray_tracing_pipelines_nv(
+ self.handle,
+ pipeline_cache,
+ create_info.len() as u32,
+ create_info.as_ptr(),
+ allocation_callbacks.as_raw_ptr(),
+ pipelines.as_mut_ptr(),
+ );
+ match err_code {
+ vk::Result::SUCCESS => Ok(pipelines),
+ _ => Err(err_code),
+ }
+ }
+
+ #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetRayTracingShaderGroupHandlesNV.html>"]
+ pub unsafe fn get_ray_tracing_shader_group_handles(
+ &self,
+ pipeline: vk::Pipeline,
+ first_group: u32,
+ group_count: u32,
+ data: &mut [u8],
+ ) -> VkResult<()> {
+ let err_code = self.ray_tracing_fn.get_ray_tracing_shader_group_handles_nv(
+ self.handle,
+ pipeline,
+ first_group,
+ group_count,
+ data.len(),
+ data.as_mut_ptr() as *mut std::ffi::c_void,
+ );
+ match err_code {
+ vk::Result::SUCCESS => Ok(()),
+ _ => Err(err_code),
+ }
+ }
+
+ #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkGetAccelerationStructureHandleNV.html>"]
+ pub unsafe fn get_acceleration_structure_handle(
+ &self,
+ accel_struct: vk::AccelerationStructureNV,
+ ) -> VkResult<u64> {
+ let mut handle: u64 = 0;
+ let handle_ptr: *mut u64 = &mut handle;
+ let err_code = self.ray_tracing_fn.get_acceleration_structure_handle_nv(
+ self.handle,
+ accel_struct,
+ std::mem::size_of::<u64>(),
+ handle_ptr as *mut std::ffi::c_void,
+ );
+ match err_code {
+ vk::Result::SUCCESS => Ok(handle),
+ _ => Err(err_code),
+ }
+ }
+
+ #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCmdWriteAccelerationStructuresPropertiesNV.html>"]
+ pub unsafe fn cmd_write_acceleration_structures_properties(
+ &self,
+ command_buffer: vk::CommandBuffer,
+ structures: &[vk::AccelerationStructureNV],
+ query_type: vk::QueryType,
+ query_pool: vk::QueryPool,
+ first_query: u32,
+ ) {
+ self.ray_tracing_fn
+ .cmd_write_acceleration_structures_properties_nv(
+ command_buffer,
+ structures.len() as u32,
+ structures.as_ptr(),
+ query_type,
+ query_pool,
+ first_query,
+ );
+ }
+
+ #[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/vkCompileDeferredNV.html>"]
+ pub unsafe fn compile_deferred(&self, pipeline: vk::Pipeline, shader: u32) -> VkResult<()> {
+ let err_code = self
+ .ray_tracing_fn
+ .compile_deferred_nv(self.handle, pipeline, shader);
+ match err_code {
+ vk::Result::SUCCESS => Ok(()),
+ _ => Err(err_code),
+ }
+ }
+
+ pub fn name() -> &'static CStr {
+ vk::NvRayTracingFn::name()
+ }
+
+ pub fn fp(&self) -> &vk::NvRayTracingFn {
+ &self.ray_tracing_fn
+ }
+
+ pub fn device(&self) -> vk::Device {
+ self.handle
+ }
+}