mirror of
				https://github.com/godotengine/godot.git
				synced 2025-10-31 05:31:01 +00:00 
			
		
		
		
	 767e374dce
			
		
	
	
		767e374dce
		
	
	
	
	
		
			
			Since Embree v3.13.0 supports AARCH64, switch back to the official repo instead of using Embree-aarch64. `thirdparty/embree/patches/godot-changes.patch` should now contain an accurate diff of the changes done to the library.
		
			
				
	
	
		
			115 lines
		
	
	
	
		
			4.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			115 lines
		
	
	
	
		
			4.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| // Copyright 2009-2021 Intel Corporation
 | |
| // SPDX-License-Identifier: Apache-2.0
 | |
| 
 | |
| #include "bvh.h"
 | |
| #include "../builders/bvh_builder_sah.h"
 | |
| #include "../builders/bvh_builder_msmblur.h"
 | |
| 
 | |
| namespace embree
 | |
| {
 | |
|   namespace isa
 | |
|   {
 | |
|     /************************************************************************************/
 | |
|     /************************************************************************************/
 | |
|     /************************************************************************************/
 | |
|     /************************************************************************************/
 | |
| 
 | |
|     template<int N>
 | |
|       struct BVHNBuilderVirtual
 | |
|       {
 | |
|         typedef BVHN<N> BVH;
 | |
|         typedef typename BVH::NodeRef NodeRef;
 | |
|         typedef FastAllocator::CachedAllocator Allocator;
 | |
|       
 | |
|         struct BVHNBuilderV {
 | |
|           NodeRef build(FastAllocator* allocator, BuildProgressMonitor& progress, PrimRef* prims, const PrimInfo& pinfo, GeneralBVHBuilder::Settings settings);
 | |
|           virtual NodeRef createLeaf (const PrimRef* prims, const range<size_t>& set, const Allocator& alloc) = 0;
 | |
|         };
 | |
| 
 | |
|         template<typename CreateLeafFunc>
 | |
|         struct BVHNBuilderT : public BVHNBuilderV
 | |
|         {
 | |
|           BVHNBuilderT (CreateLeafFunc createLeafFunc)
 | |
|             : createLeafFunc(createLeafFunc) {}
 | |
| 
 | |
|           NodeRef createLeaf (const PrimRef* prims, const range<size_t>& set, const Allocator& alloc) {
 | |
|             return createLeafFunc(prims,set,alloc);
 | |
|           }
 | |
| 
 | |
|         private:
 | |
|           CreateLeafFunc createLeafFunc;
 | |
|         };
 | |
| 
 | |
|         template<typename CreateLeafFunc>
 | |
|         static NodeRef build(FastAllocator* allocator, CreateLeafFunc createLeaf, BuildProgressMonitor& progress, PrimRef* prims, const PrimInfo& pinfo, GeneralBVHBuilder::Settings settings) {
 | |
|           return BVHNBuilderT<CreateLeafFunc>(createLeaf).build(allocator,progress,prims,pinfo,settings);
 | |
|         }
 | |
|       };
 | |
| 
 | |
|     template<int N>
 | |
|       struct BVHNBuilderQuantizedVirtual
 | |
|       {
 | |
|         typedef BVHN<N> BVH;
 | |
|         typedef typename BVH::NodeRef NodeRef;
 | |
|         typedef FastAllocator::CachedAllocator Allocator;
 | |
|       
 | |
|         struct BVHNBuilderV {
 | |
|           NodeRef build(FastAllocator* allocator, BuildProgressMonitor& progress, PrimRef* prims, const PrimInfo& pinfo, GeneralBVHBuilder::Settings settings);
 | |
|           virtual NodeRef createLeaf (const PrimRef* prims, const range<size_t>& set, const Allocator& alloc) = 0;
 | |
|         };
 | |
| 
 | |
|         template<typename CreateLeafFunc>
 | |
|         struct BVHNBuilderT : public BVHNBuilderV
 | |
|         {
 | |
|           BVHNBuilderT (CreateLeafFunc createLeafFunc)
 | |
|             : createLeafFunc(createLeafFunc) {}
 | |
| 
 | |
|           NodeRef createLeaf (const PrimRef* prims, const range<size_t>& set, const Allocator& alloc) {
 | |
|             return createLeafFunc(prims,set,alloc);
 | |
|           }
 | |
| 
 | |
|         private:
 | |
|           CreateLeafFunc createLeafFunc;
 | |
|         };
 | |
| 
 | |
|         template<typename CreateLeafFunc>
 | |
|         static NodeRef build(FastAllocator* allocator, CreateLeafFunc createLeaf, BuildProgressMonitor& progress, PrimRef* prims, const PrimInfo& pinfo, GeneralBVHBuilder::Settings settings) {
 | |
|           return BVHNBuilderT<CreateLeafFunc>(createLeaf).build(allocator,progress,prims,pinfo,settings);
 | |
|         }
 | |
|       };
 | |
| 
 | |
|     template<int N>
 | |
|       struct BVHNBuilderMblurVirtual
 | |
|       {
 | |
|         typedef BVHN<N> BVH;
 | |
|         typedef typename BVH::AABBNodeMB AABBNodeMB;
 | |
|         typedef typename BVH::NodeRef NodeRef;
 | |
|         typedef typename BVH::NodeRecordMB NodeRecordMB;
 | |
|         typedef FastAllocator::CachedAllocator Allocator;
 | |
|       
 | |
|         struct BVHNBuilderV {
 | |
|           NodeRecordMB build(FastAllocator* allocator, BuildProgressMonitor& progress, PrimRef* prims, const PrimInfo& pinfo, GeneralBVHBuilder::Settings settings, const BBox1f& timeRange);
 | |
|           virtual NodeRecordMB createLeaf (const PrimRef* prims, const range<size_t>& set, const Allocator& alloc) = 0;
 | |
|         };
 | |
| 
 | |
|         template<typename CreateLeafFunc>
 | |
|         struct BVHNBuilderT : public BVHNBuilderV
 | |
|         {
 | |
|           BVHNBuilderT (CreateLeafFunc createLeafFunc)
 | |
|             : createLeafFunc(createLeafFunc) {}
 | |
| 
 | |
|           NodeRecordMB createLeaf (const PrimRef* prims, const range<size_t>& set, const Allocator& alloc) {
 | |
|             return createLeafFunc(prims,set,alloc);
 | |
|           }
 | |
| 
 | |
|         private:
 | |
|           CreateLeafFunc createLeafFunc;
 | |
|         };
 | |
| 
 | |
|         template<typename CreateLeafFunc>
 | |
|         static NodeRecordMB build(FastAllocator* allocator, CreateLeafFunc createLeaf, BuildProgressMonitor& progress, PrimRef* prims, const PrimInfo& pinfo, GeneralBVHBuilder::Settings settings, const BBox1f& timeRange) {
 | |
|           return BVHNBuilderT<CreateLeafFunc>(createLeaf).build(allocator,progress,prims,pinfo,settings,timeRange);
 | |
|         }
 | |
|       };
 | |
|   }
 | |
| }
 |