intrinsic_geometric.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 #ifndef glm_core_intrinsic_geometric
00030 #define glm_core_intrinsic_geometric
00031 
00032 #include "setup.hpp"
00033 
00034 #if((GLM_ARCH & GLM_ARCH_SSE2) != GLM_ARCH_SSE2)
00035 #       error "SSE2 instructions not supported or enabled"
00036 #else
00037 
00038 #include "intrinsic_common.hpp"
00039 
00040 namespace glm{
00041 namespace detail
00042 {
00043         //length
00044         __m128 sse_len_ps(__m128 x);
00045 
00046         //distance
00047         __m128 sse_dst_ps(__m128 p0, __m128 p1);
00048 
00049         //dot
00050         __m128 sse_dot_ps(__m128 v1, __m128 v2);
00051 
00052         // SSE1
00053         __m128 sse_dot_ss(__m128 v1, __m128 v2);
00054 
00055         //cross
00056         __m128 sse_xpd_ps(__m128 v1, __m128 v2);
00057 
00058         //normalize
00059         __m128 sse_nrm_ps(__m128 v);
00060 
00061         //faceforward
00062         __m128 sse_ffd_ps(__m128 N, __m128 I, __m128 Nref);
00063 
00064         //reflect
00065         __m128 sse_rfe_ps(__m128 I, __m128 N);
00066 
00067         //refract
00068         __m128 sse_rfa_ps(__m128 I, __m128 N, __m128 eta);
00069 
00070 }//namespace detail
00071 }//namespace glm
00072 
00073 #include "intrinsic_geometric.inl"
00074 
00075 #endif//GLM_ARCH
00076 #endif//glm_core_intrinsic_geometric