- Main Page
- Related Pages
- Modules
- Classes
- Files

- File List

simd_vec4.hpp
Go to the documentation of this file.

    00001
    00002
    00003
    00004
    00005
    00006
    00007
    00008
    00009
    00010
    00011
    00012
    00013
    00014
    00015
    00016
    00017
    00018
    00019
    00020
    00021
    00022
    00023
    00024
    00025
    00026
    00027
    00028
    00029
    00030
    00031
    00032
    00033
    00034
    00035
    00036
    00037
    00038 #ifndef GLM_GTX_simd_vec4
    00039 #define GLM_GTX_simd_vec4 GLM_VERSION
    00040
    00041 // Dependency:
    00042 #include "../glm.hpp"
    00043
    00044 #if(GLM_ARCH != GLM_ARCH_PURE)
    00045
    00046 #if(GLM_ARCH & GLM_ARCH_SSE2)
    00047 #       include "../core/intrinsic_common.hpp"
    00048 #       include "../core/intrinsic_geometric.hpp"
    00049 #else
    00050 #       error "GLM: GLM_GTX_simd_vec4 requires compiler support of SSE2 through intrinsics"
    00051 #endif
    00052
    00053 #if(defined(GLM_MESSAGES) && !defined(glm_ext))
    00054 #       pragma message("GLM: GLM_GTX_simd_vec4 extension included")
    00055 #endif
    00056
    00057 namespace glm{
    00058 namespace detail
    00059 {
    00062         GLM_ALIGNED_STRUCT(16) fvec4SIMD
    00063         {
    00064                 enum ctor{null};
    00065                 typedef __m128 value_type;
    00066                 typedef std::size_t size_type;
    00067                 static size_type value_size();
    00068
    00069                 typedef fvec4SIMD type;
    00070                 typedef tvec4<bool> bool_type;
    00071
    00072                 __m128 Data;
    00073
    00075                 // Implicit basic constructors
    00076
    00077                 fvec4SIMD();
    00078                 fvec4SIMD(__m128 const & Data);
    00079                 fvec4SIMD(fvec4SIMD const & v);
    00080
    00082                 // Explicit basic constructors
    00083
    00084                 explicit fvec4SIMD(
    00085                         ctor);
    00086                 explicit fvec4SIMD(
    00087                         float const & s);
    00088                 explicit fvec4SIMD(
    00089                         float const & x,
    00090                         float const & y,
    00091                         float const & z,
    00092                         float const & w);
    00093                 explicit fvec4SIMD(
    00094                         tvec4<float> const & v);
    00095
    00098
    00099                 fvec4SIMD(vec2 const & v, float const & s1, float const & s2);
    00100                 fvec4SIMD(float const & s1, vec2 const & v, float const & s2);
    00101                 fvec4SIMD(float const & s1, float const & s2, vec2 const & v);
    00102                 fvec4SIMD(vec3 const & v, float const & s);
    00103                 fvec4SIMD(float const & s, vec3 const & v);
    00104                 fvec4SIMD(vec2 const & v1, vec2 const & v2);
    00105                 //fvec4SIMD(ivec4SIMD const & v);
    00106
    00108                 // Unary arithmetic operators
    00109
    00110                 fvec4SIMD& operator= (fvec4SIMD const & v);
    00111                 fvec4SIMD& operator+=(fvec4SIMD const & v);
    00112                 fvec4SIMD& operator-=(fvec4SIMD const & v);
    00113                 fvec4SIMD& operator*=(fvec4SIMD const & v);
    00114                 fvec4SIMD& operator/=(fvec4SIMD const & v);
    00115
    00116                 fvec4SIMD& operator+=(float const & s);
    00117                 fvec4SIMD& operator-=(float const & s);
    00118                 fvec4SIMD& operator*=(float const & s);
    00119                 fvec4SIMD& operator/=(float const & s);
    00120
    00121                 fvec4SIMD& operator++();
    00122                 fvec4SIMD& operator--();
    00123
    00125                 // Swizzle operators
    00126
    00127                 template <comp X, comp Y, comp Z, comp W>
    00128                 fvec4SIMD& swizzle();
    00129                 template <comp X, comp Y, comp Z, comp W>
    00130                 fvec4SIMD swizzle() const;
    00131                 template <comp X, comp Y, comp Z>
    00132                 fvec4SIMD swizzle() const;
    00133                 template <comp X, comp Y>
    00134                 fvec4SIMD swizzle() const;
    00135                 template <comp X>
    00136                 fvec4SIMD swizzle() const;
    00137         };
    00138 }//namespace detail
    00139
    00140         typedef glm::detail::fvec4SIMD simdVec4;
    00141
    00144
    00147         detail::tvec4<float> vec4_cast(
    00148                 detail::fvec4SIMD const & x);
    00149
    00152         detail::fvec4SIMD abs(detail::fvec4SIMD const & x);
    00153
    00156         detail::fvec4SIMD sign(detail::fvec4SIMD const & x);
    00157
    00160         detail::fvec4SIMD floor(detail::fvec4SIMD const & x);
    00161
    00165         detail::fvec4SIMD trunc(detail::fvec4SIMD const & x);
    00166
    00173         detail::fvec4SIMD round(detail::fvec4SIMD const & x);
    00174
    00179         //detail::fvec4SIMD roundEven(detail::fvec4SIMD const & x);
    00180
    00184         detail::fvec4SIMD ceil(detail::fvec4SIMD const & x);
    00185
    00188         detail::fvec4SIMD fract(detail::fvec4SIMD const & x);
    00189
    00193         detail::fvec4SIMD mod(
    00194                 detail::fvec4SIMD const & x,
    00195                 detail::fvec4SIMD const & y);
    00196
    00200         detail::fvec4SIMD mod(
    00201                 detail::fvec4SIMD const & x,
    00202                 float const & y);
    00203
    00209         //detail::fvec4SIMD modf(
    00210         //      detail::fvec4SIMD const & x,
    00211         //      detail::fvec4SIMD & i);
    00212
    00215         detail::fvec4SIMD min(
    00216                 detail::fvec4SIMD const & x,
    00217                 detail::fvec4SIMD const & y);
    00218
    00219         detail::fvec4SIMD min(
    00220                 detail::fvec4SIMD const & x,
    00221                 float const & y);
    00222
    00225         detail::fvec4SIMD max(
    00226                 detail::fvec4SIMD const & x,
    00227                 detail::fvec4SIMD const & y);
    00228
    00229         detail::fvec4SIMD max(
    00230                 detail::fvec4SIMD const & x,
    00231                 float const & y);
    00232
    00236         detail::fvec4SIMD clamp(
    00237                 detail::fvec4SIMD const & x,
    00238                 detail::fvec4SIMD const & minVal,
    00239                 detail::fvec4SIMD const & maxVal);
    00240
    00241         detail::fvec4SIMD clamp(
    00242                 detail::fvec4SIMD const & x,
    00243                 float const & minVal,
    00244                 float const & maxVal);
    00245
    00269         // \todo Test when 'a' is a boolean.
    00271         detail::fvec4SIMD mix(
    00272                 detail::fvec4SIMD const & x,
    00273                 detail::fvec4SIMD const & y,
    00274                 detail::fvec4SIMD const & a);
    00275
    00278         detail::fvec4SIMD step(
    00279                 detail::fvec4SIMD const & edge,
    00280                 detail::fvec4SIMD const & x);
    00281
    00282         detail::fvec4SIMD step(
    00283                 float const & edge,
    00284                 detail::fvec4SIMD const & x);
    00285
    00296         detail::fvec4SIMD smoothstep(
    00297                 detail::fvec4SIMD const & edge0,
    00298                 detail::fvec4SIMD const & edge1,
    00299                 detail::fvec4SIMD const & x);
    00300
    00301         detail::fvec4SIMD smoothstep(
    00302                 float const & edge0,
    00303                 float const & edge1,
    00304                 detail::fvec4SIMD const & x);
    00305
    00312         //bvec4 isnan(detail::fvec4SIMD const & x);
    00313
    00320         //bvec4 isinf(detail::fvec4SIMD const & x);
    00321
    00326         //detail::ivec4SIMD floatBitsToInt(detail::fvec4SIMD const & value);
    00327
    00334         //detail::fvec4SIMD intBitsToFloat(detail::ivec4SIMD const & value);
    00335
    00338         detail::fvec4SIMD fma(
    00339                 detail::fvec4SIMD const & a,
    00340                 detail::fvec4SIMD const & b,
    00341                 detail::fvec4SIMD const & c);
    00342
    00352         //detail::fvec4SIMD frexp(detail::fvec4SIMD const & x, detail::ivec4SIMD & exp);
    00353
    00360         //detail::fvec4SIMD ldexp(detail::fvec4SIMD const & x, detail::ivec4SIMD const & exp);
    00361
    00364         float length(
    00365                 detail::fvec4SIMD const & x);
    00366
    00370         float fastLength(
    00371                 detail::fvec4SIMD const & x);
    00372
    00376         float niceLength(
    00377                 detail::fvec4SIMD const & x);
    00378
    00381         detail::fvec4SIMD length4(
    00382                 detail::fvec4SIMD const & x);
    00383
    00387         detail::fvec4SIMD fastLength4(
    00388                 detail::fvec4SIMD const & x);
    00389
    00393         detail::fvec4SIMD niceLength4(
    00394                 detail::fvec4SIMD const & x);
    00395
    00398         float distance(
    00399                 detail::fvec4SIMD const & p0,
    00400                 detail::fvec4SIMD const & p1);
    00401
    00404         detail::fvec4SIMD distance4(
    00405                 detail::fvec4SIMD const & p0,
    00406                 detail::fvec4SIMD const & p1);
    00407
    00410         float simdDot(
    00411                 detail::fvec4SIMD const & x,
    00412                 detail::fvec4SIMD const & y);
    00413
    00416         detail::fvec4SIMD dot4(
    00417                 detail::fvec4SIMD const & x,
    00418                 detail::fvec4SIMD const & y);
    00419
    00422         detail::fvec4SIMD cross(
    00423                 detail::fvec4SIMD const & x,
    00424                 detail::fvec4SIMD const & y);
    00425
    00428         detail::fvec4SIMD normalize(
    00429                 detail::fvec4SIMD const & x);
    00430
    00434         detail::fvec4SIMD fastNormalize(
    00435                 detail::fvec4SIMD const & x);
    00436
    00439         detail::fvec4SIMD simdFaceforward(
    00440                 detail::fvec4SIMD const & N,
    00441                 detail::fvec4SIMD const & I,
    00442                 detail::fvec4SIMD const & Nref);
    00443
    00447         detail::fvec4SIMD reflect(
    00448                 detail::fvec4SIMD const & I,
    00449                 detail::fvec4SIMD const & N);
    00450
    00455         detail::fvec4SIMD refract(
    00456                 detail::fvec4SIMD const & I,
    00457                 detail::fvec4SIMD const & N,
    00458                 float const & eta);
    00459
    00462         detail::fvec4SIMD sqrt(
    00463                 detail::fvec4SIMD const & x);
    00464
    00468         detail::fvec4SIMD niceSqrt(
    00469                 detail::fvec4SIMD const & x);
    00470
    00474         detail::fvec4SIMD fastSqrt(
    00475                 detail::fvec4SIMD const & x);
    00476
    00479         detail::fvec4SIMD inversesqrt(
    00480                 detail::fvec4SIMD const & x);
    00481
    00485         detail::fvec4SIMD fastInversesqrt(
    00486                 detail::fvec4SIMD const & x);
    00487
    00489 }//namespace glm
    00490
    00491 #include "simd_vec4.inl"
    00492
    00493 #endif//(GLM_ARCH != GLM_ARCH_PURE)
    00494
    00495 #endif//GLM_GTX_simd_vec4