| 
									
										
										
										
											2021-05-20 12:49:33 +02:00
										 |  |  | // Copyright 2009-2021 Intel Corporation
 | 
					
						
							| 
									
										
										
										
											2021-04-20 18:38:09 +02:00
										 |  |  | // SPDX-License-Identifier: Apache-2.0
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #pragma once
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "default.h"
 | 
					
						
							|  |  |  | #include "state.h"
 | 
					
						
							|  |  |  | #include "accel.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace embree | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   class BVH4Factory; | 
					
						
							|  |  |  |   class BVH8Factory; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   class Device : public State, public MemoryMonitorInterface | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     ALIGNED_CLASS_(16); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   public: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /*! Device construction */ | 
					
						
							|  |  |  |     Device (const char* cfg); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /*! Device destruction */ | 
					
						
							|  |  |  |     virtual ~Device (); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /*! prints info about the device */ | 
					
						
							|  |  |  |     void print(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /*! sets the error code */ | 
					
						
							|  |  |  |     void setDeviceErrorCode(RTCError error); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /*! returns and clears the error code */ | 
					
						
							|  |  |  |     RTCError getDeviceErrorCode(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /*! sets the error code */ | 
					
						
							|  |  |  |     static void setThreadErrorCode(RTCError error); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /*! returns and clears the error code */ | 
					
						
							|  |  |  |     static RTCError getThreadErrorCode(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /*! processes error codes, do not call directly */ | 
					
						
							|  |  |  |     static void process_error(Device* device, RTCError error, const char* str); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /*! invokes the memory monitor callback */ | 
					
						
							|  |  |  |     void memoryMonitor(ssize_t bytes, bool post); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /*! sets the size of the software cache. */ | 
					
						
							|  |  |  |     void setCacheSize(size_t bytes); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /*! sets a property */ | 
					
						
							|  |  |  |     void setProperty(const RTCDeviceProperty prop, ssize_t val); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /*! gets a property */ | 
					
						
							|  |  |  |     ssize_t getProperty(const RTCDeviceProperty prop); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   private: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /*! initializes the tasking system */ | 
					
						
							|  |  |  |     void initTaskingSystem(size_t numThreads); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /*! shuts down the tasking system */ | 
					
						
							|  |  |  |     void exitTaskingSystem(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /*! some variables that can be set via rtcSetParameter1i for debugging purposes */ | 
					
						
							|  |  |  |   public: | 
					
						
							|  |  |  |     static ssize_t debug_int0; | 
					
						
							|  |  |  |     static ssize_t debug_int1; | 
					
						
							|  |  |  |     static ssize_t debug_int2; | 
					
						
							|  |  |  |     static ssize_t debug_int3; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   public: | 
					
						
							|  |  |  |     std::unique_ptr<BVH4Factory> bvh4_factory; | 
					
						
							|  |  |  | #if defined(EMBREE_TARGET_SIMD8)
 | 
					
						
							|  |  |  |     std::unique_ptr<BVH8Factory> bvh8_factory; | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  | #if USE_TASK_ARENA
 | 
					
						
							|  |  |  |     std::unique_ptr<tbb::task_arena> arena; | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     /* ray streams filter */ | 
					
						
							|  |  |  |     RayStreamFilterFuncs rayStreamFilters; | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | } |