18 namespace d = s::detail;
19 namespace cl = s::opencl;
25 s::vec<cl::cl_float, 2>);
27 s::vec<cl::cl_float, 3>);
29 s::vec<cl::cl_float, 4>);
32 s::vec<cl::cl_double, 2>);
34 s::vec<cl::cl_double, 3>);
36 s::vec<cl::cl_double, 4>);
39 s::vec<cl::cl_half, 2>);
41 s::vec<cl::cl_half, 3>);
43 s::vec<cl::cl_half, 4>);
52 template <
typename T>
inline T __cross(T p0, T p1) {
54 result.x() = p0.y() * p1.z() - p0.z() * p1.y();
55 result.y() = p0.z() * p1.x() - p0.x() * p1.z();
56 result.z() = p0.x() * p1.y() - p0.y() * p1.x();
60 template <
typename T>
inline void __FMul_impl(T &r, T p0, T p1) {
64 template <
typename T>
inline T __FMul(T p0, T p1) {
71 inline typename sycl::detail::enable_if_t<d::is_sgengeo<T>::value, T>
77 inline typename sycl::detail::enable_if_t<d::is_vgengeo<T>::value,
78 typename T::element_type>
84 inline typename sycl::detail::enable_if_t<d::is_sgengeo<T>::value, T>
91 inline typename sycl::detail::enable_if_t<d::is_vgengeo<T>::value, T>
93 typename T::element_type
r = __length(t);
98 inline typename sycl::detail::enable_if_t<d::is_sgengeo<T>::value, T>
103 template <
typename T>
104 inline typename sycl::detail::enable_if_t<d::is_vgengeo<T>::value,
105 typename T::element_type>
110 template <
typename T>
111 inline typename sycl::detail::enable_if_t<d::is_vgengeo<T>::value, T>
112 __fast_normalize(T t) {
123 __SYCL_EXPORT s::vec<cl::cl_float, 3>
125 s::vec<cl::cl_float, 3> p1)
__NOEXC {
126 return __cross(p0, p1);
128 __SYCL_EXPORT s::vec<cl::cl_float, 4>
130 s::vec<cl::cl_float, 4> p1)
__NOEXC {
131 return __cross(p0, p1);
133 __SYCL_EXPORT s::vec<cl::cl_double, 3>
135 s::vec<cl::cl_double, 3> p1)
__NOEXC {
136 return __cross(p0, p1);
138 __SYCL_EXPORT s::vec<cl::cl_double, 4>
140 s::vec<cl::cl_double, 4> p1)
__NOEXC {
141 return __cross(p0, p1);
143 __SYCL_EXPORT s::vec<cl::cl_half, 3>
145 return __cross(p0, p1);
147 __SYCL_EXPORT s::vec<cl::cl_half, 4>
149 return __cross(p0, p1);
154 return __FMul(p0, p1);
157 return __FMul(p0, p1);
160 return __FMul(p0, p1);
224 s::vec<float, 1> p1) {
228 s::vec<cl::cl_float, 2> p1) {
232 s::vec<cl::cl_float, 3> p1) {
236 s::vec<cl::cl_float, 4> p1) {
244 s::vec<double, 1> p1) {
248 s::vec<cl::cl_double, 2> p1) {
252 s::vec<cl::cl_double, 3> p1) {
256 s::vec<cl::cl_double, 4> p1) {
263 s::vec<s::half, 1> p1) {
267 s::vec<cl::cl_half, 2> p1) {
271 s::vec<cl::cl_half, 3> p1) {
275 s::vec<cl::cl_half, 4> p1) {
281 return __normalize(p);
284 return __normalize(p);
286 __SYCL_EXPORT s::vec<cl::cl_float, 2>
288 return __normalize(p);
290 __SYCL_EXPORT s::vec<cl::cl_float, 3>
292 return __normalize(p);
294 __SYCL_EXPORT s::vec<cl::cl_float, 4>
296 return __normalize(p);
299 return __normalize(p);
302 return __normalize(p);
304 __SYCL_EXPORT s::vec<cl::cl_double, 2>
306 return __normalize(p);
308 __SYCL_EXPORT s::vec<cl::cl_double, 3>
310 return __normalize(p);
312 __SYCL_EXPORT s::vec<cl::cl_double, 4>
314 return __normalize(p);
317 return __normalize(p);
319 __SYCL_EXPORT s::vec<cl::cl_half, 2>
321 return __normalize(p);
323 __SYCL_EXPORT s::vec<cl::cl_half, 3>
325 return __normalize(p);
327 __SYCL_EXPORT s::vec<cl::cl_half, 4>
329 return __normalize(p);
334 return __fast_length(p);
337 return __fast_length(p);
340 return __fast_length(p);
343 return __fast_length(p);
346 return __fast_length(p);
357 return __fast_normalize(p);
359 __SYCL_EXPORT s::vec<cl::cl_float, 2>
361 return __fast_normalize(p);
363 __SYCL_EXPORT s::vec<cl::cl_float, 3>
365 return __fast_normalize(p);
367 __SYCL_EXPORT s::vec<cl::cl_float, 4>
369 return __fast_normalize(p);
378 s::vec<float, 1> p1) {
382 s::vec<cl::cl_float, 2> p1) {
386 s::vec<cl::cl_float, 3> p1) {
390 s::vec<cl::cl_float, 4> p1) {