38 #ifndef GLM_GTX_simd_vec4
39 #define GLM_GTX_simd_vec4 GLM_VERSION
44 #if(GLM_ARCH != GLM_ARCH_PURE)
46 #if(GLM_ARCH & GLM_ARCH_SSE2)
47 # include "../core/intrinsic_common.hpp"
48 # include "../core/intrinsic_geometric.hpp"
50 # error "GLM: GLM_GTX_simd_vec4 requires compiler support of SSE2 through intrinsics"
53 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
54 # pragma message("GLM: GLM_GTX_simd_vec4 extension included")
62 GLM_ALIGNED_STRUCT(16) fvec4SIMD
65 typedef __m128 value_type;
66 typedef std::size_t size_type;
67 static size_type value_size();
69 typedef fvec4SIMD type;
70 typedef tvec4<bool> bool_type;
78 fvec4SIMD(__m128
const & Data);
79 fvec4SIMD(fvec4SIMD
const & v);
94 tvec4<float>
const & v);
99 fvec4SIMD(
vec2 const & v,
float const & s1,
float const & s2);
100 fvec4SIMD(
float const & s1,
vec2 const & v,
float const & s2);
101 fvec4SIMD(
float const & s1,
float const & s2,
vec2 const & v);
102 fvec4SIMD(
vec3 const & v,
float const & s);
103 fvec4SIMD(
float const & s,
vec3 const & v);
104 fvec4SIMD(
vec2 const & v1,
vec2 const & v2);
110 fvec4SIMD& operator= (fvec4SIMD
const & v);
111 fvec4SIMD& operator+=(fvec4SIMD
const & v);
112 fvec4SIMD& operator-=(fvec4SIMD
const & v);
113 fvec4SIMD& operator*=(fvec4SIMD
const & v);
114 fvec4SIMD& operator/=(fvec4SIMD
const & v);
116 fvec4SIMD& operator+=(
float const & s);
117 fvec4SIMD& operator-=(
float const & s);
118 fvec4SIMD& operator*=(
float const & s);
119 fvec4SIMD& operator/=(
float const & s);
121 fvec4SIMD& operator++();
122 fvec4SIMD& operator--();
127 template <comp X, comp Y, comp Z, comp W>
128 fvec4SIMD& swizzle();
129 template <comp X, comp Y, comp Z, comp W>
130 fvec4SIMD swizzle()
const;
131 template <comp X, comp Y, comp Z>
132 fvec4SIMD swizzle()
const;
133 template <comp X, comp Y>
134 fvec4SIMD swizzle()
const;
136 fvec4SIMD swizzle()
const;
140 typedef glm::detail::fvec4SIMD simdVec4;
147 detail::tvec4<float> vec4_cast(
148 detail::fvec4SIMD
const & x);
152 detail::fvec4SIMD
abs(detail::fvec4SIMD
const & x);
156 detail::fvec4SIMD
sign(detail::fvec4SIMD
const & x);
160 detail::fvec4SIMD
floor(detail::fvec4SIMD
const & x);
165 detail::fvec4SIMD
trunc(detail::fvec4SIMD
const & x);
173 detail::fvec4SIMD
round(detail::fvec4SIMD
const & x);
184 detail::fvec4SIMD
ceil(detail::fvec4SIMD
const & x);
188 detail::fvec4SIMD
fract(detail::fvec4SIMD
const & x);
193 detail::fvec4SIMD
mod(
194 detail::fvec4SIMD
const & x,
195 detail::fvec4SIMD
const & y);
200 detail::fvec4SIMD
mod(
201 detail::fvec4SIMD
const & x,
215 detail::fvec4SIMD
min(
216 detail::fvec4SIMD
const & x,
217 detail::fvec4SIMD
const & y);
219 detail::fvec4SIMD
min(
220 detail::fvec4SIMD
const & x,
225 detail::fvec4SIMD
max(
226 detail::fvec4SIMD
const & x,
227 detail::fvec4SIMD
const & y);
229 detail::fvec4SIMD
max(
230 detail::fvec4SIMD
const & x,
236 detail::fvec4SIMD
clamp(
237 detail::fvec4SIMD
const & x,
238 detail::fvec4SIMD
const & minVal,
239 detail::fvec4SIMD
const & maxVal);
241 detail::fvec4SIMD
clamp(
242 detail::fvec4SIMD
const & x,
243 float const & minVal,
244 float const & maxVal);
271 detail::fvec4SIMD
mix(
272 detail::fvec4SIMD
const & x,
273 detail::fvec4SIMD
const & y,
274 detail::fvec4SIMD
const & a);
278 detail::fvec4SIMD
step(
279 detail::fvec4SIMD
const & edge,
280 detail::fvec4SIMD
const & x);
282 detail::fvec4SIMD
step(
284 detail::fvec4SIMD
const & x);
297 detail::fvec4SIMD
const & edge0,
298 detail::fvec4SIMD
const & edge1,
299 detail::fvec4SIMD
const & x);
304 detail::fvec4SIMD
const & x);
338 detail::fvec4SIMD
fma(
339 detail::fvec4SIMD
const & a,
340 detail::fvec4SIMD
const & b,
341 detail::fvec4SIMD
const & c);
365 detail::fvec4SIMD
const & x);
371 detail::fvec4SIMD
const & x);
377 detail::fvec4SIMD
const & x);
381 detail::fvec4SIMD length4(
382 detail::fvec4SIMD
const & x);
387 detail::fvec4SIMD fastLength4(
388 detail::fvec4SIMD
const & x);
393 detail::fvec4SIMD niceLength4(
394 detail::fvec4SIMD
const & x);
399 detail::fvec4SIMD
const & p0,
400 detail::fvec4SIMD
const & p1);
404 detail::fvec4SIMD distance4(
405 detail::fvec4SIMD
const & p0,
406 detail::fvec4SIMD
const & p1);
411 detail::fvec4SIMD
const & x,
412 detail::fvec4SIMD
const & y);
416 detail::fvec4SIMD dot4(
417 detail::fvec4SIMD
const & x,
418 detail::fvec4SIMD
const & y);
422 detail::fvec4SIMD
cross(
423 detail::fvec4SIMD
const & x,
424 detail::fvec4SIMD
const & y);
429 detail::fvec4SIMD
const & x);
435 detail::fvec4SIMD
const & x);
439 detail::fvec4SIMD simdFaceforward(
440 detail::fvec4SIMD
const & N,
441 detail::fvec4SIMD
const & I,
442 detail::fvec4SIMD
const & Nref);
448 detail::fvec4SIMD
const & I,
449 detail::fvec4SIMD
const & N);
456 detail::fvec4SIMD
const & I,
457 detail::fvec4SIMD
const & N,
462 detail::fvec4SIMD
sqrt(
463 detail::fvec4SIMD
const & x);
468 detail::fvec4SIMD niceSqrt(
469 detail::fvec4SIMD
const & x);
475 detail::fvec4SIMD
const & x);
480 detail::fvec4SIMD
const & x);
485 detail::fvec4SIMD fastInversesqrt(
486 detail::fvec4SIMD
const & x);
491 #include "simd_vec4.inl"
493 #endif//(GLM_ARCH != GLM_ARCH_PURE)
495 #endif//GLM_GTX_simd_vec4