|
|
|
@ -24,26 +24,26 @@ namespace detail |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
template<qualifier Q, int E0, int E1, int E2, int E3> |
|
|
|
|
struct _swizzle_base1<4, int32, Q, E0,E1,E2,E3, true> : public _swizzle_base0<int32, 4> |
|
|
|
|
struct _swizzle_base1<4, int, Q, E0,E1,E2,E3, true> : public _swizzle_base0<int, 4> |
|
|
|
|
{ |
|
|
|
|
GLM_FUNC_QUALIFIER vec<4, int32, Q> operator ()() const |
|
|
|
|
GLM_FUNC_QUALIFIER vec<4, int, Q> operator ()() const |
|
|
|
|
{ |
|
|
|
|
__m128i data = *reinterpret_cast<__m128i const*>(&this->_buffer); |
|
|
|
|
|
|
|
|
|
vec<4, int32, Q> Result; |
|
|
|
|
vec<4, int, Q> Result; |
|
|
|
|
Result.data = _mm_shuffle_epi32(data, _MM_SHUFFLE(E3, E2, E1, E0)); |
|
|
|
|
return Result; |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
template<qualifier Q, int E0, int E1, int E2, int E3> |
|
|
|
|
struct _swizzle_base1<4, uint32, Q, E0,E1,E2,E3, true> : public _swizzle_base0<uint32, 4> |
|
|
|
|
struct _swizzle_base1<4, uint, Q, E0,E1,E2,E3, true> : public _swizzle_base0<uint, 4> |
|
|
|
|
{ |
|
|
|
|
GLM_FUNC_QUALIFIER vec<4, uint32, Q> operator ()() const |
|
|
|
|
GLM_FUNC_QUALIFIER vec<4, uint, Q> operator ()() const |
|
|
|
|
{ |
|
|
|
|
__m128i data = *reinterpret_cast<__m128i const*>(&this->_buffer); |
|
|
|
|
|
|
|
|
|
vec<4, uint32, Q> Result; |
|
|
|
|
vec<4, uint, Q> Result; |
|
|
|
|
Result.data = _mm_shuffle_epi32(data, _MM_SHUFFLE(E3, E2, E1, E0)); |
|
|
|
|
return Result; |
|
|
|
|
} |
|
|
|
@ -313,9 +313,9 @@ namespace detail |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
template<qualifier Q> |
|
|
|
|
struct compute_vec4_equal<int32, Q, true, 32, true> |
|
|
|
|
struct compute_vec4_equal<int, Q, true, 32, true> |
|
|
|
|
{ |
|
|
|
|
static bool call(vec<4, int32, Q> const& v1, vec<4, int32, Q> const& v2) |
|
|
|
|
static bool call(vec<4, int, Q> const& v1, vec<4, int, Q> const& v2) |
|
|
|
|
{ |
|
|
|
|
//return _mm_movemask_epi8(_mm_cmpeq_epi32(v1.data, v2.data)) != 0; |
|
|
|
|
__m128i neq = _mm_xor_si128(v1.data, v2.data); |
|
|
|
@ -333,9 +333,9 @@ namespace detail |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
template<qualifier Q> |
|
|
|
|
struct compute_vec4_nequal<int32, Q, true, 32, true> |
|
|
|
|
struct compute_vec4_nequal<int, Q, true, 32, true> |
|
|
|
|
{ |
|
|
|
|
static bool call(vec<4, int32, Q> const& v1, vec<4, int32, Q> const& v2) |
|
|
|
|
static bool call(vec<4, int, Q> const& v1, vec<4, int, Q> const& v2) |
|
|
|
|
{ |
|
|
|
|
//return _mm_movemask_epi8(_mm_cmpneq_epi32(v1.data, v2.data)) != 0; |
|
|
|
|
__m128i neq = _mm_xor_si128(v1.data, v2.data); |
|
|
|
@ -378,33 +378,33 @@ namespace detail |
|
|
|
|
# endif |
|
|
|
|
|
|
|
|
|
template<> |
|
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int32, aligned_lowp>::vec(int32 _s) : |
|
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_lowp>::vec(int _s) : |
|
|
|
|
data(_mm_set1_epi32(_s)) |
|
|
|
|
{} |
|
|
|
|
|
|
|
|
|
template<> |
|
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int32, aligned_mediump>::vec(int32 _s) : |
|
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_mediump>::vec(int _s) : |
|
|
|
|
data(_mm_set1_epi32(_s)) |
|
|
|
|
{} |
|
|
|
|
|
|
|
|
|
template<> |
|
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int32, aligned_highp>::vec(int32 _s) : |
|
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_highp>::vec(int _s) : |
|
|
|
|
data(_mm_set1_epi32(_s)) |
|
|
|
|
{} |
|
|
|
|
|
|
|
|
|
# if GLM_ARCH & GLM_ARCH_AVX2_BIT |
|
|
|
|
template<> |
|
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int64, aligned_lowp>::vec(int64 _s) : |
|
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, detail::int64, aligned_lowp>::vec(detail::int64 _s) : |
|
|
|
|
data(_mm256_set1_epi64x(_s)) |
|
|
|
|
{} |
|
|
|
|
|
|
|
|
|
template<> |
|
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int64, aligned_mediump>::vec(int64 _s) : |
|
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, detail::int64, aligned_mediump>::vec(detail::int64 _s) : |
|
|
|
|
data(_mm256_set1_epi64x(_s)) |
|
|
|
|
{} |
|
|
|
|
|
|
|
|
|
template<> |
|
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int64, aligned_highp>::vec(int64 _s) : |
|
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int64, aligned_highp>::vec(detail::int64 _s) : |
|
|
|
|
data(_mm256_set1_epi64x(_s)) |
|
|
|
|
{} |
|
|
|
|
# endif |
|
|
|
@ -426,37 +426,37 @@ namespace detail |
|
|
|
|
|
|
|
|
|
template<> |
|
|
|
|
template<> |
|
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int32, aligned_lowp>::vec(int32 _x, int32 _y, int32 _z, int32 _w) : |
|
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_lowp>::vec(int _x, int _y, int _z, int _w) : |
|
|
|
|
data(_mm_set_epi32(_w, _z, _y, _x)) |
|
|
|
|
{} |
|
|
|
|
|
|
|
|
|
template<> |
|
|
|
|
template<> |
|
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int32, aligned_mediump>::vec(int32 _x, int32 _y, int32 _z, int32 _w) : |
|
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_mediump>::vec(int _x, int _y, int _z, int _w) : |
|
|
|
|
data(_mm_set_epi32(_w, _z, _y, _x)) |
|
|
|
|
{} |
|
|
|
|
|
|
|
|
|
template<> |
|
|
|
|
template<> |
|
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int32, aligned_highp>::vec(int32 _x, int32 _y, int32 _z, int32 _w) : |
|
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_highp>::vec(int _x, int _y, int _z, int _w) : |
|
|
|
|
data(_mm_set_epi32(_w, _z, _y, _x)) |
|
|
|
|
{} |
|
|
|
|
|
|
|
|
|
template<> |
|
|
|
|
template<> |
|
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_lowp>::vec(int32 _x, int32 _y, int32 _z, int32 _w) : |
|
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_lowp>::vec(int _x, int _y, int _z, int _w) : |
|
|
|
|
data(_mm_cvtepi32_ps(_mm_set_epi32(_w, _z, _y, _x))) |
|
|
|
|
{} |
|
|
|
|
|
|
|
|
|
template<> |
|
|
|
|
template<> |
|
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_mediump>::vec(int32 _x, int32 _y, int32 _z, int32 _w) : |
|
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_mediump>::vec(int _x, int _y, int _z, int _w) : |
|
|
|
|
data(_mm_cvtepi32_ps(_mm_set_epi32(_w, _z, _y, _x))) |
|
|
|
|
{} |
|
|
|
|
|
|
|
|
|
template<> |
|
|
|
|
template<> |
|
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(int32 _x, int32 _y, int32 _z, int32 _w) : |
|
|
|
|
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(int _x, int _y, int _z, int _w) : |
|
|
|
|
data(_mm_cvtepi32_ps(_mm_set_epi32(_w, _z, _y, _x))) |
|
|
|
|
{} |
|
|
|
|
#endif// GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE |
|
|
|
|