74 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| // Copyright 2009-2021 Intel Corporation
 | |
| // SPDX-License-Identifier: Apache-2.0
 | |
| 
 | |
| #pragma once
 | |
| 
 | |
| #include "../../common/sys/platform.h"
 | |
| #include "../../common/sys/sycl.h"
 | |
| #include "../../common/sys/vector.h"
 | |
| #include "../../common/math/bbox.h"
 | |
| #include "../../include/embree4/rtcore.h"
 | |
|  
 | |
| namespace embree
 | |
| {
 | |
|   class Scene;
 | |
|   
 | |
|   void* rthwifAllocAccelBuffer(Device* embree_device, size_t bytes, sycl::device device, sycl::context context);
 | |
| 
 | |
|   void rthwifFreeAccelBuffer(Device* embree_device, void* ptr, size_t bytes, sycl::context context);
 | |
| 
 | |
|   /*! allocator that performs BVH memory allocations */
 | |
|   template<typename T>
 | |
|     struct AccelAllocator
 | |
|     {
 | |
|       typedef T value_type;
 | |
|       typedef T* pointer;
 | |
|       typedef const T* const_pointer;
 | |
|       typedef T& reference;
 | |
|       typedef const T& const_reference;
 | |
|       typedef std::size_t size_type;
 | |
|       typedef std::ptrdiff_t difference_type;
 | |
|       
 | |
|       AccelAllocator()
 | |
|         : device(nullptr), context(nullptr) {}
 | |
|       
 | |
|       AccelAllocator(Device* embree_device, const sycl::device& device, const sycl::context& context)
 | |
|         : embree_device(embree_device), device(&device), context(&context) {}
 | |
|       
 | |
|       __forceinline pointer allocate( size_type n ) {
 | |
|         if (context && device)
 | |
|           return (pointer) rthwifAllocAccelBuffer(embree_device,n*sizeof(T),*device,*context);
 | |
|         else
 | |
|           return nullptr;
 | |
|       }
 | |
|       
 | |
|       __forceinline void deallocate( pointer p, size_type n ) {
 | |
|         if (context)
 | |
|           rthwifFreeAccelBuffer(embree_device,p,n*sizeof(T),*context);
 | |
|       }
 | |
|       
 | |
|       __forceinline void construct( pointer p, const_reference val ) {
 | |
|         new (p) T(val);
 | |
|       }
 | |
|       
 | |
|       __forceinline void destroy( pointer p ) {
 | |
|         p->~T();
 | |
|       }
 | |
| 
 | |
|       private:
 | |
| 
 | |
|       Device* embree_device;
 | |
|       const sycl::device* device;
 | |
|       const sycl::context* context;
 | |
|     };
 | |
| 
 | |
|   typedef vector_t<char,AccelAllocator<char>> AccelBuffer;
 | |
|     
 | |
|   void* zeRTASInitExp(sycl::device device, sycl::context context);
 | |
|   
 | |
|   void rthwifCleanup(Device* embree_device, void* dispatchGlobalsPtr, sycl::context context);
 | |
| 
 | |
|   int rthwifIsSYCLDeviceSupported(const sycl::device& sycl_device);
 | |
|   
 | |
|   BBox3f rthwifBuild(Scene* scene, AccelBuffer& buffer_o);
 | |
| }
 |