|
|
|
@ -9,8 +9,6 @@ |
|
|
|
|
|
|
|
|
|
#include <glm/glm.hpp> |
|
|
|
|
#include <glm/gtc/half_float.hpp> |
|
|
|
|
#include <xmmintrin.h> |
|
|
|
|
#include <emmintrin.h> |
|
|
|
|
|
|
|
|
|
template <int Value> |
|
|
|
|
struct mask |
|
|
|
@ -26,12 +24,12 @@ enum comp |
|
|
|
|
W |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
template<comp X, comp Y, comp Z, comp W> |
|
|
|
|
__m128 swizzle(glm::vec4 const & v) |
|
|
|
|
{ |
|
|
|
|
__m128 Src = _mm_set_ps(v.w, v.z, v.y, v.x); |
|
|
|
|
return _mm_shuffle_ps(Src, Src, mask<(int(W) << 6) | (int(Z) << 4) | (int(Y) << 2) | (int(X) << 0)>::value); |
|
|
|
|
} |
|
|
|
|
//template<comp X, comp Y, comp Z, comp W>
|
|
|
|
|
//__m128 swizzle(glm::vec4 const & v)
|
|
|
|
|
//{
|
|
|
|
|
// __m128 Src = _mm_set_ps(v.w, v.z, v.y, v.x);
|
|
|
|
|
// return _mm_shuffle_ps(Src, Src, mask<(int(W) << 6) | (int(Z) << 4) | (int(Y) << 2) | (int(X) << 0)>::value);
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
bool test_hvec4() |
|
|
|
|
{ |
|
|
|
@ -57,8 +55,8 @@ int main() |
|
|
|
|
{ |
|
|
|
|
test_hvec4(); |
|
|
|
|
|
|
|
|
|
__m128 DataA = swizzle<X, Y, Z, W>(glm::vec4(1.0f, 2.0f, 3.0f, 4.0f)); |
|
|
|
|
__m128 DataB = swizzle<W, Z, Y, X>(glm::vec4(1.0f, 2.0f, 3.0f, 4.0f)); |
|
|
|
|
//__m128 DataA = swizzle<X, Y, Z, W>(glm::vec4(1.0f, 2.0f, 3.0f, 4.0f));
|
|
|
|
|
//__m128 DataB = swizzle<W, Z, Y, X>(glm::vec4(1.0f, 2.0f, 3.0f, 4.0f));
|
|
|
|
|
|
|
|
|
|
bool Result = true; |
|
|
|
|
|
|
|
|
|