5 #ifndef __UTIL_SSEF_H__
6 #define __UTIL_SSEF_H__
14 #ifdef __KERNEL_SSE2__
76 # if defined(__KERNEL_AVX__)
79 return _mm_broadcast_ss((
float *)
a);
84 return _mm_set1_ps(*(
float *)
a);
110 return _mm_castsi128_ps(
a);
118 return _mm_xor_ps(
a.m128, _mm_castsi128_ps(_mm_set1_epi32(0x80000000)));
122 return _mm_and_ps(
a.m128, _mm_castsi128_ps(_mm_set1_epi32(0x7fffffff)));
124 # if defined(__KERNEL_SSE41__)
127 return _mm_blendv_ps(ssef(1.0f), -ssef(1.0f), _mm_cmplt_ps(
a, ssef(0.0f)));
132 return _mm_and_ps(
a.m128, _mm_castsi128_ps(_mm_set1_epi32(0x80000000)));
137 const ssef
r = _mm_rcp_ps(
a.m128);
138 return _mm_sub_ps(_mm_add_ps(
r,
r), _mm_mul_ps(_mm_mul_ps(
r,
r),
a));
142 return _mm_mul_ps(
a,
a);
146 return _mm_sqrt_ps(
a.m128);
150 const ssef
r = _mm_rsqrt_ps(
a.m128);
152 _mm_mul_ps(_mm_set_ps(1.5f, 1.5f, 1.5f, 1.5f),
r),
153 _mm_mul_ps(_mm_mul_ps(_mm_mul_ps(
a, _mm_set_ps(-0.5f, -0.5f, -0.5f, -0.5f)),
r),
163 return _mm_add_ps(
a.m128,
b.m128);
176 return _mm_sub_ps(
a.m128,
b.m128);
189 return _mm_mul_ps(
a.m128,
b.m128);
202 return _mm_div_ps(
a.m128,
b.m128);
215 return _mm_xor_ps(
a.m128,
b.m128);
219 return _mm_xor_ps(
a.m128, _mm_castsi128_ps(
b.m128));
224 return _mm_and_ps(
a.m128,
b.m128);
228 return _mm_and_ps(
a.m128, _mm_castsi128_ps(
b.m128));
233 return _mm_or_ps(
a.m128,
b.m128);
237 return _mm_or_ps(
a.m128, _mm_castsi128_ps(
b.m128));
242 return _mm_andnot_ps(
a.m128,
b.m128);
247 return _mm_min_ps(
a.m128,
b.m128);
251 return _mm_min_ps(
a.m128, ssef(
b));
255 return _mm_min_ps(ssef(
a),
b.m128);
260 return _mm_max_ps(
a.m128,
b.m128);
264 return _mm_max_ps(
a.m128, ssef(
b));
268 return _mm_max_ps(ssef(
a),
b.m128);
271 # if defined(__KERNEL_SSE41__)
274 const ssei ai = _mm_castps_si128(
a);
275 const ssei bi = _mm_castps_si128(
b);
276 const ssei ci = _mm_min_epi32(ai, bi);
277 return _mm_castsi128_ps(ci);
281 # if defined(__KERNEL_SSE41__)
284 const ssei ai = _mm_castps_si128(
a);
285 const ssei bi = _mm_castps_si128(
b);
286 const ssei ci = _mm_max_epi32(ai, bi);
287 return _mm_castsi128_ps(ci);
297 # if defined(__KERNEL_NEON__)
298 return vfmaq_f32(
c,
a,
b);
299 # elif defined(__KERNEL_AVX2__)
300 return _mm_fmadd_ps(
a,
b,
c);
307 # if defined(__KERNEL_NEON__)
308 return vfmaq_f32(vnegq_f32(
c),
a,
b);
309 # elif defined(__KERNEL_AVX2__)
310 return _mm_fmsub_ps(
a,
b,
c);
317 # if defined(__KERNEL_NEON__)
318 return vfmsq_f32(
c,
a,
b);
319 # elif defined(__KERNEL_AVX2__)
320 return _mm_fnmadd_ps(
a,
b,
c);
327 # if defined(__KERNEL_NEON__)
328 return vfmsq_f32(vnegq_f32(
c),
a,
b);
329 # elif defined(__KERNEL_AVX2__)
330 return _mm_fnmsub_ps(
a,
b,
c);
382 return _mm_cmpeq_ps(
a.m128,
b.m128);
395 return _mm_cmpneq_ps(
a.m128,
b.m128);
408 return _mm_cmplt_ps(
a.m128,
b.m128);
421 return _mm_cmpnlt_ps(
a.m128,
b.m128);
434 return _mm_cmpnle_ps(
a.m128,
b.m128);
447 return _mm_cmple_ps(
a.m128,
b.m128);
460 # ifdef __KERNEL_SSE41__
461 return _mm_blendv_ps(f,
t, m);
463 return _mm_or_ps(_mm_and_ps(m,
t), _mm_andnot_ps(m, f));
469 # ifdef __KERNEL_SSE41__
470 return _mm_blendv_ps(f,
t, m);
472 return _mm_or_ps(_mm_and_ps(m,
t), _mm_andnot_ps(m, f));
478 # if defined(__KERNEL_SSE41__) && \
479 ((!defined(__clang__) && !defined(_MSC_VER)) || defined(__INTEL_COMPILER))
480 return _mm_blend_ps(f,
t,
mask);
490 # if defined(__KERNEL_SSE41__)
493 # ifdef __KERNEL_NEON__
494 return vrndnq_f32(
a);
496 return _mm_round_ps(
a, _MM_FROUND_TO_NEAREST_INT);
501 # ifdef __KERNEL_NEON__
502 return vrndmq_f32(
a);
504 return _mm_round_ps(
a, _MM_FROUND_TO_NEG_INF);
509 # ifdef __KERNEL_NEON__
510 return vrndpq_f32(
a);
512 return _mm_round_ps(
a, _MM_FROUND_TO_POS_INF);
517 # ifdef __KERNEL_NEON__
520 return _mm_round_ps(
a, _MM_FROUND_TO_ZERO);
525 # ifdef __KERNEL_NEON__
526 return vrndmq_f32(
a);
528 return _mm_round_ps(
a, _MM_FROUND_TO_NEG_INF);
533 # ifdef __KERNEL_NEON__
534 return vrndpq_f32(
a);
536 return _mm_round_ps(
a, _MM_FROUND_TO_POS_INF);
549 return _mm_cvttps_epi32(
a.m128);
565 return madd(
t,
b, (ssef(1.0f) -
t) *
a);
574 return _mm_unpacklo_ps(
a.m128,
b.m128);
578 return _mm_unpackhi_ps(
a.m128,
b.m128);
581 template<
size_t i0,
size_t i1,
size_t i2,
size_t i3>
584 # ifdef __KERNEL_NEON__
585 return shuffle_neon<float32x4_t, i0, i1, i2, i3>(
b.m128);
587 return _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(
b), _MM_SHUFFLE(i3, i2,
i1, i0)));
593 return _mm_movelh_ps(
a,
a);
596 template<>
__forceinline const ssef shuffle<2, 3, 2, 3>(
const ssef &
a)
598 return _mm_movehl_ps(
a,
a);
601 template<
size_t i0,
size_t i1,
size_t i2,
size_t i3>
604 # ifdef __KERNEL_NEON__
605 return shuffle_neon<float32x4_t, i0, i1, i2, i3>(
a,
b);
607 return _mm_shuffle_ps(
a,
b, _MM_SHUFFLE(i3, i2,
i1, i0));
613 # ifdef __KERNEL_NEON__
614 return shuffle_neon<float32x4_t, i0, i0, i0, i0>(
a,
b);
616 return _mm_shuffle_ps(
a,
b, _MM_SHUFFLE(i0, i0, i0, i0));
620 # ifndef __KERNEL_NEON__
623 return _mm_movelh_ps(
a,
b);
626 template<>
__forceinline const ssef shuffle<2, 3, 2, 3>(
const ssef &
a,
const ssef &
b)
628 return _mm_movehl_ps(
b,
a);
632 # if defined(__KERNEL_SSSE3__)
633 __forceinline const ssef shuffle8(
const ssef &
a,
const ssei &shuf)
635 return _mm_castsi128_ps(_mm_shuffle_epi8(_mm_castps_si128(
a), shuf));
639 # if defined(__KERNEL_SSE3__)
642 return _mm_moveldup_ps(
b);
646 return _mm_movehdup_ps(
b);
652 return shuffle<i0, i0, i0, i0>(
b);
655 # if defined(__KERNEL_AVX__)
658 return _mm_permutevar_ps(
a, shuf);
664 return _mm_cvtss_f32(shuffle<i, i, i, i>(
a));
668 return _mm_cvtss_f32(
a);
671 # if defined(__KERNEL_SSE41__)
672 template<
size_t dst,
size_t src,
size_t clr>
675 # ifdef __KERNEL_NEON__
683 return _mm_insert_ps(
a,
b, (dst << 4) | (
src << 6) | clr);
688 return insert<dst, src, 0>(
a,
b);
692 return insert<dst, 0>(
a, _mm_set_ss(
b));
727 const ssef &r0,
const ssef &r1,
const ssef &r2,
const ssef &r3, ssef &c0, ssef &c1, ssef &c2)
744 # ifdef __KERNEL_NEON__
745 return vdupq_n_f32(vminvq_f32(
v));
747 ssef h =
min(shuffle<1, 0, 3, 2>(
v),
v);
748 return min(shuffle<2, 3, 0, 1>(h), h);
753 # ifdef __KERNEL_NEON__
754 return vdupq_n_f32(vmaxvq_f32(
v));
756 ssef h =
max(shuffle<1, 0, 3, 2>(
v),
v);
757 return max(shuffle<2, 3, 0, 1>(h), h);
762 # ifdef __KERNEL_NEON__
763 return vdupq_n_f32(vaddvq_f32(
v));
765 ssef h = shuffle<1, 0, 3, 2>(
v) +
v;
766 return shuffle<2, 3, 0, 1>(h) + h;
772 # ifdef __KERNEL_NEON__
773 return vminvq_f32(
v);
780 # ifdef __KERNEL_NEON__
781 return vmaxvq_f32(
v);
788 # ifdef __KERNEL_NEON__
789 return vaddvq_f32(
v);
806 const ssef
a =
select(valid,
v, ssef(pos_inf));
811 const ssef
a =
select(valid,
v, ssef(neg_inf));
817 return _mm_movemask_ps(
a);
826 # ifdef __KERNEL_WITH_SSE_ALIGN__
827 return _mm_load_ps(&
a.x);
829 return _mm_loadu_ps(&
a.x);
835 # ifdef __KERNEL_WITH_SSE_ALIGN__
836 return _mm_load_ps(&
a.x);
838 return _mm_loadu_ps(&
a.x);
844 return _mm_load_ps((
float *)
a);
849 return _mm_set_ss(
a);
854 _mm_store_ps((
float *)
ptr,
v);
859 return _mm_loadu_ps((
float *)
a);
864 _mm_storeu_ps((
float *)
ptr,
v);
869 # if defined(__KERNEL_AVX__)
870 _mm_maskstore_ps((
float *)
ptr, (__m128i)
mask, f);
878 # if defined(__KERNEL_SSE41__)
879 return _mm_castsi128_ps(_mm_stream_load_si128((__m128i *)
ptr));
881 return _mm_load_ps((
float *)
ptr);
887 # if defined(__KERNEL_SSE41__)
888 _mm_stream_ps((
float *)
ptr,
v);
890 _mm_store_ps((
float *)
ptr,
v);
907 const ssef b0 = shuffle<1, 2, 0, 3>(
b);
908 const ssef a1 = shuffle<1, 2, 0, 3>(
a);
910 return msub(a0, b0, a1 * b1);
915 return shuffle<1, 2, 0, 3>(cross_zxy(
a,
b));
920 # ifdef __KERNEL_SSE41__
921 return _mm_dp_ps(
a.m128,
b.m128, 0x7f);
924 return ssef(((
float *)&
t)[0] + ((
float *)&
t)[1] + ((
float *)&
t)[2]);
931 # ifndef __KERNEL_SSE41__
933 return (
X ?
t.x *
t.x : 0.0f) + (
Y ?
t.y *
t.y : 0.0f) + (
Z ?
t.z *
t.z : 0.0f) +
934 (W ?
t.w *
t.w : 0.0f);
937 ssef(_mm_dp_ps(
a.m128,
a.m128, (
X << 4) | (
Y << 5) | (
Z << 6) | (W << 7) | 0xf)));
943 # ifdef __KERNEL_SSE41__
944 return extract<0>(ssef(_mm_dp_ps(
a.m128,
b.m128, 0x7f)));
947 return ((
float *)&
t)[0] + ((
float *)&
t)[1] + ((
float *)&
t)[2];
953 return dot3_splat(
a,
a);
968 # ifdef __KERNEL_SSSE3__
971 typedef ssei shuffle_swap_t;
975 return _mm_set_epi8(15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0);
980 return _mm_set_epi8(7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8);
985 return cast(_mm_shuffle_epi8(
cast(
a), shuf));
991 typedef int shuffle_swap_t;
1007 return shuffle<1, 0, 3, 2>(
a);
1009 return shuffle<3, 2, 1, 0>(
a);
1014 # if defined(__KERNEL_SSE41__) && !defined(__KERNEL_NEON__)
1017 const shuffle_swap_t &shuf_identity,
1018 const shuffle_swap_t &shuf_swap,
1021 shuffle_swap_t shufflexyz[3])
1023 const __m128 idirsplat_raw[] = {_mm_set_ps1(idir.
x), _mm_set_ps1(idir.
y), _mm_set_ps1(idir.
z)};
1024 idirsplat[0] = _mm_xor_ps(idirsplat_raw[0], pn);
1025 idirsplat[1] = _mm_xor_ps(idirsplat_raw[1], pn);
1026 idirsplat[2] = _mm_xor_ps(idirsplat_raw[2], pn);
1028 const ssef signmask =
cast(ssei(0x80000000));
1029 const ssef shuf_identity_f =
cast(shuf_identity);
1030 const ssef shuf_swap_f =
cast(shuf_swap);
1032 shufflexyz[0] = _mm_castps_si128(
1033 _mm_blendv_ps(shuf_identity_f, shuf_swap_f, _mm_and_ps(idirsplat_raw[0], signmask)));
1034 shufflexyz[1] = _mm_castps_si128(
1035 _mm_blendv_ps(shuf_identity_f, shuf_swap_f, _mm_and_ps(idirsplat_raw[1], signmask)));
1036 shufflexyz[2] = _mm_castps_si128(
1037 _mm_blendv_ps(shuf_identity_f, shuf_swap_f, _mm_and_ps(idirsplat_raw[2], signmask)));
1043 const shuffle_swap_t &shuf_identity,
1044 const shuffle_swap_t &shuf_swap,
1047 shuffle_swap_t shufflexyz[3])
1049 idirsplat[0] = ssef(idir.
x) ^ pn;
1050 idirsplat[1] = ssef(idir.
y) ^ pn;
1051 idirsplat[2] = ssef(idir.
z) ^ pn;
1053 shufflexyz[0] = (idir.
x >= 0) ? shuf_identity : shuf_swap;
1054 shufflexyz[1] = (idir.
y >= 0) ? shuf_identity : shuf_swap;
1055 shufflexyz[2] = (idir.
z >= 0) ? shuf_identity : shuf_swap;
1062 ssei
a = _mm_srli_epi32(in, 16);
1063 ssei
b = _mm_and_si128(in, _mm_set1_epi32(0x0000ffff));
1064 ssei
c = _mm_or_si128(
a, _mm_set1_epi32(0x53000000));
1065 ssef
d = _mm_cvtepi32_ps(
b);
1066 ssef
e = _mm_sub_ps(_mm_castsi128_ps(
c), _mm_castsi128_ps(_mm_set1_epi32(0x53000000)));
1067 return _mm_add_ps(
e, d);
1070 template<
size_t S1,
size_t S2,
size_t S3,
size_t S4>
1073 return cast(
cast(
a) ^ ssei(S1 << 31, S2 << 31, S3 << 31, S4 << 31));
1083 "%s: %.8f %.8f %.8f %.8f\n",
label, (
double)
a[0], (
double)
a[1], (
double)
a[2], (
double)
a[3]);
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble w _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat w _GL_VOID_RET _GL_VOID GLint GLint GLint w _GL_VOID_RET _GL_VOID GLshort GLshort GLshort w _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble y2 _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat y2 _GL_VOID_RET _GL_VOID GLint GLint GLint y2 _GL_VOID_RET _GL_VOID GLshort GLshort GLshort y2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLuint *buffer _GL_VOID_RET _GL_VOID GLdouble t _GL_VOID_RET _GL_VOID GLfloat t _GL_VOID_RET _GL_VOID GLint t _GL_VOID_RET _GL_VOID GLshort t _GL_VOID_RET _GL_VOID GLdouble GLdouble r _GL_VOID_RET _GL_VOID GLfloat GLfloat r _GL_VOID_RET _GL_VOID GLint GLint r _GL_VOID_RET _GL_VOID GLshort GLshort r _GL_VOID_RET _GL_VOID GLdouble GLdouble r
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint i1
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble w _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat w _GL_VOID_RET _GL_VOID GLint GLint GLint w _GL_VOID_RET _GL_VOID GLshort GLshort GLshort w _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble y2 _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat y2 _GL_VOID_RET _GL_VOID GLint GLint GLint y2 _GL_VOID_RET _GL_VOID GLshort GLshort GLshort y2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLuint *buffer _GL_VOID_RET _GL_VOID GLdouble t _GL_VOID_RET _GL_VOID GLfloat t _GL_VOID_RET _GL_VOID GLint t _GL_VOID_RET _GL_VOID GLshort t _GL_VOID_RET _GL_VOID GLdouble t
in reality light always falls off quadratically Particle Retrieve the data of the particle that spawned the object for example to give variation to multiple instances of an object Point Retrieve information about points in a point cloud Retrieve the edges of an object as it appears to Cycles topology will always appear triangulated Convert a blackbody temperature to an RGB value Normal Generate a perturbed normal from an RGB normal map image Typically used for faking highly detailed surfaces Generate an OSL shader from a file or text data block Image Sample an image file as a texture Sky Generate a procedural sky texture Noise Generate fractal Perlin noise Wave Generate procedural bands or rings with noise Voronoi Generate Worley noise based on the distance to random points Typically used to generate textures such as or biological cells Brick Generate a procedural texture producing bricks Texture Retrieve multiple types of texture coordinates nTypically used as inputs for texture nodes Vector Convert a or normal between and object coordinate space Combine Create a color from its and value channels Color Retrieve a color or the default fallback if none is specified Separate Split a vector into its X
in reality light always falls off quadratically Particle Retrieve the data of the particle that spawned the object for example to give variation to multiple instances of an object Point Retrieve information about points in a point cloud Retrieve the edges of an object as it appears to Cycles topology will always appear triangulated Convert a blackbody temperature to an RGB value Normal Generate a perturbed normal from an RGB normal map image Typically used for faking highly detailed surfaces Generate an OSL shader from a file or text data block Image Sample an image file as a texture Sky Generate a procedural sky texture Noise Generate fractal Perlin noise Wave Generate procedural bands or rings with noise Voronoi Generate Worley noise based on the distance to random points Typically used to generate textures such as or biological cells Brick Generate a procedural texture producing bricks Texture Retrieve multiple types of texture coordinates nTypically used as inputs for texture nodes Vector Convert a or normal between and object coordinate space Combine Create a color from its and value channels Color Retrieve a color or the default fallback if none is specified Separate Split a vector into its Y
__forceinline uint32_t movemask(const avxb &a)
__forceinline const avxb operator&(const avxb &a, const avxb &b)
Binary Operators.
__forceinline const avxb unpacklo(const avxb &a, const avxb &b)
Movement/Shifting/Shuffling Functions.
__forceinline const avxb operator|(const avxb &a, const avxb &b)
__forceinline const avxb select(const avxb &m, const avxb &t, const avxb &f)
__forceinline const avxb unpackhi(const avxb &a, const avxb &b)
__forceinline avxf maxi(const avxf &a, const avxf &b)
__forceinline avxf mini(const avxf &a, const avxf &b)
__forceinline const avxf madd(const avxf &a, const avxf &b, const avxf &c)
Ternary Operators.
__forceinline const avxf msub(const avxf &a, const avxf &b, const avxf &c)
ccl_device_inline const avxf set_sign_bit(const avxf &a)
__forceinline const avxf nmadd(const avxf &a, const avxf &b, const avxf &c)
__forceinline float extract< 0 >(const avxf &a)
__forceinline void dot3(const avxf &a, const avxf &b, float &den, float &den2)
__forceinline const avxi shuffle< 0, 0, 2, 2 >(const avxi &b)
__forceinline avxi & operator-=(avxi &a, const avxi &b)
__forceinline const avxi shuffle< 0, 1, 0, 1 >(const avxi &b)
__forceinline int reduce_max(const avxi &v)
__forceinline uint32_t select_max(const avxi &v)
__forceinline const avxi vreduce_add(const avxi &v)
__forceinline int reduce_min(const avxi &v)
__forceinline const avxi shuffle< 1, 1, 3, 3 >(const avxi &b)
__forceinline const avxi vreduce_min(const avxi &v)
__forceinline const avxi broadcast(const int *ptr)
__forceinline avxi & operator+=(avxi &a, const avxi &b)
Assignment Operators.
__forceinline const avxi vreduce_max(const avxi &v)
__forceinline int reduce_add(const avxi &v)
__forceinline uint32_t select_min(const avxi &v)
__forceinline avxi & operator*=(avxi &a, const avxi &b)
__forceinline float extract(const int4 &b)
ATTR_WARN_UNUSED_RESULT const BMVert const BMEdge * e
ATTR_WARN_UNUSED_RESULT const BMVert * v
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
btGeneric6DofConstraint & operator=(btGeneric6DofConstraint &other)
btMatrix3x3 transpose() const
Return the transpose of the matrix.
SIMD_FORCE_INLINE btVector3 & operator[](int i)
Get a mutable reference to a row of the matrix as a vector.
#define ccl_device_inline
#define CCL_NAMESPACE_END
SyclQueue void void * src
static void shuffle(float2 points[], int size, int rng_seed)
ccl_device_inline float2 operator/=(float2 &a, const float2 &b)
ccl_device_inline float3 ceil(const float3 &a)
ccl_device_inline float3 rcp(const float3 &a)
ccl_device_inline float len_squared(const float3 a)
ccl_device_inline float4 mask(const int4 &mask, const float4 &a)
Matrix< T, M, N > operator-(const Matrix< T, M, N > &m1, const Matrix< T, M, N > &m2)
Matrix< T, M, N > operator/(const Matrix< T, M, N > &m1, const typename Matrix< T, M, N >::value_type lambda)
Vec< T, N > operator*(const typename Vec< T, N >::value_type r, const Vec< T, N > &v)
Insertion insert(const float3 &point_prev, const float3 &handle_prev, const float3 &handle_next, const float3 &point_next, float parameter)
bool operator==(const AttributeIDRef &a, const AttributeIDRef &b)
GPUState operator^(const GPUState &a, const GPUState &b)
T dot(const vec_base< T, Size > &a, const vec_base< T, Size > &b)
vec_base< T, 3 > cross(const vec_base< T, 3 > &a, const vec_base< T, 3 > &b)
constexpr bool operator!=(StringRef a, StringRef b)
constexpr bool operator>=(StringRef a, StringRef b)
constexpr bool operator<(StringRef a, StringRef b)
constexpr bool operator<=(StringRef a, StringRef b)
constexpr bool operator>(StringRef a, StringRef b)
std::string operator+(StringRef a, StringRef b)
static const pxr::TfToken b("b", pxr::TfToken::Immortal)
CCL_NAMESPACE_BEGIN __forceinline uint32_t __bsf(const uint32_t x)
ccl_device_inline float sqr(float a)
ccl_device_inline float floorfrac(float x, ccl_private int *i)
ccl_device_inline size_t round_down(size_t x, size_t multiple)
ccl_device_inline size_t round_up(size_t x, size_t multiple)