@@ -26,6 +26,7 @@ pub enum MTLAccelerationStructureInstanceDescriptorType {
26
26
Default = 0 ,
27
27
UserID = 1 ,
28
28
Motion = 2 ,
29
+ Indirect = 3 ,
29
30
}
30
31
31
32
#[ derive( Clone , Copy , PartialEq , Debug , Default ) ]
@@ -49,6 +50,17 @@ pub struct MTLAccelerationStructureUserIDInstanceDescriptor {
49
50
pub user_id : u32 ,
50
51
}
51
52
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
+
52
64
pub enum MTLAccelerationStructureDescriptor { }
53
65
54
66
foreign_obj_type ! {
@@ -252,6 +264,73 @@ impl InstanceAccelerationStructureDescriptorRef {
252
264
}
253
265
}
254
266
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
+
255
334
pub enum MTLAccelerationStructureCommandEncoder { }
256
335
257
336
foreign_obj_type ! {
0 commit comments