Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement indirect instance acceleration structure #314

Merged
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
85 changes: 85 additions & 0 deletions src/accelerator_structure.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ pub enum MTLAccelerationStructureInstanceDescriptorType {
Default = 0,
UserID = 1,
Motion = 2,
Indirect = 3,
}

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

#[derive(Clone, Copy, PartialEq, Debug, Default)]
#[repr(C)]
pub struct MTLIndirectAccelerationStructureInstanceDescriptor {
pub transformation_matrix: [[f32; 3]; 4],
pub options: MTLAccelerationStructureInstanceOptions,
pub mask: u32,
pub intersection_function_table_offset: u32,
pub user_id: u32,
pub acceleration_structure_id: u64,
}

pub enum MTLAccelerationStructureDescriptor {}

foreign_obj_type! {
Expand Down Expand Up @@ -91,6 +103,12 @@ foreign_obj_type! {
type ParentType = Resource;
}

impl AccelerationStructureRef {
pub fn gpu_resource_id(&self) -> MTLResourceID {
unsafe { msg_send![self, gpuResourceID] }
}
}

pub enum MTLAccelerationStructureGeometryDescriptor {}

foreign_obj_type! {
Expand Down Expand Up @@ -252,6 +270,73 @@ impl InstanceAccelerationStructureDescriptorRef {
}
}

pub enum MTLIndirectInstanceAccelerationStructureDescriptor {}

foreign_obj_type! {
type CType = MTLIndirectInstanceAccelerationStructureDescriptor;
pub struct IndirectInstanceAccelerationStructureDescriptor;
type ParentType = AccelerationStructureDescriptor;
}

impl IndirectInstanceAccelerationStructureDescriptor {
pub fn descriptor() -> Self {
unsafe {
let class = class!(MTLIndirectInstanceAccelerationStructureDescriptor);
msg_send![class, descriptor]
}
}
}

impl IndirectInstanceAccelerationStructureDescriptorRef {
pub fn set_instance_descriptor_buffer(&self, buffer: &BufferRef) {
unsafe { msg_send![self, setInstanceDescriptorBuffer: buffer] }
}

pub fn set_instance_descriptor_buffer_offset(&self, offset: NSUInteger) {
unsafe { msg_send![self, setInstanceDescriptorBufferOffset: offset] }
}

pub fn set_instance_descriptor_stride(&self, stride: NSUInteger) {
unsafe { msg_send![self, setInstanceDescriptorStride: stride] }
}

pub fn set_max_instance_count(&self, count: NSUInteger) {
unsafe { msg_send![self, setMaxInstanceCount: count] }
}

pub fn set_instance_count_buffer(&self, buffer: &BufferRef) {
unsafe { msg_send![self, setInstanceCountBuffer: buffer] }
}

pub fn set_instance_count_buffer_offset(&self, offset: NSUInteger) {
unsafe { msg_send![self, setInstanceCountBufferOffset: offset] }
}

pub fn set_instance_descriptor_type(&self, ty: MTLAccelerationStructureInstanceDescriptorType) {
unsafe { msg_send![self, setInstanceDescriptorType: ty] }
}

pub fn set_motion_transform_buffer(&self, buffer: &BufferRef) {
unsafe { msg_send![self, setMotionTransformBuffer: buffer] }
}

pub fn set_motion_transform_buffer_offset(&self, offset: NSUInteger) {
unsafe { msg_send![self, setMotionTransformBufferOffset: offset] }
}

pub fn set_max_motion_transform_count(&self, count: NSUInteger) {
unsafe { msg_send![self, setMaxMotionTransformCount: count] }
}

pub fn set_motion_transform_count_buffer(&self, buffer: &BufferRef) {
unsafe { msg_send![self, setMotionTransformCountBuffer: buffer] }
}

pub fn set_motion_transform_count_buffer_offset(&self, offset: NSUInteger) {
unsafe { msg_send![self, setMotionTransformCountBufferOffset: offset] }
}
}

pub enum MTLAccelerationStructureCommandEncoder {}

foreign_obj_type! {
Expand Down
Loading