@@ -64,6 +64,27 @@ template<typename T NBL_STRUCT_CONSTRAINABLE>
6464struct sin_helper;
6565template<typename T NBL_STRUCT_CONSTRAINABLE>
6666struct acos_helper;
67+ template<typename T NBL_STRUCT_CONSTRAINABLE>
68+ struct tan_helper;
69+ template<typename T NBL_STRUCT_CONSTRAINABLE>
70+ struct asin_helper;
71+ template<typename T NBL_STRUCT_CONSTRAINABLE>
72+ struct atan_helper;
73+ template<typename T NBL_STRUCT_CONSTRAINABLE>
74+ struct sinh_helper;
75+ template<typename T NBL_STRUCT_CONSTRAINABLE>
76+ struct cosh_helper;
77+ template<typename T NBL_STRUCT_CONSTRAINABLE>
78+ struct tanh_helper;
79+ template<typename T NBL_STRUCT_CONSTRAINABLE>
80+ struct asinh_helper;
81+ template<typename T NBL_STRUCT_CONSTRAINABLE>
82+ struct acosh_helper;
83+ template<typename T NBL_STRUCT_CONSTRAINABLE>
84+ struct atanh_helper;
85+ template<typename T NBL_STRUCT_CONSTRAINABLE>
86+ struct atan2_helper;
87+
6788template<typename T NBL_STRUCT_CONSTRAINABLE>
6889struct sqrt_helper;
6990template<typename T NBL_STRUCT_CONSTRAINABLE>
@@ -108,6 +129,16 @@ struct HELPER_NAME<BOOST_PP_SEQ_FOR_EACH_I(WRAP, _, ARG_TYPE_LIST) NBL_PARTIAL_R
108129template<typename T> AUTO_SPECIALIZE_TRIVIAL_CASE_HELPER (sin_helper, sin, (T), (T), T)
109130template<typename T> AUTO_SPECIALIZE_TRIVIAL_CASE_HELPER (cos_helper, cos, (T), (T), T)
110131template<typename T> AUTO_SPECIALIZE_TRIVIAL_CASE_HELPER (acos_helper, acos, (T), (T), T)
132+ template<typename T> AUTO_SPECIALIZE_TRIVIAL_CASE_HELPER (tan_helper, tan, (T), (T), T)
133+ template<typename T> AUTO_SPECIALIZE_TRIVIAL_CASE_HELPER (asin_helper, asin, (T), (T), T)
134+ template<typename T> AUTO_SPECIALIZE_TRIVIAL_CASE_HELPER (atan_helper, atan, (T), (T), T)
135+ template<typename T> AUTO_SPECIALIZE_TRIVIAL_CASE_HELPER (sinh_helper, sinh, (T), (T), T)
136+ template<typename T> AUTO_SPECIALIZE_TRIVIAL_CASE_HELPER (cosh_helper, cosh, (T), (T), T)
137+ template<typename T> AUTO_SPECIALIZE_TRIVIAL_CASE_HELPER (tanh_helper, tanh, (T), (T), T)
138+ template<typename T> AUTO_SPECIALIZE_TRIVIAL_CASE_HELPER (asinh_helper, asinh, (T), (T), T)
139+ template<typename T> AUTO_SPECIALIZE_TRIVIAL_CASE_HELPER (acosh_helper, acosh, (T), (T), T)
140+ template<typename T> AUTO_SPECIALIZE_TRIVIAL_CASE_HELPER (atanh_helper, atanh, (T), (T), T)
141+ template<typename T> AUTO_SPECIALIZE_TRIVIAL_CASE_HELPER (atan2_helper, atan2, (T), (T)(T), T)
111142template<typename T> AUTO_SPECIALIZE_TRIVIAL_CASE_HELPER (abs_helper, sAbs, (T), (T), T)
112143template<typename T> AUTO_SPECIALIZE_TRIVIAL_CASE_HELPER (abs_helper, fAbs, (T), (T), T)
113144template<typename T> AUTO_SPECIALIZE_TRIVIAL_CASE_HELPER (sqrt_helper, sqrt, (T), (T), T)
@@ -213,7 +244,17 @@ struct HELPER_NAME<BOOST_PP_SEQ_FOR_EACH_I(WRAP, _, ARG_TYPE_LIST)>\
213244
214245template<typename T> AUTO_SPECIALIZE_TRIVIAL_CASE_HELPER (cos_helper, cos, concepts::FloatingPointScalar<T>, (T), (T), T)
215246template<typename T> AUTO_SPECIALIZE_TRIVIAL_CASE_HELPER (sin_helper, sin, concepts::FloatingPointScalar<T>, (T), (T), T)
216- template<typename T> AUTO_SPECIALIZE_TRIVIAL_CASE_HELPER (acos_helper, acos, concepts::FloatingPointScalar<T>, (T), (T), T)
247+ template<typename T> AUTO_SPECIALIZE_TRIVIAL_CASE_HELPER (tan_helper, tan, concepts::FloatingPointScalar<T>, (T), (T), T)
248+ template<typename T> AUTO_SPECIALIZE_TRIVIAL_CASE_HELPER (asin_helper, asin, concepts::FloatingPointScalar<T>, (T), (T), T)
249+ template<typename T> AUTO_SPECIALIZE_TRIVIAL_CASE_HELPER (acos_helper, acos, concepts::FloatingPointScalar<T>, (T), (T), T)
250+ template<typename T> AUTO_SPECIALIZE_TRIVIAL_CASE_HELPER (atan_helper, atan, concepts::FloatingPointScalar<T>, (T), (T), T)
251+ template<typename T> AUTO_SPECIALIZE_TRIVIAL_CASE_HELPER (sinh_helper, sinh, concepts::FloatingPointScalar<T>, (T), (T), T)
252+ template<typename T> AUTO_SPECIALIZE_TRIVIAL_CASE_HELPER (cosh_helper, cosh, concepts::FloatingPointScalar<T>, (T), (T), T)
253+ template<typename T> AUTO_SPECIALIZE_TRIVIAL_CASE_HELPER (tanh_helper, tanh, concepts::FloatingPointScalar<T>, (T), (T), T)
254+ template<typename T> AUTO_SPECIALIZE_TRIVIAL_CASE_HELPER (asinh_helper, asinh, concepts::FloatingPointScalar<T>, (T), (T), T)
255+ template<typename T> AUTO_SPECIALIZE_TRIVIAL_CASE_HELPER (acosh_helper, acosh, concepts::FloatingPointScalar<T>, (T), (T), T)
256+ template<typename T> AUTO_SPECIALIZE_TRIVIAL_CASE_HELPER (atanh_helper, atanh, concepts::FloatingPointScalar<T>, (T), (T), T)
257+ template<typename T> AUTO_SPECIALIZE_TRIVIAL_CASE_HELPER (atan2_helper, atan2, concepts::FloatingPointScalar<T>, (T), (T)(T), T)
217258template<typename T> AUTO_SPECIALIZE_TRIVIAL_CASE_HELPER (sqrt_helper, sqrt, concepts::FloatingPointScalar<T>, (T), (T), T)
218259template<typename T> AUTO_SPECIALIZE_TRIVIAL_CASE_HELPER (abs_helper, abs, concepts::Scalar<T>, (T), (T), T)
219260template<typename T> AUTO_SPECIALIZE_TRIVIAL_CASE_HELPER (log_helper, log, concepts::Scalar<T>, (T), (T), T)
@@ -447,6 +488,16 @@ AUTO_SPECIALIZE_HELPER_FOR_VECTOR(isnan_helper, INT_VECTOR_RETURN_TYPE)
447488AUTO_SPECIALIZE_HELPER_FOR_VECTOR (cos_helper, T)
448489AUTO_SPECIALIZE_HELPER_FOR_VECTOR (sin_helper, T)
449490AUTO_SPECIALIZE_HELPER_FOR_VECTOR (acos_helper, T)
491+ AUTO_SPECIALIZE_HELPER_FOR_VECTOR (tan_helper, T)
492+ AUTO_SPECIALIZE_HELPER_FOR_VECTOR (asin_helper, T)
493+ AUTO_SPECIALIZE_HELPER_FOR_VECTOR (atan_helper, T)
494+ AUTO_SPECIALIZE_HELPER_FOR_VECTOR (sinh_helper, T)
495+ AUTO_SPECIALIZE_HELPER_FOR_VECTOR (cosh_helper, T)
496+ AUTO_SPECIALIZE_HELPER_FOR_VECTOR (tanh_helper, T)
497+ AUTO_SPECIALIZE_HELPER_FOR_VECTOR (asinh_helper, T)
498+ AUTO_SPECIALIZE_HELPER_FOR_VECTOR (acosh_helper, T)
499+ AUTO_SPECIALIZE_HELPER_FOR_VECTOR (atanh_helper, T)
500+
450501AUTO_SPECIALIZE_HELPER_FOR_VECTOR (modf_helper, T)
451502AUTO_SPECIALIZE_HELPER_FOR_VECTOR (round_helper, T)
452503AUTO_SPECIALIZE_HELPER_FOR_VECTOR (roundEven_helper, T)
@@ -576,6 +627,25 @@ struct frexpStruct_helper<T NBL_PARTIAL_REQ_BOT(VECTOR_SPECIALIZATION_CONCEPT) >
576627 }
577628};
578629
630+ template<typename T>
631+ NBL_PARTIAL_REQ_TOP (VECTOR_SPECIALIZATION_CONCEPT)
632+ struct atan2_helper<T NBL_PARTIAL_REQ_BOT (VECTOR_SPECIALIZATION_CONCEPT) >
633+ {
634+ using return_t = T;
635+ static return_t __call (NBL_CONST_REF_ARG (T) y, NBL_CONST_REF_ARG (T) x)
636+ {
637+ using traits = hlsl::vector_traits<T>;
638+ array_get<T, typename traits::scalar_type> getter;
639+ array_set<T, typename traits::scalar_type> setter;
640+
641+ return_t output;
642+ for (uint32_t i = 0 ; i < traits::Dimension; ++i)
643+ setter (output, i, atan2_helper<typename traits::scalar_type>::__call (getter (y, i), getter (x, i)));
644+
645+ return output;
646+ }
647+ };
648+
579649#undef VECTOR_SPECIALIZATION_CONCEPT
580650
581651}
0 commit comments