diff --git a/glm/core/func_integer.inl b/glm/core/func_integer.inl index cbbad8f3..185f082d 100644 --- a/glm/core/func_integer.inl +++ b/glm/core/func_integer.inl @@ -522,7 +522,7 @@ namespace glm } // findMSB -#if(GLM_COMPILER & GLM_COMPILER_VC) +#if((GLM_ARCH != GLM_ARCH_PURE) && (GLM_COMPILER & GLM_COMPILER_VC)) template GLM_FUNC_QUALIFIER int findMSB @@ -535,7 +535,7 @@ namespace glm return int(Result); } -#elif((GLM_COMPILER & GLM_COMPILER_GCC) && __has_builtin(__builtin_clz)) +#elif((GLM_ARCH != GLM_ARCH_PURE) && (GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC40)) template GLM_FUNC_QUALIFIER int findMSB @@ -543,7 +543,7 @@ namespace glm genIUType const & Value ) { - return __builtin_clz(x); + return __builtin_clz(Value); } #else diff --git a/glm/core/type_vec1.hpp b/glm/core/type_vec1.hpp index 1e41bd86..6d1f89ad 100644 --- a/glm/core/type_vec1.hpp +++ b/glm/core/type_vec1.hpp @@ -118,33 +118,55 @@ namespace detail // Unary arithmetic operators GLM_FUNC_DECL tvec1 & operator= (tvec1 const & v); + template + GLM_FUNC_DECL tvec1 & operator= (tvec1 const & v); - GLM_FUNC_DECL tvec1 & operator+=(value_type const & s); - GLM_FUNC_DECL tvec1 & operator+=(tvec1 const & v); - GLM_FUNC_DECL tvec1 & operator-=(value_type const & s); - GLM_FUNC_DECL tvec1 & operator-=(tvec1 const & v); - GLM_FUNC_DECL tvec1 & operator*=(value_type const & s); - GLM_FUNC_DECL tvec1 & operator*=(tvec1 const & v); - GLM_FUNC_DECL tvec1 & operator/=(value_type const & s); - GLM_FUNC_DECL tvec1 & operator/=(tvec1 const & v); + template + GLM_FUNC_DECL tvec1 & operator+=(U const & s); + template + GLM_FUNC_DECL tvec1 & operator+=(tvec1 const & v); + template + GLM_FUNC_DECL tvec1 & operator-=(U const & s); + template + GLM_FUNC_DECL tvec1 & operator-=(tvec1 const & v); + template + GLM_FUNC_DECL tvec1 & operator*=(U const & s); + template + GLM_FUNC_DECL tvec1 & operator*=(tvec1 const & v); + template + GLM_FUNC_DECL tvec1 & operator/=(U const & s); + template + GLM_FUNC_DECL tvec1 & operator/=(tvec1 const & v); GLM_FUNC_DECL tvec1 & operator++(); GLM_FUNC_DECL tvec1 & operator--(); ////////////////////////////////////// // Unary bit operators - GLM_FUNC_DECL tvec1 & operator%=(value_type const & s); - GLM_FUNC_DECL tvec1 & operator%=(tvec1 const & v); - GLM_FUNC_DECL tvec1 & operator&=(value_type const & s); - GLM_FUNC_DECL tvec1 & operator&=(tvec1 const & v); - GLM_FUNC_DECL tvec1 & operator|=(value_type const & s); - GLM_FUNC_DECL tvec1 & operator|=(tvec1 const & v); - GLM_FUNC_DECL tvec1 & operator^=(value_type const & s); - GLM_FUNC_DECL tvec1 & operator^=(tvec1 const & v); - GLM_FUNC_DECL tvec1 & operator<<=(value_type const & s); - GLM_FUNC_DECL tvec1 & operator<<=(tvec1 const & v); - GLM_FUNC_DECL tvec1 & operator>>=(value_type const & s); - GLM_FUNC_DECL tvec1 & operator>>=(tvec1 const & v); + template + GLM_FUNC_DECL tvec1 & operator%=(U const & s); + template + GLM_FUNC_DECL tvec1 & operator%=(tvec1 const & v); + template + GLM_FUNC_DECL tvec1 & operator&=(U const & s); + template + GLM_FUNC_DECL tvec1 & operator&=(tvec1 const & v); + template + GLM_FUNC_DECL tvec1 & operator|=(U const & s); + template + GLM_FUNC_DECL tvec1 & operator|=(tvec1 const & v); + template + GLM_FUNC_DECL tvec1 & operator^=(U const & s); + template + GLM_FUNC_DECL tvec1 & operator^=(tvec1 const & v); + template + GLM_FUNC_DECL tvec1 & operator<<=(U const & s); + template + GLM_FUNC_DECL tvec1 & operator<<=(tvec1 const & v); + template + GLM_FUNC_DECL tvec1 & operator>>=(U const & s); + template + GLM_FUNC_DECL tvec1 & operator>>=(tvec1 const & v); ////////////////////////////////////// // Swizzle operators diff --git a/glm/gtc/type_precision.hpp b/glm/gtc/type_precision.hpp index bd45cc2b..0cbf51d0 100644 --- a/glm/gtc/type_precision.hpp +++ b/glm/gtc/type_precision.hpp @@ -65,27 +65,32 @@ namespace glm typedef detail::int32 int32; //!< \brief 32bit signed integer. (from GLM_GTC_type_precision extension) typedef detail::int64 int64; //!< \brief 64bit signed integer. (from GLM_GTC_type_precision extension) + typedef detail::int8 int8_t; //!< \brief 8bit signed integer. (from GLM_GTC_type_precision extension) + typedef detail::int16 int16_t; //!< \brief 16bit signed integer. (from GLM_GTC_type_precision extension) + typedef detail::int32 int32_t; //!< \brief 32bit signed integer. (from GLM_GTC_type_precision extension) + typedef detail::int64 int64_t; //!< \brief 64bit signed integer. (from GLM_GTC_type_precision extension) + typedef int8 i8; //!< \brief 8bit signed integer. (from GLM_GTC_type_precision extension) typedef int16 i16; //!< \brief 16bit signed integer. (from GLM_GTC_type_precision extension) typedef int32 i32; //!< \brief 32bit signed integer. (from GLM_GTC_type_precision extension) typedef int64 i64; //!< \brief 64bit signed integer. (from GLM_GTC_type_precision extension) - //typedef i8 i8vec1; //!< \brief 8bit signed integer scalar. (from GLM_GTC_type_precision extension) + typedef detail::tvec1 i8vec1; //!< \brief 8bit signed integer scalar. (from GLM_GTC_type_precision extension) typedef detail::tvec2 i8vec2; //!< \brief 8bit signed integer vector of 2 components. (from GLM_GTC_type_precision extension) typedef detail::tvec3 i8vec3; //!< \brief 8bit signed integer vector of 3 components. (from GLM_GTC_type_precision extension) typedef detail::tvec4 i8vec4; //!< \brief 8bit signed integer vector of 4 components. (from GLM_GTC_type_precision extension) - //typedef i16 i16vec1; //!< \brief 16bit signed integer scalar. (from GLM_GTC_type_precision extension) + typedef detail::tvec1 i16vec1; //!< \brief 16bit signed integer scalar. (from GLM_GTC_type_precision extension) typedef detail::tvec2 i16vec2; //!< \brief 16bit signed integer vector of 2 components. (from GLM_GTC_type_precision extension) typedef detail::tvec3 i16vec3; //!< \brief 16bit signed integer vector of 3 components. (from GLM_GTC_type_precision extension) typedef detail::tvec4 i16vec4; //!< \brief 16bit signed integer vector of 4 components. (from GLM_GTC_type_precision extension) - //typedef i32 i32vec1; //!< \brief 32bit signed integer scalar. (from GLM_GTC_type_precision extension) + typedef detail::tvec1 i32vec1; //!< \brief 32bit signed integer scalar. (from GLM_GTC_type_precision extension) typedef detail::tvec2 i32vec2; //!< \brief 32bit signed integer vector of 2 components. (from GLM_GTC_type_precision extension) typedef detail::tvec3 i32vec3; //!< \brief 32bit signed integer vector of 3 components. (from GLM_GTC_type_precision extension) typedef detail::tvec4 i32vec4; //!< \brief 32bit signed integer vector of 4 components. (from GLM_GTC_type_precision extension) - //typedef i64 i64vec1; //!< \brief 32bit signed integer scalar. (from GLM_GTC_type_precision extension) + typedef detail::tvec1 i64vec1; //!< \brief 32bit signed integer scalar. (from GLM_GTC_type_precision extension) typedef detail::tvec2 i64vec2; //!< \brief 64bit signed integer vector of 2 components. (from GLM_GTC_type_precision extension) typedef detail::tvec3 i64vec3; //!< \brief 64bit signed integer vector of 3 components. (from GLM_GTC_type_precision extension) typedef detail::tvec4 i64vec4; //!< \brief 64bit signed integer vector of 4 components. (from GLM_GTC_type_precision extension) @@ -98,27 +103,32 @@ namespace glm typedef detail::uint32 uint32; //!< \brief 32bit unsigned integer. (from GLM_GTC_type_precision extension) typedef detail::uint64 uint64; //!< \brief 64bit unsigned integer. (from GLM_GTC_type_precision extension) + typedef detail::uint8 uint8_t; //!< \brief 8bit unsigned integer. (from GLM_GTC_type_precision extension) + typedef detail::uint16 uint16_t; //!< \brief 16bit unsigned integer. (from GLM_GTC_type_precision extension) + typedef detail::uint32 uint32_t; //!< \brief 32bit unsigned integer. (from GLM_GTC_type_precision extension) + typedef detail::uint64 uint64_t; //!< \brief 64bit unsigned integer. (from GLM_GTC_type_precision extension) + typedef uint8 u8; //!< \brief 8bit unsigned integer. (from GLM_GTC_type_precision extension) typedef uint16 u16; //!< \brief 16bit unsigned integer. (from GLM_GTC_type_precision extension) typedef uint32 u32; //!< \brief 32bit unsigned integer. (from GLM_GTC_type_precision extension) typedef uint64 u64; //!< \brief 64bit unsigned integer. (from GLM_GTC_type_precision extension) - //typedef u8 u8vec1; //!< \brief 8bit unsigned integer scalar. (from GLM_GTC_type_precision extension) + typedef detail::tvec1 u8vec1; //!< \brief 8bit unsigned integer scalar. (from GLM_GTC_type_precision extension) typedef detail::tvec2 u8vec2; //!< \brief 8bit unsigned integer vector of 2 components. (from GLM_GTC_type_precision extension) typedef detail::tvec3 u8vec3; //!< \brief 8bit unsigned integer vector of 3 components. (from GLM_GTC_type_precision extension) typedef detail::tvec4 u8vec4; //!< \brief 8bit unsigned integer vector of 4 components. (from GLM_GTC_type_precision extension) - //typedef u16 u16vec1; //!< \brief 16bit unsigned integer scalar. (from GLM_GTC_type_precision extension) + typedef detail::tvec1 u16vec1; //!< \brief 16bit unsigned integer scalar. (from GLM_GTC_type_precision extension) typedef detail::tvec2 u16vec2; //!< \brief 16bit unsigned integer vector of 2 components. (from GLM_GTC_type_precision extension) typedef detail::tvec3 u16vec3; //!< \brief 16bit unsigned integer vector of 3 components. (from GLM_GTC_type_precision extension) typedef detail::tvec4 u16vec4; //!< \brief 16bit unsigned integer vector of 4 components. (from GLM_GTC_type_precision extension) - //typedef u32 u32vec1; //!< \brief 32bit unsigned integer scalar. (from GLM_GTC_type_precision extension) + typedef detail::tvec1 u32vec1; //!< \brief 32bit unsigned integer scalar. (from GLM_GTC_type_precision extension) typedef detail::tvec2 u32vec2; //!< \brief 32bit unsigned integer vector of 2 components. (from GLM_GTC_type_precision extension) typedef detail::tvec3 u32vec3; //!< \brief 32bit unsigned integer vector of 3 components. (from GLM_GTC_type_precision extension) typedef detail::tvec4 u32vec4; //!< \brief 32bit unsigned integer vector of 4 components. (from GLM_GTC_type_precision extension) - //typedef u64 u64vec1; //!< \brief 64bit unsigned integer scalar. (from GLM_GTC_type_precision extension) + typedef detail::tvec1 u64vec1; //!< \brief 64bit unsigned integer scalar. (from GLM_GTC_type_precision extension) typedef detail::tvec2 u64vec2; //!< \brief 64bit unsigned integer vector of 2 components. (from GLM_GTC_type_precision extension) typedef detail::tvec3 u64vec3; //!< \brief 64bit unsigned integer vector of 3 components. (from GLM_GTC_type_precision extension) typedef detail::tvec4 u64vec4; //!< \brief 64bit unsigned integer vector of 4 components. (from GLM_GTC_type_precision extension) @@ -130,6 +140,10 @@ namespace glm typedef detail::float32 float32; //!< \brief Single-precision floating-point scalar. (from GLM_GTC_type_precision extension) typedef detail::float64 float64; //!< \brief Double-precision floating-point scalar. (from GLM_GTC_type_precision extension) + typedef detail::float16 float16_t; //!< \brief Half-precision floating-point scalar. (from GLM_GTC_type_precision extension) + typedef detail::float32 float32_t; //!< \brief Single-precision floating-point scalar. (from GLM_GTC_type_precision extension) + typedef detail::float64 float64_t; //!< \brief Double-precision floating-point scalar. (from GLM_GTC_type_precision extension) + typedef float16 f16; //!< \brief Half-precision floating-point scalar. (from GLM_GTC_type_precision extension) typedef float32 f32; //!< \brief Single-precision floating-point scalar. (from GLM_GTC_type_precision extension) typedef float64 f64; //!< \brief Double-precision floating-point scalar. (from GLM_GTC_type_precision extension) @@ -138,17 +152,17 @@ namespace glm typedef detail::tvec3 fvec3; //!< Vector of 3 single-precision floating-point numbers. (from GLM_GTC_type_precision extension) typedef detail::tvec4 fvec4; //!< Vector of 4 single-precision floating-point numbers. (from GLM_GTC_type_precision extension) - //typedef f16 f16vec1; //!< \brief Half-precision floating-point scalar. (from GLM_GTC_type_precision extension) + typedef detail::tvec1 f16vec1; //!< \brief Half-precision floating-point scalar. (from GLM_GTC_type_precision extension) typedef detail::tvec2 f16vec2; //!< \brief Half-precision floating-point vector of 2 components. (from GLM_GTC_type_precision extension) typedef detail::tvec3 f16vec3; //!< \brief Half-precision floating-point vector of 3 components. (from GLM_GTC_type_precision extension) typedef detail::tvec4 f16vec4; //!< \brief Half-precision floating-point vector of 4 components. (from GLM_GTC_type_precision extension) - //typedef f32 f32vec1; //!< \brief Single-precision floating-point scalar. (from GLM_GTC_type_precision extension) + typedef detail::tvec1 f32vec1; //!< \brief Single-precision floating-point scalar. (from GLM_GTC_type_precision extension) typedef detail::tvec2 f32vec2; //!< \brief Single-precision floating-point vector of 2 components. (from GLM_GTC_type_precision extension) typedef detail::tvec3 f32vec3; //!< \brief Single-precision floating-point vector of 3 components. (from GLM_GTC_type_precision extension) typedef detail::tvec4 f32vec4; //!< \brief Single-precision floating-point vector of 4 components. (from GLM_GTC_type_precision extension) - //typedef f64 f64vec1; //!< \brief Single-precision floating-point scalar. (from GLM_GTC_type_precision extension) + typedef detail::tvec1 f64vec1; //!< \brief Single-precision floating-point scalar. (from GLM_GTC_type_precision extension) typedef detail::tvec2 f64vec2; //!< \brief Double-precision floating-point vector of 2 components. (from GLM_GTC_type_precision extension) typedef detail::tvec3 f64vec3; //!< \brief Double-precision floating-point vector of 3 components. (from GLM_GTC_type_precision extension) typedef detail::tvec4 f64vec4; //!< \brief Double-precision floating-point vector of 4 components. (from GLM_GTC_type_precision extension) diff --git a/glm/gtx/simd_mat4.hpp b/glm/gtx/simd_mat4.hpp index 2688b7d2..1569a03e 100644 --- a/glm/gtx/simd_mat4.hpp +++ b/glm/gtx/simd_mat4.hpp @@ -41,6 +41,8 @@ // Dependency: #include "../glm.hpp" +#if(GLM_ARCH != GLM_ARCH_PURE) + #if(GLM_ARCH & GLM_ARCH_SSE2) # include "../core/intrinsic_matrix.hpp" # include "../gtx/simd_vec4.hpp" @@ -197,4 +199,6 @@ namespace detail #include "simd_mat4.inl" +#endif//(GLM_ARCH != GLM_ARCH_PURE) + #endif//GLM_GTX_simd_mat4 diff --git a/glm/gtx/simd_vec4.hpp b/glm/gtx/simd_vec4.hpp index 132e88ca..c08fe51d 100644 --- a/glm/gtx/simd_vec4.hpp +++ b/glm/gtx/simd_vec4.hpp @@ -41,6 +41,8 @@ // Dependency: #include "../glm.hpp" +#if(GLM_ARCH != GLM_ARCH_PURE) + #if(GLM_ARCH & GLM_ARCH_SSE2) # include "../core/intrinsic_common.hpp" # include "../core/intrinsic_geometric.hpp" @@ -488,4 +490,6 @@ namespace detail #include "simd_vec4.inl" +#endif//(GLM_ARCH != GLM_ARCH_PURE) + #endif//GLM_GTX_simd_vec4 diff --git a/test/gtx/gtx_integer.cpp b/test/gtx/gtx_integer.cpp index a3429387..1a77db3f 100644 --- a/test/gtx/gtx_integer.cpp +++ b/test/gtx/gtx_integer.cpp @@ -10,7 +10,7 @@ #include #include #include -#include +#include int test_floor_log2() { diff --git a/test/gtx/gtx_simd_mat4.cpp b/test/gtx/gtx_simd_mat4.cpp index 25605595..7563f38e 100644 --- a/test/gtx/gtx_simd_mat4.cpp +++ b/test/gtx/gtx_simd_mat4.cpp @@ -18,6 +18,8 @@ #include #include +#if(GLM_ARCH != GLM_ARCH_PURE) + std::vector test_detA(std::vector const & Data) { std::vector Test(Data.size()); @@ -288,3 +290,13 @@ int main() return Error; } +#else + +int main() +{ + int Error = 0; + + return Error; +} + +#endif//(GLM_ARCH != GLM_ARCH_PURE) diff --git a/test/gtx/gtx_simd_vec4.cpp b/test/gtx/gtx_simd_vec4.cpp index d5df3ada..078a782f 100644 --- a/test/gtx/gtx_simd_vec4.cpp +++ b/test/gtx/gtx_simd_vec4.cpp @@ -11,6 +11,8 @@ #include #include +#if(GLM_ARCH != GLM_ARCH_PURE) + int main() { glm::simdVec4 A1(0.0f, 0.1f, 0.2f, 0.3f); @@ -28,3 +30,14 @@ int main() return 0; } + +#else + +int main() +{ + int Error = 0; + + return Error; +} + +#endif//(GLM_ARCH != GLM_ARCH_PURE)