Skip to content

Commit a35d3f2

Browse files
committed
Implement indirect acceleration structure
1 parent 75203a8 commit a35d3f2

File tree

1 file changed

+79
-0
lines changed

1 file changed

+79
-0
lines changed

src/accelerator_structure.rs

+79
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ pub enum MTLAccelerationStructureInstanceDescriptorType {
2626
Default = 0,
2727
UserID = 1,
2828
Motion = 2,
29+
Indirect = 3,
2930
}
3031

3132
#[derive(Clone, Copy, PartialEq, Debug, Default)]
@@ -49,6 +50,17 @@ pub struct MTLAccelerationStructureUserIDInstanceDescriptor {
4950
pub user_id: u32,
5051
}
5152

53+
#[derive(Clone, Copy, PartialEq, Debug, Default)]
54+
#[repr(C)]
55+
pub struct MTLIndirectAccelerationStructureInstanceDescriptor {
56+
pub transformation_matrix: [[f32; 3]; 4],
57+
pub options: MTLAccelerationStructureInstanceOptions,
58+
pub mask: u32,
59+
pub intersection_function_table_offset: u32,
60+
pub user_id: u32,
61+
pub acceleration_structure_id: u64,
62+
}
63+
5264
pub enum MTLAccelerationStructureDescriptor {}
5365

5466
foreign_obj_type! {
@@ -252,6 +264,73 @@ impl InstanceAccelerationStructureDescriptorRef {
252264
}
253265
}
254266

267+
pub enum MTLIndirectInstanceAccelerationStructureDescriptor {}
268+
269+
foreign_obj_type! {
270+
type CType = MTLIndirectInstanceAccelerationStructureDescriptor;
271+
pub struct IndirectInstanceAccelerationStructureDescriptor;
272+
type ParentType = AccelerationStructureDescriptor;
273+
}
274+
275+
impl IndirectInstanceAccelerationStructureDescriptor {
276+
pub fn descriptor() -> Self {
277+
unsafe {
278+
let class = class!(MTLIndirectInstanceAccelerationStructureDescriptor);
279+
msg_send![class, descriptor]
280+
}
281+
}
282+
}
283+
284+
impl IndirectInstanceAccelerationStructureDescriptorRef {
285+
pub fn set_instance_descriptor_buffer(&self, buffer: &BufferRef) {
286+
unsafe { msg_send![self, setInstanceDescriptorBuffer: buffer] }
287+
}
288+
289+
pub fn set_instance_descriptor_buffer_offset(&self, offset: NSUInteger) {
290+
unsafe { msg_send![self, setInstanceDescriptorBufferOffset: offset] }
291+
}
292+
293+
pub fn set_instance_descriptor_stride(&self, stride: NSUInteger) {
294+
unsafe { msg_send![self, setInstanceDescriptorStride: stride] }
295+
}
296+
297+
pub fn set_max_instance_count(&self, count: NSUInteger) {
298+
unsafe { msg_send![self, setMaxInstanceCount: count] }
299+
}
300+
301+
pub fn set_instance_count_buffer(&self, buffer: &BufferRef) {
302+
unsafe { msg_send![self, setInstanceCountBuffer: buffer] }
303+
}
304+
305+
pub fn set_instance_count_buffer_offset(&self, offset: NSUInteger) {
306+
unsafe { msg_send![self, setInstanceCountBufferOffset: offset] }
307+
}
308+
309+
pub fn set_instance_descriptor_type(&self, ty: MTLAccelerationStructureInstanceDescriptorType) {
310+
unsafe { msg_send![self, setInstanceDescriptorType: ty] }
311+
}
312+
313+
pub fn set_motion_transform_buffer(&self, buffer: &BufferRef) {
314+
unsafe { msg_send![self, setMotionTransformBuffer: buffer] }
315+
}
316+
317+
pub fn set_motion_transform_buffer_offset(&self, offset: NSUInteger) {
318+
unsafe { msg_send![self, setMotionTransformBufferOffset: offset] }
319+
}
320+
321+
pub fn set_max_motion_transform_count(&self, count: NSUInteger) {
322+
unsafe { msg_send![self, setMaxMotionTransformCount: count] }
323+
}
324+
325+
pub fn set_motion_transform_count_buffer(&self, buffer: &BufferRef) {
326+
unsafe { msg_send![self, setMotionTransformCountBuffer: buffer] }
327+
}
328+
329+
pub fn set_motion_transform_count_buffer_offset(&self, offset: NSUInteger) {
330+
unsafe { msg_send![self, setMotionTransformCountBufferOffset: offset] }
331+
}
332+
}
333+
255334
pub enum MTLAccelerationStructureCommandEncoder {}
256335

257336
foreign_obj_type! {

0 commit comments

Comments
 (0)