mirror of
				https://github.com/godotengine/godot.git
				synced 2025-10-31 21:51:22 +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.
		
			
				
	
	
		
			55 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| // Copyright 2009-2021 Intel Corporation
 | |
| // SPDX-License-Identifier: Apache-2.0
 | |
| 
 | |
| #pragma once
 | |
| 
 | |
| #include <functional>
 | |
| #include "parallel_reduce.h"
 | |
| 
 | |
| namespace embree
 | |
| {
 | |
|   
 | |
|   template<typename Index, class UnaryPredicate>
 | |
|     __forceinline bool parallel_any_of (Index first, Index last, UnaryPredicate pred)
 | |
|   {
 | |
|     bool ret = false;
 | |
|     
 | |
| #if defined(TASKING_TBB)
 | |
| #if TBB_INTERFACE_VERSION >= 12002
 | |
|     tbb::task_group_context context;
 | |
|     tbb::parallel_for(tbb::blocked_range<size_t>{first, last}, [&ret,pred,&context](const tbb::blocked_range<size_t>& r) {
 | |
|         if (context.is_group_execution_cancelled()) return;
 | |
|         for (size_t i = r.begin(); i != r.end(); ++i) {
 | |
|           if (pred(i)) {
 | |
|             ret = true;
 | |
|             context.cancel_group_execution();
 | |
|           }
 | |
|         }
 | |
|       });
 | |
| #else
 | |
|     tbb::parallel_for(tbb::blocked_range<size_t>{first, last}, [&ret,pred](const tbb::blocked_range<size_t>& r) {
 | |
|         if (tbb::task::self().is_cancelled()) return;
 | |
|         for (size_t i = r.begin(); i != r.end(); ++i) {
 | |
|           if (pred(i)) {
 | |
|             ret = true;
 | |
|             tbb::task::self().cancel_group_execution();
 | |
|           }
 | |
|         }
 | |
|       });
 | |
| #endif
 | |
| #else
 | |
|     ret = parallel_reduce (first, last, false, [pred](const range<size_t>& r)->bool {
 | |
|         bool localret = false;
 | |
|         for (auto i=r.begin(); i<r.end(); ++i) {
 | |
|           localret |= pred(i);
 | |
|         }
 | |
|         return localret;
 | |
|       },
 | |
|       std::bit_or<bool>()
 | |
|       );
 | |
| #endif
 | |
|     
 | |
|     return ret;
 | |
|   }
 | |
|   
 | |
| } // end namespace
 |