| 
									
										
										
										
											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 "../sys/platform.h"
 | 
					
						
							|  |  |  | #include "../sys/alloc.h"
 | 
					
						
							|  |  |  | #include "../sys/barrier.h"
 | 
					
						
							|  |  |  | #include "../sys/thread.h"
 | 
					
						
							|  |  |  | #include "../sys/mutex.h"
 | 
					
						
							|  |  |  | #include "../sys/condition.h"
 | 
					
						
							|  |  |  | #include "../sys/ref.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #if !defined(__WIN32__)
 | 
					
						
							|  |  |  | #error PPL tasking system only available under windows
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <ppl.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace embree | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   struct TaskScheduler | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     /*! initializes the task scheduler */ | 
					
						
							|  |  |  |     static void create(size_t numThreads, bool set_affinity, bool start_threads); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /*! destroys the task scheduler again */ | 
					
						
							|  |  |  |     static void destroy(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /* returns the ID of the current thread */ | 
					
						
							|  |  |  |     static __forceinline size_t threadID() { | 
					
						
							|  |  |  |       return GetCurrentThreadId(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /* returns the index (0..threadCount-1) of the current thread */ | 
					
						
							|  |  |  |     /* FIXME: threadIndex is NOT supported by PPL! */ | 
					
						
							|  |  |  |     static __forceinline size_t threadIndex() { | 
					
						
							|  |  |  |       return 0; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /* returns the total number of threads */ | 
					
						
							|  |  |  |     static __forceinline size_t threadCount() { | 
					
						
							|  |  |  |       return GetMaximumProcessorCount(ALL_PROCESSOR_GROUPS) + 1; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | }; |