@@ -247,37 +247,40 @@ struct erfInv_helper<FloatingPoint NBL_PARTIAL_REQ_BOT(concepts::FloatingPointSc
247247 }
248248};
249249
250- #define AUTO_SPECIALIZE_HELPER_FOR_VECTOR (HELPER_NAME)\
251- template<typename Vectorial >\
252- NBL_PARTIAL_REQ_TOP (concepts::Vectorial<Vectorial >)\
253- struct HELPER_NAME<Vectorial NBL_PARTIAL_REQ_BOT (concepts::Vectorial<Vectorial >) >\
250+ #define AUTO_SPECIALIZE_HELPER_FOR_VECTOR (HELPER_NAME, RETURN_TYPE )\
251+ template<typename T >\
252+ NBL_PARTIAL_REQ_TOP (concepts::Vectorial<T >)\
253+ struct HELPER_NAME<T NBL_PARTIAL_REQ_BOT (concepts::Vectorial<T >) >\
254254{\
255- static Vectorial __call (NBL_CONST_REF_ARG (Vectorial) vec)\
255+ using return_t = RETURN_TYPE;\
256+ static return_t __call (NBL_CONST_REF_ARG (T) vec)\
256257 {\
257- using traits = hlsl::vector_traits<Vectorial >;\
258- array_get<Vectorial , typename traits::scalar_type> getter;\
259- array_set<Vectorial , typename traits::scalar_type> setter;\
258+ using traits = hlsl::vector_traits<T >;\
259+ array_get<T , typename traits::scalar_type> getter;\
260+ array_set<T , typename traits::scalar_type> setter;\
260261\
261- Vectorial output;\
262+ return_t output;\
262263 for (uint32_t i = 0 ; i < traits::Dimension; ++i)\
263264 setter (output, i, HELPER_NAME<typename traits::scalar_type>::__call (getter (vec, i)));\
264265\
265266 return output;\
266267 }\
267268};
268269
269- AUTO_SPECIALIZE_HELPER_FOR_VECTOR (cos_helper)
270- AUTO_SPECIALIZE_HELPER_FOR_VECTOR (sin_helper)
271- AUTO_SPECIALIZE_HELPER_FOR_VECTOR (acos_helper)
272- AUTO_SPECIALIZE_HELPER_FOR_VECTOR (sqrt_helper)
273- AUTO_SPECIALIZE_HELPER_FOR_VECTOR (abs_helper)
274- AUTO_SPECIALIZE_HELPER_FOR_VECTOR (log_helper)
275- AUTO_SPECIALIZE_HELPER_FOR_VECTOR (exp2_helper)
276- AUTO_SPECIALIZE_HELPER_FOR_VECTOR (exp_helper)
277- AUTO_SPECIALIZE_HELPER_FOR_VECTOR (pow_helper)
278- AUTO_SPECIALIZE_HELPER_FOR_VECTOR (floor_helper)
279- AUTO_SPECIALIZE_HELPER_FOR_VECTOR (isinf_helper)
280- AUTO_SPECIALIZE_HELPER_FOR_VECTOR (isnan_helper)
270+ AUTO_SPECIALIZE_HELPER_FOR_VECTOR (cos_helper, T)
271+ AUTO_SPECIALIZE_HELPER_FOR_VECTOR (sin_helper, T)
272+ AUTO_SPECIALIZE_HELPER_FOR_VECTOR (acos_helper, T)
273+ AUTO_SPECIALIZE_HELPER_FOR_VECTOR (sqrt_helper, T)
274+ AUTO_SPECIALIZE_HELPER_FOR_VECTOR (abs_helper, T)
275+ AUTO_SPECIALIZE_HELPER_FOR_VECTOR (log_helper, T)
276+ AUTO_SPECIALIZE_HELPER_FOR_VECTOR (exp2_helper, T)
277+ AUTO_SPECIALIZE_HELPER_FOR_VECTOR (exp_helper, T)
278+ AUTO_SPECIALIZE_HELPER_FOR_VECTOR (pow_helper, T)
279+ AUTO_SPECIALIZE_HELPER_FOR_VECTOR (floor_helper, T)
280+ #define INT_VECTOR_RETURN_TYPE vector <int32_t, vector_traits<T>::Dimension>
281+ AUTO_SPECIALIZE_HELPER_FOR_VECTOR (isinf_helper, INT_VECTOR_RETURN_TYPE)
282+ AUTO_SPECIALIZE_HELPER_FOR_VECTOR (isnan_helper, INT_VECTOR_RETURN_TYPE)
283+ #undef INT_VECTOR_RETURN_TYPE
281284#undef AUTO_SPECIALIZE_HELPER_FOR_VECTOR
282285
283286}
0 commit comments