@@ -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 } ;
@@ -1625,8 +1626,40 @@ impl crate::Device for super::Device {
1625
1626
// self.counters.acceleration_structures.sub(1);
1626
1627
}
1627
1628
1628
- fn tlas_instance_to_bytes ( & self , _instance : TlasInstance ) -> Vec < u8 > {
1629
- unimplemented ! ( )
1629
+ fn tlas_instance_to_bytes ( & self , instance : TlasInstance ) -> Vec < u8 > {
1630
+ let temp = metal:: MTLIndirectAccelerationStructureInstanceDescriptor {
1631
+ transformation_matrix : [
1632
+ [
1633
+ instance. transform [ 0 ] ,
1634
+ instance. transform [ 4 ] ,
1635
+ instance. transform [ 8 ] ,
1636
+ ] ,
1637
+ [
1638
+ instance. transform [ 1 ] ,
1639
+ instance. transform [ 5 ] ,
1640
+ instance. transform [ 9 ] ,
1641
+ ] ,
1642
+ [
1643
+ instance. transform [ 2 ] ,
1644
+ instance. transform [ 6 ] ,
1645
+ instance. transform [ 10 ] ,
1646
+ ] ,
1647
+ [
1648
+ instance. transform [ 3 ] ,
1649
+ instance. transform [ 7 ] ,
1650
+ instance. transform [ 11 ] ,
1651
+ ] ,
1652
+ ] ,
1653
+ options : metal:: MTLAccelerationStructureInstanceOptions :: None ,
1654
+ mask : instance. mask as u32 ,
1655
+ intersection_function_table_offset : 0 ,
1656
+ acceleration_structure_id : instance. blas_address ,
1657
+ user_id : instance. custom_data ,
1658
+ } ;
1659
+
1660
+ wgt:: bytemuck_wrapper!( unsafe struct Desc ( metal:: MTLIndirectAccelerationStructureInstanceDescriptor ) ) ;
1661
+
1662
+ bytemuck:: bytes_of ( & Desc :: wrap ( temp) ) . to_vec ( )
1630
1663
}
1631
1664
1632
1665
fn get_internal_counters ( & self ) -> wgt:: HalCounters {
0 commit comments