196 lines
		
	
	
	
		
			8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			196 lines
		
	
	
	
		
			8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| // Copyright 2009-2021 Intel Corporation
 | |
| // SPDX-License-Identifier: Apache-2.0
 | |
| 
 | |
| #pragma once
 | |
| 
 | |
| #include "default.h"
 | |
| 
 | |
| namespace embree
 | |
| {
 | |
|   /* mutex to make printing to cout thread safe */
 | |
|   extern MutexSys g_printMutex;
 | |
| 
 | |
|   struct State : public RefCount
 | |
|   {
 | |
|   public:
 | |
|     /*! state construction */
 | |
|     State ();
 | |
| 
 | |
|     /*! state destruction */
 | |
|     ~State();
 | |
| 
 | |
|     /*! verifies that state is correct */
 | |
|     void verify();
 | |
| 
 | |
|     /*! parses state from a configuration file */
 | |
|     bool parseFile(const FileName& fileName);
 | |
| 
 | |
|     /*! parses the state from a string */
 | |
|     void parseString(const char* cfg);
 | |
| 
 | |
|     /*! parses the state from a stream */
 | |
|     void parse(Ref<TokenStream> cin);
 | |
| 
 | |
|     /*! prints the state */
 | |
|     void print();
 | |
| 
 | |
|     /*! checks if verbosity level is at least N */
 | |
|     bool verbosity(size_t N);
 | |
| 
 | |
|     /*! checks if some particular ISA is enabled */
 | |
|     bool hasISA(const int isa);
 | |
| 
 | |
|     /*! check whether selected ISA is supported by the HW */    
 | |
|     bool checkISASupport();
 | |
|     
 | |
|   public:
 | |
|     std::string tri_accel;                 //!< acceleration structure to use for triangles
 | |
|     std::string tri_builder;               //!< builder to use for triangles
 | |
|     std::string tri_traverser;             //!< traverser to use for triangles
 | |
|     
 | |
|   public:
 | |
|     std::string tri_accel_mb;              //!< acceleration structure to use for motion blur triangles
 | |
|     std::string tri_builder_mb;            //!< builder to use for motion blur triangles
 | |
|     std::string tri_traverser_mb;          //!< traverser to use for triangles
 | |
| 
 | |
|   public:
 | |
|     std::string quad_accel;                 //!< acceleration structure to use for quads
 | |
|     std::string quad_builder;               //!< builder to use for quads
 | |
|     std::string quad_traverser;             //!< traverser to use for quads
 | |
| 
 | |
|   public:
 | |
|     std::string quad_accel_mb;             //!< acceleration structure to use for motion blur quads
 | |
|     std::string quad_builder_mb;           //!< builder to use for motion blur quads
 | |
|     std::string quad_traverser_mb;         //!< traverser to use for motion blur quads
 | |
| 
 | |
|   public:
 | |
|     std::string line_accel;                 //!< acceleration structure to use for line segments
 | |
|     std::string line_builder;               //!< builder to use for line segments
 | |
|     std::string line_traverser;             //!< traverser to use for line segments
 | |
| 
 | |
|   public:
 | |
|     std::string line_accel_mb;             //!< acceleration structure to use for motion blur line segments
 | |
|     std::string line_builder_mb;           //!< builder to use for motion blur line segments
 | |
|     std::string line_traverser_mb;         //!< traverser to use for motion blur line segments
 | |
| 
 | |
|   public:
 | |
|     std::string hair_accel;                //!< hair acceleration structure to use
 | |
|     std::string hair_builder;              //!< builder to use for hair
 | |
|     std::string hair_traverser;            //!< traverser to use for hair
 | |
| 
 | |
|   public:
 | |
|     std::string hair_accel_mb;             //!< acceleration structure to use for motion blur hair
 | |
|     std::string hair_builder_mb;           //!< builder to use for motion blur hair
 | |
|     std::string hair_traverser_mb;         //!< traverser to use for motion blur hair
 | |
| 
 | |
|   public:
 | |
|     std::string object_accel;               //!< acceleration structure for user geometries
 | |
|     std::string object_builder;             //!< builder for user geometries
 | |
|     int object_accel_min_leaf_size;         //!< minimum leaf size for object acceleration structure
 | |
|     int object_accel_max_leaf_size;         //!< maximum leaf size for object acceleration structure
 | |
| 
 | |
|   public:
 | |
|     std::string object_accel_mb;            //!< acceleration structure for user geometries
 | |
|     std::string object_builder_mb;          //!< builder for user geometries
 | |
|     int object_accel_mb_min_leaf_size;      //!< minimum leaf size for mblur object acceleration structure
 | |
|     int object_accel_mb_max_leaf_size;      //!< maximum leaf size for mblur object acceleration structure
 | |
| 
 | |
|   public:
 | |
|     std::string subdiv_accel;              //!< acceleration structure to use for subdivision surfaces
 | |
|     std::string subdiv_accel_mb;           //!< acceleration structure to use for subdivision surfaces
 | |
| 
 | |
|   public:
 | |
|     std::string grid_accel;              //!< acceleration structure to use for grids
 | |
|     std::string grid_builder;            //!< builder for grids
 | |
|     std::string grid_accel_mb;           //!< acceleration structure to use for motion blur grids
 | |
|     std::string grid_builder_mb;         //!< builder for motion blur grids
 | |
| 
 | |
|   public:
 | |
|     float max_spatial_split_replications;  //!< maximally replications*N many primitives in accel for spatial splits
 | |
|     bool useSpatialPreSplits;              //!< use spatial pre-splits instead of the full spatial split builder
 | |
|     size_t tessellation_cache_size;        //!< size of the shared tessellation cache 
 | |
| 
 | |
|   public:
 | |
|     size_t instancing_open_min;            //!< instancing opens tree to minimally that number of subtrees
 | |
|     size_t instancing_block_size;          //!< instancing opens tree up to average block size of primitives
 | |
|     float  instancing_open_factor;         //!< instancing opens tree up to x times the number of instances
 | |
|     size_t instancing_open_max_depth;      //!< maximum open depth for geometries
 | |
|     size_t instancing_open_max;            //!< instancing opens tree to maximally that number of subtrees
 | |
| 
 | |
|   public:
 | |
|     bool float_exceptions;                 //!< enable floating point exceptions
 | |
|     int quality_flags;
 | |
|     int scene_flags;
 | |
|     size_t verbose;                        //!< verbosity of output
 | |
|     size_t benchmark;                      //!< true
 | |
|     
 | |
|   public:
 | |
|     size_t numThreads;                     //!< number of threads to use in builders
 | |
|     size_t numUserThreads;                 //!< number of user provided threads to use in builders
 | |
|     bool set_affinity;                     //!< sets affinity for worker threads
 | |
|     bool start_threads;                    //!< true when threads should be started at device creation time
 | |
|     int enabled_cpu_features;              //!< CPU ISA features to use
 | |
|     int enabled_builder_cpu_features;      //!< CPU ISA features to use for builders only
 | |
|     enum FREQUENCY_LEVEL {
 | |
|       FREQUENCY_SIMD128,
 | |
|       FREQUENCY_SIMD256,
 | |
|       FREQUENCY_SIMD512
 | |
|     } frequency_level;                     //!< frequency level the app wants to run on (default is SIMD256)
 | |
|     bool enable_selockmemoryprivilege;     //!< configures the SeLockMemoryPrivilege under Windows to enable huge pages
 | |
|     bool hugepages;                        //!< true if huge pages should get used
 | |
|     bool hugepages_success;                //!< status for enabling huge pages
 | |
| 
 | |
|   public:
 | |
|     size_t alloc_main_block_size;          //!< main allocation block size (shared between threads)
 | |
|     int alloc_num_main_slots;              //!< number of such shared blocks to be used to allocate
 | |
|     size_t alloc_thread_block_size;        //!< size of thread local allocator block size
 | |
|     int alloc_single_thread_alloc;         //!< in single mode nodes and leaves use same thread local allocator
 | |
| 
 | |
|   public:
 | |
| 
 | |
|     /*! checks if we can use AVX */
 | |
|     bool canUseAVX() {
 | |
|       return hasISA(AVX) && frequency_level != FREQUENCY_SIMD128;
 | |
|     }
 | |
| 
 | |
|     /*! checks if we can use AVX2 */
 | |
|     bool canUseAVX2() {
 | |
|       return hasISA(AVX2) && frequency_level != FREQUENCY_SIMD128;
 | |
|     }
 | |
|     
 | |
|     struct ErrorHandler
 | |
|     {
 | |
|     public:
 | |
|       ErrorHandler();
 | |
|       ~ErrorHandler();
 | |
|       RTCError* error();
 | |
| 
 | |
|     public:
 | |
|       tls_t thread_error;
 | |
|       std::vector<RTCError*> thread_errors;
 | |
|       MutexSys errors_mutex;
 | |
|     };
 | |
|     ErrorHandler errorHandler;
 | |
|     static ErrorHandler g_errorHandler;
 | |
| 
 | |
|   public:
 | |
|     void setErrorFunction(RTCErrorFunction fptr, void* uptr) 
 | |
|     {
 | |
|       error_function = fptr;
 | |
|       error_function_userptr = uptr;
 | |
|     }
 | |
| 
 | |
|     RTCErrorFunction error_function;
 | |
|     void* error_function_userptr;
 | |
| 
 | |
|   public:
 | |
|     void setMemoryMonitorFunction(RTCMemoryMonitorFunction fptr, void* uptr) 
 | |
|     {
 | |
|       memory_monitor_function = fptr;
 | |
|       memory_monitor_userptr = uptr;
 | |
|     }
 | |
| 
 | |
|     RTCMemoryMonitorFunction memory_monitor_function;
 | |
|     void* memory_monitor_userptr;
 | |
|   };
 | |
| }
 |