mirror of
				https://github.com/godotengine/godot.git
				synced 2025-10-31 05:31:01 +00:00 
			
		
		
		
	
		
			
	
	
		
			56 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
		
		
			
		
	
	
			56 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
|   | #pragma once
 | ||
|  | #ifndef __CVTT_AGGREGATEDERROR_H__
 | ||
|  | #define __CVTT_AGGREGATEDERROR_H__
 | ||
|  | 
 | ||
|  | #include "ConvectionKernels_ParallelMath.h"
 | ||
|  | 
 | ||
|  | namespace cvtt | ||
|  | { | ||
|  |     namespace Internal | ||
|  |     { | ||
|  |         template<int TVectorSize> | ||
|  |         class AggregatedError | ||
|  |         { | ||
|  |         public: | ||
|  |             typedef ParallelMath::UInt16 MUInt16; | ||
|  |             typedef ParallelMath::UInt31 MUInt31; | ||
|  |             typedef ParallelMath::Float MFloat; | ||
|  | 
 | ||
|  |             AggregatedError() | ||
|  |             { | ||
|  |                 for (int ch = 0; ch < TVectorSize; ch++) | ||
|  |                     m_errorUnweighted[ch] = ParallelMath::MakeUInt31(0); | ||
|  |             } | ||
|  | 
 | ||
|  |             void Add(const MUInt16 &channelErrorUnweighted, int ch) | ||
|  |             { | ||
|  |                 m_errorUnweighted[ch] = m_errorUnweighted[ch] + ParallelMath::ToUInt31(channelErrorUnweighted); | ||
|  |             } | ||
|  | 
 | ||
|  |             MFloat Finalize(uint32_t flags, const float channelWeightsSq[TVectorSize]) const | ||
|  |             { | ||
|  |                 if (flags & cvtt::Flags::Uniform) | ||
|  |                 { | ||
|  |                     MUInt31 total = m_errorUnweighted[0]; | ||
|  |                     for (int ch = 1; ch < TVectorSize; ch++) | ||
|  |                         total = total + m_errorUnweighted[ch]; | ||
|  |                     return ParallelMath::ToFloat(total); | ||
|  |                 } | ||
|  |                 else | ||
|  |                 { | ||
|  |                     MFloat total = ParallelMath::ToFloat(m_errorUnweighted[0]) * channelWeightsSq[0]; | ||
|  |                     for (int ch = 1; ch < TVectorSize; ch++) | ||
|  |                         total = total + ParallelMath::ToFloat(m_errorUnweighted[ch]) * channelWeightsSq[ch]; | ||
|  |                     return total; | ||
|  |                 } | ||
|  |             } | ||
|  | 
 | ||
|  |         private: | ||
|  |             MUInt31 m_errorUnweighted[TVectorSize]; | ||
|  |         }; | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | #endif
 | ||
|  | 
 |