277277< a href ="#276 " id ="276 "> 276</ a >
278278< a href ="#277 " id ="277 "> 277</ a >
279279< a href ="#278 " id ="278 "> 278</ a >
280- < a href ="#279 " id ="279 "> 279</ a >
281- < a href ="#280 " id ="280 "> 280</ a >
282- < a href ="#281 " id ="281 "> 281</ a >
283- < a href ="#282 " id ="282 "> 282</ a >
284- < a href ="#283 " id ="283 "> 283</ a >
285- < a href ="#284 " id ="284 "> 284</ a >
286- < a href ="#285 " id ="285 "> 285</ a >
287- < a href ="#286 " id ="286 "> 286</ a >
288- < a href ="#287 " id ="287 "> 287</ a >
289- < a href ="#288 " id ="288 "> 288</ a >
290- < a href ="#289 " id ="289 "> 289</ a >
291- < a href ="#290 " id ="290 "> 290</ a >
292- < a href ="#291 " id ="291 "> 291</ a >
293- < a href ="#292 " id ="292 "> 292</ a >
294- < a href ="#293 " id ="293 "> 293</ a >
295- < a href ="#294 " id ="294 "> 294</ a >
296- < a href ="#295 " id ="295 "> 295</ a >
297- < a href ="#296 " id ="296 "> 296</ a >
298- < a href ="#297 " id ="297 "> 297</ a >
299- < a href ="#298 " id ="298 "> 298</ a >
300- < a href ="#299 " id ="299 "> 299</ a >
301- < a href ="#300 " id ="300 "> 300</ a >
302- < a href ="#301 " id ="301 "> 301</ a >
303- < a href ="#302 " id ="302 "> 302</ a >
304- < a href ="#303 " id ="303 "> 303</ a >
305- < a href ="#304 " id ="304 "> 304</ a >
306- < a href ="#305 " id ="305 "> 305</ a >
307- < a href ="#306 " id ="306 "> 306</ a >
308- < a href ="#307 " id ="307 "> 307</ a >
309- < a href ="#308 " id ="308 "> 308</ a >
310- < a href ="#309 " id ="309 "> 309</ a >
311- < a href ="#310 " id ="310 "> 310</ a >
312- < a href ="#311 " id ="311 "> 311</ a >
313- < a href ="#312 " id ="312 "> 312</ a >
314- < a href ="#313 " id ="313 "> 313</ a >
315- < a href ="#314 " id ="314 "> 314</ a >
316- < a href ="#315 " id ="315 "> 315</ a >
317- < a href ="#316 " id ="316 "> 316</ a >
318- < a href ="#317 " id ="317 "> 317</ a >
319- < a href ="#318 " id ="318 "> 318</ a >
320- < a href ="#319 " id ="319 "> 319</ a >
321- < a href ="#320 " id ="320 "> 320</ a >
322- < a href ="#321 " id ="321 "> 321</ a >
323- < a href ="#322 " id ="322 "> 322</ a >
324- < a href ="#323 " id ="323 "> 323</ a >
325280</ pre > </ div > < pre class ="rust "> < code > < span class ="comment "> // Ray tracing
326281// Major missing optimizations (no api surface changes needed):
327282// - use custom tracker to track build state
337292 id::{BlasId, BufferId, TlasId},
338293 resource::CreateBufferError,
339294};
340- < span class ="kw "> use </ span > std::{mem::size_of, sync::Arc} ;
341- < span class ="kw "> use </ span > std::{num::NonZeroU64, slice} ;
295+ < span class ="kw "> use </ span > std::num::NonZeroU64 ;
296+ < span class ="kw "> use </ span > std::sync::Arc ;
342297
343298< span class ="kw "> use </ span > < span class ="kw "> crate</ span > ::resource::{Blas, ResourceErrorIdent, Tlas};
344299< span class ="kw "> use </ span > thiserror::Error;
600555 < span class ="kw "> pub </ span > instances: Vec<< span class ="prelude-ty "> Option</ span > <TraceTlasInstance>>,
601556 < span class ="kw "> pub </ span > lowest_unmodified: u32,
602557}
603-
604- < span class ="kw "> pub</ span > (< span class ="kw "> crate</ span > ) < span class ="kw "> fn </ span > get_raw_tlas_instance_size(backend: wgt::Backend) -> usize {
605- < span class ="comment "> // TODO: this should be provided by the backend
606- </ span > < span class ="kw "> match </ span > backend {
607- wgt::Backend::Empty => < span class ="number "> 0</ span > ,
608- wgt::Backend::Vulkan => < span class ="number "> 64</ span > ,
609- < span class ="kw "> _ </ span > => < span class ="macro "> unimplemented!</ span > (),
610- }
611- }
612-
613- < span class ="attr "> #[derive(Clone)]
614- #[repr(C)]
615- </ span > < span class ="kw "> struct </ span > RawTlasInstance {
616- transform: [f32; < span class ="number "> 12</ span > ],
617- custom_index_and_mask: u32,
618- shader_binding_table_record_offset_and_flags: u32,
619- acceleration_structure_reference: u64,
620- }
621-
622- < span class ="kw "> pub</ span > (< span class ="kw "> crate</ span > ) < span class ="kw "> fn </ span > tlas_instance_into_bytes(
623- instance: < span class ="kw-2 "> &</ span > TlasInstance,
624- blas_address: u64,
625- backend: wgt::Backend,
626- ) -> Vec<u8> {
627- < span class ="comment "> // TODO: get the device to do this
628- </ span > < span class ="kw "> match </ span > backend {
629- wgt::Backend::Empty => < span class ="macro "> vec!</ span > [],
630- wgt::Backend::Vulkan => {
631- < span class ="kw "> const </ span > MAX_U24: u32 = (< span class ="number "> 1u32 </ span > << < span class ="number "> 24u32</ span > ) - < span class ="number "> 1u32</ span > ;
632- < span class ="kw "> let </ span > temp = RawTlasInstance {
633- transform: < span class ="kw-2 "> *</ span > instance.transform,
634- custom_index_and_mask: (instance.custom_index & MAX_U24)
635- | (u32::from(instance.mask) << < span class ="number "> 24</ span > ),
636- shader_binding_table_record_offset_and_flags: < span class ="number "> 0</ span > ,
637- acceleration_structure_reference: blas_address,
638- };
639- < span class ="kw "> let </ span > temp: < span class ="kw-2 "> *const </ span > < span class ="kw "> _ </ span > = < span class ="kw-2 "> &</ span > temp;
640- < span class ="kw "> unsafe </ span > {
641- slice::from_raw_parts::<u8>(temp.cast::<u8>(), size_of::<RawTlasInstance>())
642- .to_vec()
643- }
644- }
645- < span class ="kw "> _ </ span > => < span class ="macro "> unimplemented!</ span > (),
646- }
647- }
648558</ code > </ pre > </ div > </ section > </ main > </ body > </ html >
0 commit comments