@@ -2,6 +2,7 @@ use alloc::{borrow::ToOwned as _, sync::Arc, vec::Vec};
22use core:: { ptr:: NonNull , sync:: atomic} ;
33use std:: { thread, time} ;
44
5+ use bytemuck:: TransparentWrapper ;
56use parking_lot:: Mutex ;
67
78use super :: { conv, PassthroughShader } ;
@@ -1629,8 +1630,40 @@ impl crate::Device for super::Device {
16291630 // self.counters.acceleration_structures.sub(1);
16301631 }
16311632
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 ( )
16341667 }
16351668
16361669 fn get_internal_counters ( & self ) -> wgt:: HalCounters {
0 commit comments