@@ -247,37 +247,40 @@ struct erfInv_helper<FloatingPoint NBL_PARTIAL_REQ_BOT(concepts::FloatingPointSc
247
247
}
248
248
};
249
249
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 >) >\
254
254
{\
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)\
256
257
{\
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;\
260
261
\
261
- Vectorial output;\
262
+ return_t output;\
262
263
for (uint32_t i = 0 ; i < traits::Dimension; ++i)\
263
264
setter (output, i, HELPER_NAME<typename traits::scalar_type>::__call (getter (vec, i)));\
264
265
\
265
266
return output;\
266
267
}\
267
268
};
268
269
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
281
284
#undef AUTO_SPECIALIZE_HELPER_FOR_VECTOR
282
285
283
286
}
0 commit comments