@@ -64,6 +64,27 @@ template<typename T NBL_STRUCT_CONSTRAINABLE>
64
64
struct sin_helper;
65
65
template<typename T NBL_STRUCT_CONSTRAINABLE>
66
66
struct 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
+
67
88
template<typename T NBL_STRUCT_CONSTRAINABLE>
68
89
struct sqrt_helper;
69
90
template<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
108
129
template<typename T> AUTO_SPECIALIZE_TRIVIAL_CASE_HELPER (sin_helper, sin, (T), (T), T)
109
130
template<typename T> AUTO_SPECIALIZE_TRIVIAL_CASE_HELPER (cos_helper, cos, (T), (T), T)
110
131
template<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)
111
142
template<typename T> AUTO_SPECIALIZE_TRIVIAL_CASE_HELPER (abs_helper, sAbs, (T), (T), T)
112
143
template<typename T> AUTO_SPECIALIZE_TRIVIAL_CASE_HELPER (abs_helper, fAbs, (T), (T), T)
113
144
template<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)>\
213
244
214
245
template<typename T> AUTO_SPECIALIZE_TRIVIAL_CASE_HELPER (cos_helper, cos, concepts::FloatingPointScalar<T>, (T), (T), T)
215
246
template<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)
217
258
template<typename T> AUTO_SPECIALIZE_TRIVIAL_CASE_HELPER (sqrt_helper, sqrt, concepts::FloatingPointScalar<T>, (T), (T), T)
218
259
template<typename T> AUTO_SPECIALIZE_TRIVIAL_CASE_HELPER (abs_helper, abs, concepts::Scalar<T>, (T), (T), T)
219
260
template<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)
447
488
AUTO_SPECIALIZE_HELPER_FOR_VECTOR (cos_helper, T)
448
489
AUTO_SPECIALIZE_HELPER_FOR_VECTOR (sin_helper, T)
449
490
AUTO_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
+
450
501
AUTO_SPECIALIZE_HELPER_FOR_VECTOR (modf_helper, T)
451
502
AUTO_SPECIALIZE_HELPER_FOR_VECTOR (round_helper, T)
452
503
AUTO_SPECIALIZE_HELPER_FOR_VECTOR (roundEven_helper, T)
@@ -576,6 +627,25 @@ struct frexpStruct_helper<T NBL_PARTIAL_REQ_BOT(VECTOR_SPECIALIZATION_CONCEPT) >
576
627
}
577
628
};
578
629
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
+
579
649
#undef VECTOR_SPECIALIZATION_CONCEPT
580
650
581
651
}
0 commit comments