Skip to content

Commit af4dfa6

Browse files
committed
Implements Device::tlas_instance_to_bytes().
1 parent 0b64717 commit af4dfa6

File tree

2 files changed

+36
-2
lines changed

2 files changed

+36
-2
lines changed

wgpu-hal/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ metal = [
7575
"naga/msl-out",
7676
"dep:arrayvec",
7777
"dep:block",
78+
"dep:bytemuck",
7879
"dep:core-graphics-types",
7980
"dep:hashbrown",
8081
"dep:libc",

wgpu-hal/src/metal/device.rs

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ use alloc::{borrow::ToOwned as _, sync::Arc, vec::Vec};
22
use core::{ptr::NonNull, sync::atomic};
33
use std::{thread, time};
44

5+
use bytemuck::TransparentWrapper;
56
use parking_lot::Mutex;
67

78
use super::{conv, PassthroughShader};
@@ -1625,8 +1626,40 @@ impl crate::Device for super::Device {
16251626
// self.counters.acceleration_structures.sub(1);
16261627
}
16271628

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()
16301663
}
16311664

16321665
fn get_internal_counters(&self) -> wgt::HalCounters {

0 commit comments

Comments
 (0)