Skip to content

Commit 89f3271

Browse files
committed
extensions/khr: Add VK_KHR_ray_tracing_maintenance1 device extension (#620)
1 parent 85b2696 commit 89f3271

File tree

4 files changed

+47
-0
lines changed

4 files changed

+47
-0
lines changed

Changelog.md

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1717
- Update Vulkan-Headers to 1.3.219 (#605, #608, #619)
1818
- Added `VK_EXT_sample_locations` device extension (#616)
1919
- Added `VK_NV_coverage_reduction_mode` device extension (#617)
20+
- Added `VK_KHR_ray_tracing_maintenance1` device extension (#620)
2021
- Added new functions to `VK_KHR_swapchain`, available since Vulkan 1.1 (#629)
2122
- Added `VK_KHR_device_group_creation` instance extension (#630)
2223
- Added `VK_KHR_device_group` device extension (#631)

ash/src/extensions/khr/mod.rs

+2
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ pub use self::maintenance4::Maintenance4;
2525
pub use self::pipeline_executable_properties::PipelineExecutableProperties;
2626
pub use self::present_wait::PresentWait;
2727
pub use self::push_descriptor::PushDescriptor;
28+
pub use self::ray_tracing_maintenance1::RayTracingMaintenance1;
2829
pub use self::ray_tracing_pipeline::RayTracingPipeline;
2930
pub use self::surface::Surface;
3031
pub use self::swapchain::Swapchain;
@@ -62,6 +63,7 @@ mod maintenance4;
6263
mod pipeline_executable_properties;
6364
mod present_wait;
6465
mod push_descriptor;
66+
mod ray_tracing_maintenance1;
6567
mod ray_tracing_pipeline;
6668
mod surface;
6769
mod swapchain;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
use crate::vk;
2+
use crate::{Device, Instance};
3+
use std::ffi::CStr;
4+
use std::mem;
5+
6+
/// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_KHR_ray_tracing_maintenance1.html>
7+
#[derive(Clone)]
8+
pub struct RayTracingMaintenance1 {
9+
fp: vk::KhrRayTracingMaintenance1Fn,
10+
}
11+
12+
impl RayTracingMaintenance1 {
13+
pub fn new(instance: &Instance, device: &Device) -> Self {
14+
let handle = device.handle();
15+
let fp = vk::KhrRayTracingMaintenance1Fn::load(|name| unsafe {
16+
mem::transmute(instance.get_device_proc_addr(handle, name.as_ptr()))
17+
});
18+
Self { fp }
19+
}
20+
21+
/// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdTraceRaysIndirect2KHR.html>
22+
///
23+
/// `indirect_device_address` is a buffer device address which is a pointer to a [`vk::TraceRaysIndirectCommand2KHR`] structure containing the trace ray parameters.
24+
#[inline]
25+
pub unsafe fn cmd_trace_rays_indirect2(
26+
&self,
27+
command_buffer: vk::CommandBuffer,
28+
indirect_device_address: vk::DeviceAddress,
29+
) {
30+
(self.fp.cmd_trace_rays_indirect2_khr)(command_buffer, indirect_device_address);
31+
}
32+
33+
#[inline]
34+
pub const fn name() -> &'static CStr {
35+
vk::KhrRayTracingMaintenance1Fn::name()
36+
}
37+
38+
#[inline]
39+
pub fn fp(&self) -> &vk::KhrRayTracingMaintenance1Fn {
40+
&self.fp
41+
}
42+
}

ash/src/extensions/khr/ray_tracing_pipeline.rs

+2
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,8 @@ impl RayTracingPipeline {
122122
}
123123

124124
/// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdTraceRaysIndirectKHR.html>
125+
///
126+
/// `indirect_device_address` is a buffer device address which is a pointer to a [`vk::TraceRaysIndirectCommandKHR`] structure containing the trace ray parameters.
125127
pub unsafe fn cmd_trace_rays_indirect(
126128
&self,
127129
command_buffer: vk::CommandBuffer,

0 commit comments

Comments
 (0)