Skip to content

TLAS and MultitypeSet#14

Open
SimonDanisch wants to merge 34 commits intomasterfrom
sd/multitype-vec
Open

TLAS and MultitypeSet#14
SimonDanisch wants to merge 34 commits intomasterfrom
sd/multitype-vec

Conversation

@SimonDanisch
Copy link
Member

This adds:

  • GPU two-level acceleration (TLAS/BLAS): Instanced BVH with per-instance transforms, TLAS/StaticTLAS split (mutable for construction, immutable isbits for kernel traversal), Adapt.jl for CPU→GPU transfer
  • MultiTypeSet: GPU-safe heterogeneous collection with compile-time type-stable dispatch via with_index, enabling multiple material/texture types without dynamic dispatch on the GPU
  • GPU utilities: @get/@set SoA macros, for_unrolled/map_unrolled/reduce_unrolled for compile-time loop unrolling, FastClosure for GPU-safe closures

SimonDanisch and others added 30 commits December 22, 2025 19:23
…12)

SetKey.type_idx was changed from UInt8 to UInt32 for LLVM/SPIR-V
compatibility, but the @generated with_index function still compared
against UInt8 literals. Since Julia's === checks both value and type,
UInt32(1) === UInt8(1) is always false, causing all branches to fall
through to the default (first material). This made every object render
with the same material.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
On Metal, device pointers (Core.LLVMPtr) stored inside GPU buffers
cannot be reliably dereferenced by kernels. The inline data (root_aabb)
reads correctly, but following embedded pointers to per-BLAS node/primitive
arrays returns zeros.

Replace the pointer-based BLAS architecture in StaticTLAS with:
- BLASDescriptor: lightweight struct with nodes_offset, primitives_offset, root_aabb
- Flat concatenated arrays (all_blas_nodes, all_blas_prims) built from per-BLAS GPU arrays
- Offset-based indexing in closest_hit/any_hit traversal

Management kernels (update_tlas_leaf_aabbs_kernel!, etc.) still use
blas_array but only read root_aabb (inline, unaffected).

Verified: CPU and Metal produce identical results (mean pixel ~0.327
on 3-sphere test scene).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@SimonDanisch SimonDanisch mentioned this pull request Mar 2, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants