- Main Page
- Related Pages
- Modules
- Files

- File List

simd_vec4.hpp
Go to the documentation of this file.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 #ifndef GLM_GTX_simd_vec4
39 #define GLM_GTX_simd_vec4 GLM_VERSION
40
41 // Dependency:
42 #include "../glm.hpp"
43
44 #if(GLM_ARCH != GLM_ARCH_PURE)
45
46 #if(GLM_ARCH & GLM_ARCH_SSE2)
47 # include "../core/intrinsic_common.hpp"
48 # include "../core/intrinsic_geometric.hpp"
49 #else
50 # error "GLM: GLM_GTX_simd_vec4 requires compiler support of SSE2 through intrinsics"
51 #endif
52
53 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
54 # pragma message("GLM: GLM_GTX_simd_vec4 extension included")
55 #endif
56
57 namespace glm{
58 namespace detail
59 {
62 GLM_ALIGNED_STRUCT(16) fvec4SIMD
63 {
64 enum ctor{null};
65 typedef __m128 value_type;
66 typedef std::size_t size_type;
67 static size_type value_size();
68
69 typedef fvec4SIMD type;
70 typedef tvec4<bool> bool_type;
71
72 __m128 Data;
73
75 // Implicit basic constructors
76
77 fvec4SIMD();
78 fvec4SIMD(__m128 const & Data);
79 fvec4SIMD(fvec4SIMD const & v);
80
82 // Explicit basic constructors
83
84 explicit fvec4SIMD(
85 ctor);
86 explicit fvec4SIMD(
87 float const & s);
88 explicit fvec4SIMD(
89 float const & x,
90 float const & y,
91 float const & z,
92 float const & w);
93 explicit fvec4SIMD(
94 tvec4<float> const & v);
95
98
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);
105 //fvec4SIMD(ivec4SIMD const & v);
106
108 // Unary arithmetic operators
109
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);
115
116 fvec4SIMD& operator+=(float const & s);
117 fvec4SIMD& operator-=(float const & s);
118 fvec4SIMD& operator*=(float const & s);
119 fvec4SIMD& operator/=(float const & s);
120
121 fvec4SIMD& operator++();
122 fvec4SIMD& operator--();
123
125 // Swizzle operators
126
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;
135 template <comp X>
136 fvec4SIMD swizzle() const;
137 };
138 }//namespace detail
139
140 typedef glm::detail::fvec4SIMD simdVec4;
141
144
147 detail::tvec4<float> vec4_cast(
148 detail::fvec4SIMD const & x);
149
152 detail::fvec4SIMD abs(detail::fvec4SIMD const & x);
153
156 detail::fvec4SIMD sign(detail::fvec4SIMD const & x);
157
160 detail::fvec4SIMD floor(detail::fvec4SIMD const & x);
161
165 detail::fvec4SIMD trunc(detail::fvec4SIMD const & x);
166
173 detail::fvec4SIMD round(detail::fvec4SIMD const & x);
174
179 //detail::fvec4SIMD roundEven(detail::fvec4SIMD const & x);
180
184 detail::fvec4SIMD ceil(detail::fvec4SIMD const & x);
185
188 detail::fvec4SIMD fract(detail::fvec4SIMD const & x);
189
193 detail::fvec4SIMD mod(
194 detail::fvec4SIMD const & x,
195 detail::fvec4SIMD const & y);
196
200 detail::fvec4SIMD mod(
201 detail::fvec4SIMD const & x,
202 float const & y);
203
209 //detail::fvec4SIMD modf(
210 // detail::fvec4SIMD const & x,
211 // detail::fvec4SIMD & i);
212
215 detail::fvec4SIMD min(
216 detail::fvec4SIMD const & x,
217 detail::fvec4SIMD const & y);
218
219 detail::fvec4SIMD min(
220 detail::fvec4SIMD const & x,
221 float const & y);
222
225 detail::fvec4SIMD max(
226 detail::fvec4SIMD const & x,
227 detail::fvec4SIMD const & y);
228
229 detail::fvec4SIMD max(
230 detail::fvec4SIMD const & x,
231 float const & y);
232
236 detail::fvec4SIMD clamp(
237 detail::fvec4SIMD const & x,
238 detail::fvec4SIMD const & minVal,
239 detail::fvec4SIMD const & maxVal);
240
241 detail::fvec4SIMD clamp(
242 detail::fvec4SIMD const & x,
243 float const & minVal,
244 float const & maxVal);
245
269 // \todo Test when 'a' is a boolean.
271 detail::fvec4SIMD mix(
272 detail::fvec4SIMD const & x,
273 detail::fvec4SIMD const & y,
274 detail::fvec4SIMD const & a);
275
278 detail::fvec4SIMD step(
279 detail::fvec4SIMD const & edge,
280 detail::fvec4SIMD const & x);
281
282 detail::fvec4SIMD step(
283 float const & edge,
284 detail::fvec4SIMD const & x);
285
296 detail::fvec4SIMD smoothstep(
297 detail::fvec4SIMD const & edge0,
298 detail::fvec4SIMD const & edge1,
299 detail::fvec4SIMD const & x);
300
301 detail::fvec4SIMD smoothstep(
302 float const & edge0,
303 float const & edge1,
304 detail::fvec4SIMD const & x);
305
312 //bvec4 isnan(detail::fvec4SIMD const & x);
313
320 //bvec4 isinf(detail::fvec4SIMD const & x);
321
326 //detail::ivec4SIMD floatBitsToInt(detail::fvec4SIMD const & value);
327
334 //detail::fvec4SIMD intBitsToFloat(detail::ivec4SIMD const & value);
335
338 detail::fvec4SIMD fma(
339 detail::fvec4SIMD const & a,
340 detail::fvec4SIMD const & b,
341 detail::fvec4SIMD const & c);
342
352 //detail::fvec4SIMD frexp(detail::fvec4SIMD const & x, detail::ivec4SIMD & exp);
353
360 //detail::fvec4SIMD ldexp(detail::fvec4SIMD const & x, detail::ivec4SIMD const & exp);
361
364 float length(
365 detail::fvec4SIMD const & x);
366
370 float fastLength(
371 detail::fvec4SIMD const & x);
372
376 float niceLength(
377 detail::fvec4SIMD const & x);
378
381 detail::fvec4SIMD length4(
382 detail::fvec4SIMD const & x);
383
387 detail::fvec4SIMD fastLength4(
388 detail::fvec4SIMD const & x);
389
393 detail::fvec4SIMD niceLength4(
394 detail::fvec4SIMD const & x);
395
398 float distance(
399 detail::fvec4SIMD const & p0,
400 detail::fvec4SIMD const & p1);
401
404 detail::fvec4SIMD distance4(
405 detail::fvec4SIMD const & p0,
406 detail::fvec4SIMD const & p1);
407
410 float simdDot(
411 detail::fvec4SIMD const & x,
412 detail::fvec4SIMD const & y);
413
416 detail::fvec4SIMD dot4(
417 detail::fvec4SIMD const & x,
418 detail::fvec4SIMD const & y);
419
422 detail::fvec4SIMD cross(
423 detail::fvec4SIMD const & x,
424 detail::fvec4SIMD const & y);
425
428 detail::fvec4SIMD normalize(
429 detail::fvec4SIMD const & x);
430
434 detail::fvec4SIMD fastNormalize(
435 detail::fvec4SIMD const & x);
436
439 detail::fvec4SIMD simdFaceforward(
440 detail::fvec4SIMD const & N,
441 detail::fvec4SIMD const & I,
442 detail::fvec4SIMD const & Nref);
443
447 detail::fvec4SIMD reflect(
448 detail::fvec4SIMD const & I,
449 detail::fvec4SIMD const & N);
450
455 detail::fvec4SIMD refract(
456 detail::fvec4SIMD const & I,
457 detail::fvec4SIMD const & N,
458 float const & eta);
459
462 detail::fvec4SIMD sqrt(
463 detail::fvec4SIMD const & x);
464
468 detail::fvec4SIMD niceSqrt(
469 detail::fvec4SIMD const & x);
470
474 detail::fvec4SIMD fastSqrt(
475 detail::fvec4SIMD const & x);
476
479 detail::fvec4SIMD inversesqrt(
480 detail::fvec4SIMD const & x);
481
485 detail::fvec4SIMD fastInversesqrt(
486 detail::fvec4SIMD const & x);
487
489 }//namespace glm
490
491 #include "simd_vec4.inl"
492
493 #endif//(GLM_ARCH != GLM_ARCH_PURE)
494
495 #endif//GLM_GTX_simd_vec4