| 1 | // Copyright 2009-2021 Intel Corporation |
| 2 | // SPDX-License-Identifier: Apache-2.0 |
| 3 | |
| 4 | #include "bvh_builder.h" |
| 5 | |
| 6 | namespace embree |
| 7 | { |
| 8 | namespace isa |
| 9 | { |
| 10 | template<int N> |
| 11 | typename BVHN<N>::NodeRef BVHNBuilderVirtual<N>::BVHNBuilderV::build(FastAllocator* allocator, BuildProgressMonitor& progressFunc, PrimRef* prims, const PrimInfo& pinfo, GeneralBVHBuilder::Settings settings) |
| 12 | { |
| 13 | auto createLeafFunc = [&] (const PrimRef* prims, const range<size_t>& set, const Allocator& alloc) -> NodeRef { |
| 14 | return createLeaf(prims,set,alloc); |
| 15 | }; |
| 16 | |
| 17 | settings.branchingFactor = N; |
| 18 | settings.maxDepth = BVH::maxBuildDepthLeaf; |
| 19 | return BVHBuilderBinnedSAH::build<NodeRef> |
| 20 | (FastAllocator::Create(allocator),typename BVH::AABBNode::Create2(),typename BVH::AABBNode::Set3(allocator,prims),createLeafFunc,progressFunc,prims,pinfo,settings); |
| 21 | } |
| 22 | |
| 23 | |
| 24 | template<int N> |
| 25 | typename BVHN<N>::NodeRef BVHNBuilderQuantizedVirtual<N>::BVHNBuilderV::build(FastAllocator* allocator, BuildProgressMonitor& progressFunc, PrimRef* prims, const PrimInfo& pinfo, GeneralBVHBuilder::Settings settings) |
| 26 | { |
| 27 | auto createLeafFunc = [&] (const PrimRef* prims, const range<size_t>& set, const Allocator& alloc) -> NodeRef { |
| 28 | return createLeaf(prims,set,alloc); |
| 29 | }; |
| 30 | |
| 31 | settings.branchingFactor = N; |
| 32 | settings.maxDepth = BVH::maxBuildDepthLeaf; |
| 33 | return BVHBuilderBinnedSAH::build<NodeRef> |
| 34 | (FastAllocator::Create(allocator),typename BVH::QuantizedNode::Create2(),typename BVH::QuantizedNode::Set2(),createLeafFunc,progressFunc,prims,pinfo,settings); |
| 35 | } |
| 36 | |
| 37 | template<int N> |
| 38 | typename BVHN<N>::NodeRecordMB BVHNBuilderMblurVirtual<N>::BVHNBuilderV::build(FastAllocator* allocator, BuildProgressMonitor& progressFunc, PrimRef* prims, const PrimInfo& pinfo, GeneralBVHBuilder::Settings settings, const BBox1f& timeRange) |
| 39 | { |
| 40 | auto createLeafFunc = [&] (const PrimRef* prims, const range<size_t>& set, const Allocator& alloc) -> NodeRecordMB { |
| 41 | return createLeaf(prims,set,alloc); |
| 42 | }; |
| 43 | |
| 44 | settings.branchingFactor = N; |
| 45 | settings.maxDepth = BVH::maxBuildDepthLeaf; |
| 46 | return BVHBuilderBinnedSAH::build<NodeRecordMB> |
| 47 | (FastAllocator::Create(allocator),typename BVH::AABBNodeMB::Create(),typename BVH::AABBNodeMB::SetTimeRange(timeRange),createLeafFunc,progressFunc,prims,pinfo,settings); |
| 48 | } |
| 49 | |
| 50 | template struct BVHNBuilderVirtual<4>; |
| 51 | template struct BVHNBuilderQuantizedVirtual<4>; |
| 52 | template struct BVHNBuilderMblurVirtual<4>; |
| 53 | |
| 54 | #if defined(__AVX__) |
| 55 | template struct BVHNBuilderVirtual<8>; |
| 56 | template struct BVHNBuilderQuantizedVirtual<8>; |
| 57 | template struct BVHNBuilderMblurVirtual<8>; |
| 58 | #endif |
| 59 | } |
| 60 | } |
| 61 | |