@@ -2,6 +2,7 @@ use alloc::{borrow::ToOwned as _, sync::Arc, vec::Vec};
2
2
use core:: { ptr:: NonNull , sync:: atomic} ;
3
3
use std:: { thread, time} ;
4
4
5
+ use bytemuck:: TransparentWrapper ;
5
6
use parking_lot:: Mutex ;
6
7
7
8
use super :: { conv, PassthroughShader } ;
@@ -1629,8 +1630,40 @@ impl crate::Device for super::Device {
1629
1630
// self.counters.acceleration_structures.sub(1);
1630
1631
}
1631
1632
1632
- fn tlas_instance_to_bytes ( & self , _instance : TlasInstance ) -> Vec < u8 > {
1633
- unimplemented ! ( )
1633
+ fn tlas_instance_to_bytes ( & self , instance : TlasInstance ) -> Vec < u8 > {
1634
+ let temp = metal:: MTLIndirectAccelerationStructureInstanceDescriptor {
1635
+ transformation_matrix : [
1636
+ [
1637
+ instance. transform [ 0 ] ,
1638
+ instance. transform [ 4 ] ,
1639
+ instance. transform [ 8 ] ,
1640
+ ] ,
1641
+ [
1642
+ instance. transform [ 1 ] ,
1643
+ instance. transform [ 5 ] ,
1644
+ instance. transform [ 9 ] ,
1645
+ ] ,
1646
+ [
1647
+ instance. transform [ 2 ] ,
1648
+ instance. transform [ 6 ] ,
1649
+ instance. transform [ 10 ] ,
1650
+ ] ,
1651
+ [
1652
+ instance. transform [ 3 ] ,
1653
+ instance. transform [ 7 ] ,
1654
+ instance. transform [ 11 ] ,
1655
+ ] ,
1656
+ ] ,
1657
+ options : metal:: MTLAccelerationStructureInstanceOptions :: None ,
1658
+ mask : instance. mask as u32 ,
1659
+ intersection_function_table_offset : 0 ,
1660
+ acceleration_structure_id : instance. blas_address ,
1661
+ user_id : instance. custom_data ,
1662
+ } ;
1663
+
1664
+ wgt:: bytemuck_wrapper!( unsafe struct Desc ( metal:: MTLIndirectAccelerationStructureInstanceDescriptor ) ) ;
1665
+
1666
+ bytemuck:: bytes_of ( & Desc :: wrap ( temp) ) . to_vec ( )
1634
1667
}
1635
1668
1636
1669
fn get_internal_counters ( & self ) -> wgt:: HalCounters {
0 commit comments